Justabot est un Bot écrit en python, il permet une présence sur les salons Jabber. https://www.devosi.org
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

193 lines
6.0KB

  1. # -*- coding: utf-8 -*-
  2. # Copyright Crestetto Kévin, (Mai 2012)
  3. # checkpoint [at] singularity (dot) fr
  4. # Ce logiciel est un programme informatique
  5. # servant à discuter et executer des commandes sur un salon jabber/XMPP.
  6. # Ce logiciel est régi par la licence CeCILL soumise au droit français et
  7. # respectant les principes de diffusion des logiciels libres. Vous pouvez
  8. # utiliser, modifier et/ou redistribuer ce programme sous les conditions
  9. # de la licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA
  10. # sur le site "http://www.cecill.info".
  11. # En contrepartie de l'accessibilité au code source et des droits de copie,
  12. # de modification et de redistribution accordés par cette licence, il n'est
  13. # offert aux utilisateurs qu'une garantie limitée. Pour les mêmes raisons,
  14. # seule une responsabilité restreinte pèse sur l'auteur du programme, le
  15. # titulaire des droits patrimoniaux et les concédants successifs.
  16. # A cet égard l'attention de l'utilisateur est attirée sur les risques
  17. # associés au chargement, à l'utilisation, à la modification et/ou au
  18. # développement et à la reproduction du logiciel par l'utilisateur étant
  19. # donné sa spécificité de logiciel libre, qui peut le rendre complexe à
  20. # manipuler et qui le réserve donc à des développeurs et des professionnels
  21. # avertis possédant des connaissances informatiques approfondies. Les
  22. # utilisateurs sont donc invités à charger et tester l'adéquation du
  23. # logiciel à leurs besoins dans des conditions permettant d'assurer la
  24. # sécurité de leurs systèmes et ou de leurs données et, plus généralement,
  25. # à l'utiliser et l'exploiter dans les mêmes conditions de sécurité.
  26. # Le fait que vous puissiez accéder à cet en-tête signifie que vous avez
  27. # pris connaissance de la licence CeCILL, et que vous en avez accepté les
  28. # termes.
  29. import sys
  30. import commands
  31. import os
  32. import pickle
  33. import tools
  34. from config.config import CHANNELS
  35. class CMDadmin:
  36. """this is the admin's commands part
  37. """
  38. def admin(self, mess, nick=''):
  39. """I'm call when a admin speak to me
  40. execute the command and return string "ret" if "ret" is not empty
  41. """
  42. body = mess['body']
  43. if body.startswith('#'):
  44. body = mess['body'][1:]
  45. elif body != 'help':
  46. return False
  47. ret = ''
  48. if body == 'help' or body == '!help':
  49. n = "\n"
  50. ret += '#stop' + n
  51. ret += '#restart' + n
  52. ret += '#join chan' + n
  53. ret += '#leave chan' + n
  54. ret += '#alljoin' + n
  55. ret += '#allleave' + n
  56. ret += '#set' + n
  57. ret += '#info' + n
  58. ret += '#statsfilenames' + n
  59. ret += '#chavatar' + n
  60. ret += '#write chan text' + n
  61. elif body == 'stop':
  62. self.online = 'stop'
  63. self.disco()
  64. elif body == 'restart':
  65. self.online = 'restart'
  66. self.disco()
  67. ret += 'ok'
  68. elif body == 'set':
  69. for a in list(commands.PLUGINS.available_plugs.keys()):
  70. ret += '#set ' + a + ' on/off' + "\n"
  71. elif body == 'info':
  72. for chan in self.chan:
  73. ret += chan.name + ' '
  74. ret += "\n"
  75. for a in list(commands.PLUGINS.available_plugs.keys()):
  76. ison = 'NONE'
  77. if commands.PLUGINS.available_plugs[a]['Obj'] == False:
  78. ison = ' off'
  79. else:
  80. ison = ' on'
  81. ret += a + ison + "\n"
  82. ret += "\n"
  83. elif body == 'statsfilenames':
  84. for chan in self.chan:
  85. b = chan.name
  86. a = chan.hash
  87. ret += b + ' =>' + a + "\n"
  88. elif body == 'chavatar':
  89. tools.Avatar().sendimg(self)
  90. ret = 'ok'
  91. elif body == 'allleave':
  92. for chan in self.chan:
  93. print('leave', chan.name)
  94. try:
  95. self.unjoin(chan.name)
  96. ret += 'ok'
  97. except:
  98. pass
  99. elif body == 'alljoin':
  100. for chan in CHANNELS:
  101. print('join', chan)
  102. try:
  103. self.passmuc(chan)
  104. ret += 'ok'
  105. except:
  106. try:
  107. self.unjoin(chan)
  108. except:
  109. pass
  110. elif body != None:
  111. spliting = body.split(' ')
  112. if len(spliting) < 2:
  113. return
  114. if spliting[0] == 'join':
  115. print('join', spliting[1])
  116. try:
  117. self.passmuc(spliting[1])
  118. ret += 'ok'
  119. except:
  120. try:
  121. self.unjoin(spliting[1])
  122. except:
  123. pass
  124. elif spliting[0] == 'leave':
  125. print('leave', spliting[1])
  126. try:
  127. self.unjoin(spliting[1])
  128. ret += 'ok'
  129. except:
  130. pass
  131. elif spliting[0] == 'set':
  132. if len(spliting) < 3:
  133. return
  134. if spliting[1] in commands.PLUGINS.available_plugs:
  135. if spliting[2] == 'on':
  136. commands.PLUGINS.plugload(spliting[1])
  137. elif spliting[2] == 'off':
  138. commands.PLUGINS.plugunload(spliting[1])
  139. else:
  140. return
  141. else:
  142. return
  143. ret += 'ok'
  144. elif spliting[0] == 'write' and len(spliting) > 1:
  145. for chan in self.chan:
  146. if spliting[1] == chan.name:
  147. self.securesend(
  148. ' '.join(spliting[2:]), spliting[1], 'groupchat')
  149. break
  150. if ret and ret != '':
  151. self.sending(ret, mess.get_from(), 'chat')
  152. return True
  153. return False