root/TwitterIrcGateway/branches/hosting/TwitterIrcGatewayCore/AddIns/Console/Contexts/GroupContext.cs @ 673

Revision 673, 8.0 kB (checked in by tomoyo, 11 months ago)

グループの新規作成と削除を追加。

  • Property svn:keywords set to Id
Line 
1using System;
2using System.ComponentModel;
3using Misuzilla.Net.Irc;
4
5namespace Misuzilla.Applications.TwitterIrcGateway.AddIns.Console
6{
7    /// <summary>
8    ///
9    /// </summary>
10    [Description("グループの設定を行うコンテキストに切り替えます")]
11    public class GroupContext : Context
12    {
13        [Description("指定したグループ(チャンネル)にユーザを追加します")]
14        public void Invite(String[] channelNameAndUserNames)
15        {
16            if (channelNameAndUserNames.Length == 1)
17            {
18                Console.NotifyMessage("エラー: ユーザが指定されていません。");
19                return;
20            }
21
22            if (!Session.Groups.ContainsKey(channelNameAndUserNames[0]))
23            {
24                Console.NotifyMessage("エラー: 指定されたグループは存在しません。");
25                return;
26            }
27
28            for (var i = 1; i < channelNameAndUserNames.Length; i++)
29            {
30                Group group = CurrentSession.Groups[channelNameAndUserNames[0]];
31                String userName = channelNameAndUserNames[i];
32                if (!group.Exists(userName) && (String.Compare(userName, CurrentSession.Nick, true) != 0))
33                {
34                    group.Add(userName);
35                    if (group.IsJoined)
36                    {
37                        JoinMessage joinMsg = new JoinMessage(channelNameAndUserNames[0], "")
38                        {
39                            SenderHost = "twitter@" + Server.ServerName,
40                            SenderNick = userName
41                        };
42                        CurrentSession.Send(joinMsg);
43                    }
44                }
45
46            }
47
48            CurrentSession.SaveGroups();
49        }
50
51        [Description("指定したグループ(チャンネル)からユーザを削除します")]
52        public void Kick(String[] channelNameAndUserNames)
53        {
54            if (channelNameAndUserNames.Length == 1)
55            {
56                Console.NotifyMessage("エラー: ユーザが指定されていません。");
57                return;
58            }
59
60            if (!Session.Groups.ContainsKey(channelNameAndUserNames[0]))
61            {
62                Console.NotifyMessage("エラー: 指定されたグループは存在しません。");
63                return;
64            }
65
66            for (var i = 1; i < channelNameAndUserNames.Length; i++)
67            {
68                Group group = CurrentSession.Groups[channelNameAndUserNames[0]];
69                String userName = channelNameAndUserNames[i];
70                if (group.Exists(userName))
71                {
72                    group.Remove(userName);
73                    if (group.IsJoined)
74                    {
75                        PartMessage partMsg = new PartMessage(channelNameAndUserNames[0], "")
76                        {
77                            SenderHost = "twitter@" + Server.ServerName,
78                            SenderNick = userName
79                        };
80                        CurrentSession.Send(partMsg);
81                    }
82                }
83
84            }
85
86            CurrentSession.SaveGroups();
87        }
88   
89        [Description("指定したグループ(チャンネル)の名前を変更します")]
90        public void Rename([Description("現在のグループ名")]String oldChannelName, [Description("新しいグループ名")]String newChannelName)
91        {
92            if (!CheckChannelNamesForCopyOrRename(oldChannelName, newChannelName))
93                return;
94
95            // 旧チャンネルをPART
96            CurrentSession.SendServer(new PartMessage(oldChannelName, ""));
97
98            Group g = CurrentSession.Groups[oldChannelName];
99            g.Name = newChannelName;
100            CurrentSession.Groups.Remove(oldChannelName);
101            CurrentSession.Groups.Add(newChannelName, g);
102           
103            // 新チャンネルにJOIN
104            CurrentSession.JoinChannel(CurrentSession, g);
105            Console.NotifyMessage(String.Format("グループ名 {0} を {1} に変更しました。", oldChannelName, newChannelName));
106
107            CurrentSession.SaveGroups();
108        }
109   
110        [Description("グループ(チャンネル)を新規作成します")]
111        public void New([Description("新しいグループ名")]String newChannelName)
112        {
113            if (!CheckNewChannelName(newChannelName))
114                return;
115
116            // 新チャンネルにJOIN
117            Group g = new Group(newChannelName);
118            CurrentSession.Groups.Add(newChannelName, g);
119            CurrentSession.JoinChannel(CurrentSession, g);
120            Console.NotifyMessage(String.Format("グループ名 {0} を作成しました。", newChannelName));
121
122            CurrentSession.SaveGroups();
123        }
124       
125        [Description("指定したグループ(チャンネル)を削除します")]
126        public void Delete([Description("削除するグループ名")]String oldChannelName)
127        {
128            if (!CurrentSession.Groups.ContainsKey(oldChannelName))
129            {
130                Console.NotifyMessage("エラー: 指定されたグループは見つかりませんでした。");
131                return;
132            }
133
134
135            // 旧チャンネルをPART
136            CurrentSession.SendServer(new PartMessage(oldChannelName, ""));
137            // 削除
138            CurrentSession.Groups.Remove(oldChannelName);
139            Console.NotifyMessage(String.Format("グループ名 {0} を削除しました。", oldChannelName));
140
141            CurrentSession.SaveGroups();
142        }
143       
144        [Description("指定したグループ(チャンネル)の名前をコピーします")]
145        public void Copy([Description("現在のグループ名")]String oldChannelName, [Description("新しいグループ名")]String newChannelName)
146        {
147            if (!CheckChannelNamesForCopyOrRename(oldChannelName, newChannelName))
148                return;
149
150            Group g = CurrentSession.Groups[oldChannelName].Clone();
151            g.Name = newChannelName;
152            CurrentSession.Groups.Add(newChannelName, g);
153           
154            // 新チャンネルにJOIN
155            CurrentSession.JoinChannel(CurrentSession, g);
156            Console.NotifyMessage(String.Format("グループ {0} を {1} にコピーしました。", oldChannelName, newChannelName));
157           
158            CurrentSession.SaveGroups();
159        }
160   
161        private Boolean CheckNewChannelName(String newChannelName)
162        {
163            if (CurrentSession.Groups.ContainsKey(newChannelName) || String.Compare(CurrentSession.Config.ChannelName, newChannelName, true) == 0)
164            {
165                Console.NotifyMessage("エラー: 既に存在するグループ名を指定することは出来ません。");
166                return false;
167            }
168
169            if (!(newChannelName.StartsWith("#") && newChannelName.Length > 2))
170            {
171                Console.NotifyMessage("エラー: グループ(チャンネル)名は#で始まる必要があります。");
172                return false;
173            }
174
175            return true;
176        }
177        private Boolean CheckChannelNamesForCopyOrRename(String oldChannelName, String newChannelName)
178        {
179            if (!CurrentSession.Groups.ContainsKey(oldChannelName))
180            {
181                Console.NotifyMessage("エラー: 指定されたグループは見つかりませんでした。");
182                return false;
183            }
184            if (String.Compare(oldChannelName, CurrentSession.Config.ChannelName, true) == 0)
185            {
186                Console.NotifyMessage("エラー: メインタイムラインのチャンネル名を変更するにはConfigコンテキストの設定変更で行う必要があります。");
187                return false;
188            }
189
190            return CheckNewChannelName(newChannelName);
191        }
192    }
193}
Note: See TracBrowser for help on using the browser.