The easy to use and full featured Irc Bot everyone is talking about!
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

Owner.cs 11KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. using System;
  2. using System.Diagnostics;
  3. using System.Linq;
  4. using System.Reflection;
  5. namespace Combot.Modules.ModuleClasses
  6. {
  7. public class Owner : Module
  8. {
  9. public override void Initialize()
  10. {
  11. Bot.CommandReceivedEvent += HandleCommandEvent;
  12. }
  13. public override void ParseCommand(CommandMessage command)
  14. {
  15. Command foundCommand = Commands.Find(c => c.Triggers.Contains(command.Command));
  16. switch (foundCommand.Name)
  17. {
  18. case "Change Nick":
  19. Bot.IRC.SendNick(command.Arguments["Nickname"]);
  20. break;
  21. case "Identify":
  22. Bot.IRC.SendPrivateMessage("NickServ", string.Format("Identify {0}", Bot.ServerConfig.Password));
  23. break;
  24. case "Join Channel":
  25. if (!Bot.IRC.Channels.Exists(chan => chan.Name == command.Arguments["Channel"]))
  26. {
  27. Bot.IRC.SendJoin(command.Arguments["Channel"]);
  28. }
  29. else
  30. {
  31. string message = string.Format("I am already in \u0002{0}\u000F.", command.Arguments["Channel"]);
  32. switch (command.MessageType)
  33. {
  34. case MessageType.Channel:
  35. Bot.IRC.SendPrivateMessage(command.Location, message);
  36. break;
  37. case MessageType.Query:
  38. Bot.IRC.SendPrivateMessage(command.Nick.Nickname, message);
  39. break;
  40. case MessageType.Notice:
  41. Bot.IRC.SendNotice(command.Nick.Nickname, message);
  42. break;
  43. }
  44. }
  45. break;
  46. case "Part Channel":
  47. string channel = command.Arguments.ContainsKey("Channel") ? command.Arguments["Channel"] : command.Location;
  48. if (Bot.IRC.Channels.Exists(chan => chan.Name == channel))
  49. {
  50. Bot.IRC.SendPart(channel);
  51. }
  52. else
  53. {
  54. string message = string.Format("I am not in \u0002{0}\u000F.", channel);
  55. switch (command.MessageType)
  56. {
  57. case MessageType.Channel:
  58. Bot.IRC.SendPrivateMessage(command.Location, message);
  59. break;
  60. case MessageType.Query:
  61. Bot.IRC.SendPrivateMessage(command.Nick.Nickname, message);
  62. break;
  63. case MessageType.Notice:
  64. Bot.IRC.SendNotice(command.Nick.Nickname, message);
  65. break;
  66. }
  67. }
  68. break;
  69. case "Speak":
  70. string location = command.Arguments.ContainsKey("Target") ? command.Arguments["Target"] : command.Location;
  71. Bot.IRC.SendPrivateMessage(location, command.Arguments["Message"]);
  72. break;
  73. case "Action":
  74. string actionLocation = command.Arguments.ContainsKey("Channel") ? command.Arguments["Channel"] : command.Location;
  75. Bot.IRC.SendCTCPMessage(actionLocation, "ACTION", command.Arguments["Message"]);
  76. break;
  77. case "Quit":
  78. string quitType = command.Arguments["Type"].ToString();
  79. switch (quitType.ToLower())
  80. {
  81. case "server":
  82. Bot.Disconnect();
  83. break;
  84. case "client":
  85. Environment.Exit(0);
  86. break;
  87. }
  88. break;
  89. case "Cycle":
  90. string cycleType = command.Arguments["Type"].ToString();
  91. switch (cycleType.ToLower())
  92. {
  93. case "channel":
  94. string cycleChannel = command.Arguments.ContainsKey("Channel") ? command.Arguments["Channel"] : command.Location;
  95. if (Bot.IRC.Channels.Exists(chan => chan.Name == cycleChannel))
  96. {
  97. Bot.IRC.SendPart(cycleChannel);
  98. Bot.IRC.SendJoin(cycleChannel);
  99. }
  100. else
  101. {
  102. string message = string.Format("I am not in \u0002{0}\u000F.", cycleChannel);
  103. switch (command.MessageType)
  104. {
  105. case MessageType.Channel:
  106. Bot.IRC.SendPrivateMessage(command.Location, message);
  107. break;
  108. case MessageType.Query:
  109. Bot.IRC.SendPrivateMessage(command.Nick.Nickname, message);
  110. break;
  111. case MessageType.Notice:
  112. Bot.IRC.SendNotice(command.Nick.Nickname, message);
  113. break;
  114. }
  115. }
  116. break;
  117. case "server":
  118. Bot.Disconnect();
  119. Bot.Connect();
  120. break;
  121. case "client":
  122. Process.Start(Assembly.GetEntryAssembly().Location); // to start new instance of application
  123. Environment.Exit(0);
  124. break;
  125. }
  126. break;
  127. case "List":
  128. string listType = command.Arguments["Type"].ToString();
  129. string listLocation = command.Arguments.ContainsKey("Channel") ? command.Arguments["Channel"] : command.Location;
  130. switch (listType.ToLower())
  131. {
  132. case "nicks":
  133. if (Bot.IRC.Channels.Exists(chan => chan.Name == listLocation))
  134. {
  135. string nickList = string.Join(", ", Bot.IRC.Channels.Find(chan => chan.Name == listLocation).Nicks.Select(nick => nick.Nickname));
  136. string nickMessage = string.Format("Nicknames in \u0002{0}\u000F: {1}", listLocation, nickList);
  137. switch (command.MessageType)
  138. {
  139. case MessageType.Channel:
  140. Bot.IRC.SendPrivateMessage(command.Location, nickMessage);
  141. break;
  142. case MessageType.Query:
  143. Bot.IRC.SendPrivateMessage(command.Nick.Nickname, nickMessage);
  144. break;
  145. case MessageType.Notice:
  146. Bot.IRC.SendNotice(command.Nick.Nickname, nickMessage);
  147. break;
  148. }
  149. }
  150. else
  151. {
  152. string message = string.Format("I do not have nickname information for \u0002{0}\u000F.", listLocation);
  153. switch (command.MessageType)
  154. {
  155. case MessageType.Channel:
  156. Bot.IRC.SendPrivateMessage(command.Location, message);
  157. break;
  158. case MessageType.Query:
  159. Bot.IRC.SendPrivateMessage(command.Nick.Nickname, message);
  160. break;
  161. case MessageType.Notice:
  162. Bot.IRC.SendNotice(command.Nick.Nickname, message);
  163. break;
  164. }
  165. }
  166. break;
  167. case "channels":
  168. string channelList = string.Join(", ", Bot.IRC.Channels.Select(chan => chan.Name));
  169. string channelMessage = string.Format("I am in the following channels: \u0002{0}\u000F", channelList);
  170. switch (command.MessageType)
  171. {
  172. case MessageType.Channel:
  173. Bot.IRC.SendPrivateMessage(command.Location, channelMessage);
  174. break;
  175. case MessageType.Query:
  176. Bot.IRC.SendPrivateMessage(command.Nick.Nickname, channelMessage);
  177. break;
  178. case MessageType.Notice:
  179. Bot.IRC.SendNotice(command.Nick.Nickname, channelMessage);
  180. break;
  181. }
  182. break;
  183. case "servers":
  184. // TODO Add server list
  185. break;
  186. case "modules":
  187. string moduleList = string.Join(", ", Bot.Modules.Select(module => module.Name));
  188. string moduleMessage = string.Format("I have the following modules loaded: \u0002{0}\u000F", moduleList);
  189. switch (command.MessageType)
  190. {
  191. case MessageType.Channel:
  192. Bot.IRC.SendPrivateMessage(command.Location, moduleMessage);
  193. break;
  194. case MessageType.Query:
  195. Bot.IRC.SendPrivateMessage(command.Nick.Nickname, moduleMessage);
  196. break;
  197. case MessageType.Notice:
  198. Bot.IRC.SendNotice(command.Nick.Nickname, moduleMessage);
  199. break;
  200. }
  201. break;
  202. }
  203. break;
  204. }
  205. }
  206. }
  207. }