Bot.java 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244
  1. package main;
  2. import java.io.IOException;
  3. import java.net.UnknownHostException;
  4. import java.text.SimpleDateFormat;
  5. import java.util.Date;
  6. import java.util.List;
  7. import java.util.Locale;
  8. import org.jibble.pircbot.IrcException;
  9. import org.jibble.pircbot.NickAlreadyInUseException;
  10. import org.jibble.pircbot.PircBot;
  11. import actions.Action;
  12. import comportement.Comportement;
  13. public class Bot extends PircBot {
  14. private volatile static long TIME_BETWEEN_MESSAGES = 200;
  15. private List<Action> actions = Action.getAllActions(this);
  16. private List<Comportement> comportements = Comportement.getAllComportements(this);
  17. private String[] admins;
  18. private boolean responseOnPrivateChannel = true;
  19. private boolean responseOnPrivateMessages = true;
  20. private volatile static long WAIT_BEFORE_RECONNECT = 60;
  21. public Bot() {
  22. this.setAutoNickChange(true);
  23. this.setName("UneFede");
  24. this.setVersion("Gentille Droide de la fédération, <3 Marmat");
  25. this.setMessageDelay(TIME_BETWEEN_MESSAGES);
  26. if(Main.isDebug()) {
  27. this.setVerbose(true);
  28. }else {
  29. this.setVerbose(false);
  30. }
  31. }
  32. public void onPrivateMessage(String sender, String login, String hostname, String message) {
  33. if(responseOnPrivateMessages) {
  34. onMessage(sender, sender, login, hostname, message);
  35. }else {
  36. sendMessage(sender,"Eh non, Je suis configurée pour ne pas répondre aux MP. Désolé!");
  37. }
  38. }
  39. public void onDisconnect() {
  40. Date d = new Date();
  41. System.err.println("Je viens d'être déconnectée!");
  42. this.sendMessageToAdmins("Je viens d'être déconnectée!");
  43. while(!this.isConnected()) {
  44. try {
  45. Thread.sleep(WAIT_BEFORE_RECONNECT*1000);
  46. } catch (InterruptedException e) {
  47. e.printStackTrace();
  48. }
  49. try {
  50. this.reconnect();
  51. }catch (UnknownHostException e) {
  52. } catch (NickAlreadyInUseException e) {
  53. this.sendMessageToAdmins("Je viens d'être déconnectée et en tentant de me reconnecter mon nom était déjà utilisé!");
  54. e.printStackTrace();
  55. } catch (IOException e) {
  56. this.sendMessageToAdmins("Je viens d'être déconnectée et en tentant de me reconnecter, j'ai eu une IOException: "+e.toString());
  57. e.printStackTrace();
  58. } catch (IrcException e) {
  59. this.sendMessageToAdmins("Je viens d'être déconnectée et en tentant de me reconnecter, j'ai eu une IrcException: "+e.toString());
  60. e.printStackTrace();
  61. }
  62. }
  63. SimpleDateFormat sdf = new SimpleDateFormat("EEE, d MMM yyyy HH:mm:ss", Locale.FRENCH);
  64. this.sendMessageToAdmins("Je viens de me reconnecter, j'était abscente depuis le "+sdf.format(d));
  65. }
  66. public final void joinChannels() {
  67. String[] channels = Main.getCHANNELS();
  68. for(int i = 0; i< channels.length; i++) {
  69. joinChannel(channels[i]);
  70. }
  71. }
  72. public void onMessage(String channel, String sender,
  73. String login, String hostname, String message) {
  74. for(Action a:actions){
  75. if(a.hasToReact(message)) {
  76. a.react(channel, sender, login, hostname, message);
  77. }
  78. }
  79. //easter Eggs
  80. String ea="Ehlo "+this.getNick();
  81. if (message.toLowerCase().contains(ea.toLowerCase())) {
  82. sendMessage(channel, "Ehlo "+sender+"!!");
  83. }
  84. if(message.toLowerCase().contains("mousse au chocolat")) {
  85. sendMessage(channel, "J'adore la mousse au chocolat de Benjamin B.");
  86. }
  87. System.out.println("cprt");
  88. for(Comportement c : comportements) {
  89. System.out.println("Comportements");
  90. if(c.hastoreact(message)) {
  91. c.react(channel, sender, login, hostname, message);
  92. System.out.println("a reagi");
  93. }else {
  94. System.out.println("ne reagit pas");
  95. }
  96. }
  97. }
  98. public void onMode(String channel,
  99. String sourceNick,
  100. String sourceLogin,
  101. String sourceHostname,
  102. String mode) {
  103. mode = mode.toLowerCase();
  104. if(mode.contains("pircbot") && mode.substring(0, 2).equals("+b") && sourceLogin.toLowerCase().contains("abitbolg")) {
  105. sendMessageToAdmins("Help, il semblerai que je me soit fait ban sur "+channel+" Tu peux vérifier?");
  106. }
  107. }
  108. /**
  109. * Envoie les messages les uns à la suite de l'autre dans l'ordre de la liste.
  110. * @param channel Channel IRC dans lequel envoyer les messages
  111. * @param lines liste de chaaines de caractères à envoyer.
  112. */
  113. private void sendMessage(String channel, List<String> lines) {
  114. for(String s : lines) {
  115. sendMessage(channel,s);
  116. }
  117. }
  118. /**
  119. *
  120. */
  121. @Override
  122. public void onKick (String channel, String kickerNick, String login, String hostname, String recipientNick, String reason) {
  123. if(recipientNick.equalsIgnoreCase(this.getNick())){
  124. RejoinThread rj = new RejoinThread(this,channel);
  125. rj.start();
  126. }
  127. }
  128. public void sendMessageToAdmins(String message) {
  129. for(int i=0;i<admins.length;i++) {
  130. sendMessage(admins[i], message);
  131. }
  132. }
  133. public void sendMessageToAdmins(List<String> messages) {
  134. for(int i=0;i<admins.length;i++) {
  135. sendMessage(admins[i], messages);
  136. }
  137. }
  138. /**
  139. * @return the tIME_BETWEEN_MESSAGES
  140. */
  141. public static long getTIME_BETWEEN_MESSAGES() {
  142. return TIME_BETWEEN_MESSAGES;
  143. }
  144. /**
  145. * @param tIME_BETWEEN_MESSAGES the tIME_BETWEEN_MESSAGES to set
  146. */
  147. public static void setTIME_BETWEEN_MESSAGES(long tIME_BETWEEN_MESSAGES) {
  148. TIME_BETWEEN_MESSAGES = tIME_BETWEEN_MESSAGES;
  149. }
  150. /**
  151. * @return the admins
  152. */
  153. public String[] getAdmins() {
  154. return admins;
  155. }
  156. /**
  157. * @param admins the admins to set
  158. */
  159. public void setAdmins(String[] admins) {
  160. this.admins = admins;
  161. }
  162. /**
  163. * @return the responseOnPrivateChannel
  164. */
  165. public boolean isResponseOnPrivateChannel() {
  166. return responseOnPrivateChannel;
  167. }
  168. /**
  169. * @param responseOnPrivateChannel the responseOnPrivateChannel to set
  170. */
  171. public void setResponseOnPrivateChannel(boolean responseOnPrivateChannel) {
  172. this.responseOnPrivateChannel = responseOnPrivateChannel;
  173. }
  174. /**
  175. * @return the responseOnPrivateMessages
  176. */
  177. public boolean isResponseOnPrivateMessages() {
  178. return responseOnPrivateMessages;
  179. }
  180. /**
  181. * @param responseOnPrivateMessages the responseOnPrivateMessages to set
  182. */
  183. public void setResponseOnPrivateMessages(boolean responseOnPrivateMessages) {
  184. this.responseOnPrivateMessages = responseOnPrivateMessages;
  185. }
  186. public void sendMessage(String sender,String channel,String message) {
  187. if(this.responseOnPrivateChannel) {
  188. this.sendMessage(sender, message);
  189. }else {
  190. this.sendMessage(channel, message);
  191. }
  192. }
  193. public void sendMessages(String sender, String channel,List<String> messages) {
  194. if(this.responseOnPrivateChannel) {
  195. this.sendMessage(sender, messages);
  196. }else {
  197. this.sendMessage(channel, messages);
  198. }
  199. }
  200. }