The easy to use and full featured Irc Bot everyone is talking about!
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

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. }