Show
Ignore:
Timestamp:
04/15/08 00:23:42 (9 months ago)
Author:
tomoyo
Message:

とりあえず適当にモードを使うことで特定のチャンネルはエコーバックしないようにする機能を追加。

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • TwitterIrcGateway/TwitterIrcGatewayCore/Session.cs

    r369 r373  
    6666            MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_LIST); 
    6767            MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_TIGGC); 
    68             MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_TOPIC); 
     68            MessageRecieved += new EventHandler<MessageRecievedEventArgs>(MessageRecieved_MODE); 
    6969 
    7070            _groups = new Groups(); 
     
    413413                    SendNumericReply(NumericReply.RPL_ENDOFNAMES, channelName, "End of NAMES list"); 
    414414                    group.IsJoined = true; 
     415 
     416                    // mode 
     417                    foreach (ChannelMode mode in group.ChannelModes) 
     418                    { 
     419                        Send(new ModeMessage(channelName, mode.ToString())); 
     420                    } 
    415421                     
    416422                    // Set topic of client, if topic was set 
     
    736742                        foreach (Group group in _groups.Values) 
    737743                        { 
    738                             if (group.IsJoined && String.Compare(message.Receiver, group.Name, true) != 0) 
     744                            if (group.IsJoined && !group.IgnoreEchoBack && String.Compare(message.Receiver, group.Name, true) != 0) 
    739745                            { 
    740746                                if (_server.BroadcastUpdateMessageIsNotice) 
     
    866872            } 
    867873        } 
    868  
     874         
     875        void MessageRecieved_MODE(object sender, MessageRecievedEventArgs e) 
     876        { 
     877            if (String.Compare(e.Message.Command, "MODE", true) != 0) return; 
     878            ModeMessage modeMsg = e.Message as ModeMessage; 
     879            // チャンネルターゲットのみ 
     880            if (modeMsg.CommandParams[0].StartsWith("#")) 
     881            { 
     882                String channel = modeMsg.CommandParams[0]; 
     883                String modeArgs = modeMsg.CommandParams[1]; 
     884                Group group; 
     885                if (!_groups.TryGetValue(channel, out group)) 
     886                { 
     887                    SendErrorReply(ErrorReply.ERR_NOSUCHCHANNEL); 
     888                } 
     889                 
     890                foreach (ChannelMode mode in ChannelMode.Parse(modeArgs)) 
     891                { 
     892                    foreach (ChannelMode mode2 in new List<ChannelMode>(group.ChannelModes)) 
     893                    { 
     894                        if (mode2.Mode == mode.Mode && mode2.Parameter == mode.Parameter) 
     895                        { 
     896                            if (mode.IsRemove) 
     897                            { 
     898                                // すでにあって削除 
     899                                group.ChannelModes.Remove(mode2); 
     900                            } 
     901                            else 
     902                            { 
     903                                // すでにある 
     904                                goto NEXT; 
     905                            } 
     906                        } 
     907                    } 
     908                     
     909                    if (!mode.IsRemove) 
     910                    { 
     911                        group.ChannelModes.Add(mode); 
     912                    } 
     913                    SendServer(new ModeMessage(channel, mode.ToString())); 
     914                    SaveGroups(); 
     915                NEXT: 
     916                    ; 
     917                } 
     918            } 
     919        } 
    869920        #endregion 
    870921