| 1 | using System; |
|---|
| 2 | using System.ComponentModel; |
|---|
| 3 | using Misuzilla.Net.Irc; |
|---|
| 4 | |
|---|
| 5 | namespace 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 | } |
|---|