Bot.java 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. package main;
  2. import java.util.Date;
  3. import java.util.LinkedList;
  4. import java.util.List;
  5. import org.jibble.pircbot.PircBot;
  6. import data.CoveredAreas;
  7. import data.ISP;
  8. import data.ISPDAO;
  9. import verif_saisie.EntierPositifNonVide;
  10. public class Bot extends PircBot {
  11. public static final long TIME_BETWEEN_RELOADS = 360000;
  12. public static final long TIME_BETWEEN_MESSAGES = 200;
  13. private ISPDAO idao;
  14. public Bot() {
  15. this.setName("UneFede2");
  16. this.setMessageDelay(TIME_BETWEEN_MESSAGES);
  17. if(Main.isDebug()) {
  18. this.setVerbose(true);
  19. }else {
  20. this.setVerbose(false);
  21. }
  22. idao = ISPDAO.getInstance();
  23. }
  24. public void onMessage(String channel, String sender,
  25. String login, String hostname, String message) {
  26. if (message.equalsIgnoreCase("time?")) {
  27. String time = new java.util.Date().toString();
  28. sendMessage(channel, sender + ": Nous sommes le " + time);
  29. }
  30. if (message.length()>6 && message.substring(0, 5).equalsIgnoreCase("+info")) {
  31. info(channel,sender,login,hostname,message);
  32. }
  33. if (message.length()>9 && message.substring(0, 8).equalsIgnoreCase("+contact")) {
  34. contact(channel,sender,login,hostname,message);
  35. }
  36. if (message.equalsIgnoreCase("+source") || message.equalsIgnoreCase("+code") || message.equalsIgnoreCase("+sources")) {
  37. sendMessage(channel, sender+": mes sources sont disponibles ici: https://code.ffdn.org/marmat8951/bot-irc2");
  38. }
  39. if (message.length()>= 6 && message.substring(0, 6).equals("+liste")) {
  40. list(channel, sender, login, hostname, message);
  41. }
  42. if(message.equals("+reload")) {
  43. Date now = new Date();
  44. Date lastCU = Cache.getInstance().getLastCacheUpdate();
  45. if(lastCU.getTime() < now.getTime()-TIME_BETWEEN_RELOADS ) { // Si la dernière MAJ date de + de 5 minutes
  46. sendMessage(channel, "Je lance le reload!");
  47. if(reload()) {
  48. sendMessage(channel, sender+": Le reload s'est bien passé.");
  49. }else {
  50. sendMessage(channel, sender+": Erreur au moment du reload.");
  51. }
  52. }else {
  53. Date nextAllowed = new Date(lastCU.getTime()+TIME_BETWEEN_RELOADS);
  54. sendMessage(channel, "Trop de reload, attendez un peu. Le dernier à eu lieu le "+lastCU.toString()+" Prochain autorisé le "+nextAllowed);
  55. }
  56. }
  57. //easter Egg
  58. String ea="Ehlo UneFede";
  59. if (message.contains("Ehlo UneFede")) {
  60. sendMessage(channel, "Ehlo "+sender+"!!");
  61. }
  62. }
  63. private boolean reload() {
  64. Cache c = Cache.getInstance();
  65. return c.reload();
  66. }
  67. public void sendMessage(String channel, List<String> lines) {
  68. for(String s : lines) {
  69. sendMessage(channel,s);
  70. }
  71. }
  72. public void list(String channel, String sender, String login, String hostname, String message) {
  73. Cache c = Cache.getInstance();
  74. List<ISP> listeFAI=null;
  75. try {
  76. listeFAI = c.getListe();
  77. }catch (Exception e) {
  78. try {
  79. listeFAI = idao.getISPs();
  80. } catch (Exception e1) {
  81. // TODO Auto-generated catch block
  82. e1.printStackTrace();
  83. }
  84. }
  85. List<String> messages = new LinkedList<>();
  86. messages.add("Les FAI surveillés par mes petits yeux mignons de bot sont:");
  87. String s="";
  88. if(message.indexOf(' ')!=-1 && message.substring(message.indexOf(" ")).contains("all")) {
  89. messages.add("=== Hors fédé: ===");
  90. for(ISP isp: listeFAI) {
  91. if(!isp.isFFDNMember()) {
  92. s+= isp.getBetterName()+", ";
  93. }
  94. if(s.length()>=AffichableSurIRC.MAX_CHARACTERS) {
  95. messages.add(s);
  96. s="";
  97. }
  98. }
  99. messages.add(s);
  100. s="";
  101. }
  102. messages.add("=== Dans la fédé: ===");
  103. for(ISP isp: listeFAI ) {
  104. if(isp.isFFDNMember()) {
  105. s+= isp.getBetterName();
  106. if(s.length()>=AffichableSurIRC.MAX_CHARACTERS) {
  107. messages.add(s);
  108. s="";
  109. }else {
  110. s+=", ";
  111. }
  112. }
  113. }
  114. messages.add(s);
  115. sendMessage(channel, messages);
  116. }
  117. public void contact(String channel, String sender,
  118. String login, String hostname, String message) {
  119. String s = message.substring(message.indexOf(' ')+1);
  120. if(!EntierPositifNonVide.verifie(s)) { // +contact suivi d'un mot
  121. Cache c = Cache.getInstance();
  122. ISP fai = c.getISPWithName(s);
  123. if(fai == null) {
  124. sendMessage(channel, "Aucun FAI "+s);
  125. }else {
  126. sendMessage(channel, fai.contact());
  127. }
  128. }
  129. }
  130. public void info(String channel, String sender,
  131. String login, String hostname, String message) {
  132. String s = message.substring(message.indexOf(' ')+1);
  133. if(!EntierPositifNonVide.verifie(s)) { // Un mot après +info
  134. if(s.equalsIgnoreCase("all")) { // +info all
  135. Cache c = Cache.getInstance();
  136. sendMessage(channel, c.toStringIRC());
  137. List<ISP> listeFAI;
  138. try {
  139. listeFAI = c.getListe();
  140. }catch (Exception e) {
  141. try {
  142. listeFAI = idao.getISPs();
  143. } catch (Exception e1) {
  144. // TODO Auto-generated catch block
  145. e1.printStackTrace();
  146. }
  147. }
  148. for(ISP i : c.getListe()) {
  149. if(i.isFFDNMember()) {
  150. sendMessage(channel, i.toStringIRC());
  151. }
  152. }
  153. }else if(s.equalsIgnoreCase("ffdn")) { //+info ffdn
  154. Cache c = Cache.getInstance();
  155. sendMessage(channel, c.toStringIRC());
  156. }else {
  157. Cache c = Cache.getInstance();
  158. ISP i = c.getISPWithName(s);
  159. if(i == null) {
  160. sendMessage(channel, "Recherche d'une zone "+s);
  161. ISP j = c.getISPWithGeoZone(s);
  162. if(j == null)
  163. sendMessage(channel, "Le FAI "+s+" est Inconnu, désolé. Et aucun FAI n'opère sur une sone dénomée "+s+" ...");
  164. else {
  165. sendMessage(channel, "Un FAI opère sur la zone "+s+" : ");
  166. sendMessage(channel, j.toStringIRC());
  167. List<CoveredAreas> cas = j.getCoveredAreas(s);
  168. String technos = "";
  169. for(CoveredAreas ca: cas) {
  170. technos+=ca.getTechnos()+" ";
  171. }
  172. sendMessage(channel, "Avec pour techno "+technos);
  173. }
  174. }else {
  175. sendMessage(channel, i.toStringIRC());
  176. }
  177. }
  178. }else { // Un nombre après +info
  179. int id = Integer.parseInt(message.substring(message.indexOf(' ')+1));
  180. List<String> strings = idao.getISP(id).toStringIRC();
  181. for(String response : strings) {
  182. sendMessage(channel,response);
  183. }
  184. }
  185. }
  186. }