/modules/owner.py

https://github.com/Beefywhale/WeenieBot · Python · 181 lines · 147 code · 23 blank · 11 comment · 59 complexity · cec3a6a3d4baab1362b373f88f400054 MD5 · raw file

  1. '''Owner commands'''
  2. import modules.commands as commands
  3. import os
  4. import json
  5. import git
  6. import sys
  7. import discord
  8. import asyncio
  9. with open("database/adminweenie.json","r") as infile:
  10. admin = json.loads(infile.read())
  11. with open("database/storage.json", "r") as infile:
  12. storage = json.loads(infile.read())
  13. with open("database/storage2.json", "r") as infile:
  14. storage2 = json.loads(infile.read())
  15. with open("database/leave_toggle.json","r") as infile:
  16. leavemsg = json.loads(infile.read())
  17. with open("database/log_channel.json","r") as infile:
  18. log_channel = json.loads(infile.read())
  19. '''Restart bot.'''
  20. async def restart_logic(message, client):
  21. if message.author.id == client.bot_info.owner.id:
  22. await client.send_message(message.channel, 'Restarting... Please wait 5-10 seconds before trying to run any commands!')
  23. os.execl(sys.executable, sys.executable, *sys.argv)
  24. else:
  25. await client.send_message(message.channel, 'ERROR you need to be a bot owner!')
  26. commands.add_command(command_name='restart', command_function=restart_logic, alias='reset, reload')
  27. '''Update bot from github(only works if git cloned! working on a fix).'''
  28. async def update_logic(message, client):
  29. if message.author.id in client.bot_info.owner.id:
  30. await client.send_message(message.channel, 'Updating...')
  31. g = git.cmd.Git()
  32. u = g.pull('-v')
  33. await client.send_message(message.channel, '```' + str(u) + '```')
  34. if str(u) == 'Already up-to-date.':
  35. await client.send_message(message.channel, 'Already Up To Date! Not restarting')
  36. else:
  37. await client.send_message(message.channel, 'Update successful restarting!')
  38. os.execl(sys.executable, sys.executable, *sys.argv)
  39. else:
  40. await client.send_message(message.channel, 'Error Didn\'t update maybe you aren\'t an admin?')
  41. commands.add_command(command_name='update', command_function=update_logic, alias='upgrade ')
  42. '''Broadcast a message to ALL servers the bot is in.'''
  43. async def broadcast_server(message, client):
  44. broadcast_message = message.content.replace(message.content.split()[0] + ' ', '')
  45. for server in list(client.servers)[:]:
  46. try:
  47. if storage[message.server.id] == "broadcast0" and message.author.id == client.bot_info.owner.id:
  48. await client.send_message(server.default_channel, broadcast_message)
  49. except discord.Forbidden:
  50. if storage[message.server.id] == "broadcast0" and message.author.id == client.bot_info.owner.id:
  51. await client.send_message(message.channel, server.name + ' couldn\'t send broadcast!')
  52. commands.add_command(command_name='broadcast', command_function=broadcast_server)
  53. '''Toggle if Broadcast will message current server.'''
  54. async def broadcast_server_toggle(message, client):
  55. if message.content.split(' ')[1] == 'off':
  56. if message.author.id == message.server.owner.id or message.author.id == client.bot_info.owner.id:
  57. storage[message.server.id] = "broadcast1"
  58. await client.send_message(message.channel, "you set broadcasts off!")
  59. if message.content.split(' ')[1] == 'on':
  60. if message.author.id == message.server.owner.id or message.author.id == client.bot_info.owner.id:
  61. storage[message.server.id] = "broadcast0"
  62. await client.send_message(message.channel, "you set broadcasts on!")
  63. with open("database/storage.json", "w+") as outfile:
  64. outfile.write(json.dumps(storage))
  65. commands.add_command(command_name='set_broadcast', command_function=broadcast_server_toggle, alias='setbroadcast, broadcastset, broadcast_set')
  66. async def leave_message_toggle(message, client):
  67. if message.content.split(' ')[1] == 'off':
  68. if message.author.id == message.server.owner.id or message.author.id == client.bot_info.owner.id:
  69. leavemsg[message.server.id] = "0"
  70. await client.send_message(message.channel, "you set leave messages off!")
  71. if message.content.split(' ')[1] == 'on':
  72. if message.author.id == message.server.owner.id or message.author.id == client.bot_info.owner.id:
  73. leavemsg[message.server.id] = "1"
  74. await client.send_message(message.channel, "you set leave messages on!")
  75. with open("database/leave_toggle.json", "w+") as outfile:
  76. outfile.write(json.dumps(leavemsg))
  77. commands.add_command(command_name='set_leave', command_function=leave_message_toggle, alias='setleave, leavemessageset, leave_message_set')
  78. '''Toggle if the bot will welcome new people.'''
  79. async def welcome_msg_toggle(message, client):
  80. if message.content.split(' ')[1] == 'off':
  81. if message.author.id == message.server.owner.id or message.author.id == client.bot_info.owner.id:
  82. storage2[message.server.id] = "message1"
  83. await client.send_message(message.channel, "you set welcome message off!")
  84. if message.content.split(' ')[1] == 'on':
  85. if message.author.id == message.server.owner.id or message.author.id == client.bot_info.owner.id:
  86. storage2[message.server.id] = "message0"
  87. await client.send_message(message.channel, "you set welcome message on!")
  88. with open("database/storage2.json", "w+") as outfile:
  89. outfile.write(json.dumps(storage2))
  90. commands.add_command(command_name='set_welcome_msg', command_function=welcome_msg_toggle, alias='setwelcomemsg, welcomeset')
  91. '''Suspend commands.'''
  92. async def suspend_logic(message, client):
  93. if message.author.id == client.bot_info.owner.id:
  94. client.suspend = True
  95. await client.send_message(message.channel, 'Commands Suspended!')
  96. else:
  97. await client.send_message(message.channel, 'Error couldn\'t suspend , maybe you aren\'t bot owner? ')
  98. commands.add_command(command_name='suspend', command_function=suspend_logic)
  99. '''Resume commands.'''
  100. async def resume_logic(message, client):
  101. if message.author.id == client.bot_info.owner.id:
  102. client.suspend = False
  103. await client.send_message(message.channel, 'Commands Resumed!')
  104. else:
  105. await client.send_message(message.channel, 'Error couldn\'t resume, maybe you aren\'t bot owner?')
  106. commands.add_command(command_name='resume', command_function=resume_logic)
  107. '''runs python code.'''
  108. async def eval_logic(message, client):
  109. if str(message.author.id) in client.bot_info.owner.id:
  110. print(str(message.author) + ': ' + message.content)
  111. try:
  112. evalt = message.content.replace(message.content.split()[0] + ' ', '')
  113. if len(str(eval(evalt))) >= 2000:
  114. await client.send_message(message.channel, '```Python\n' + str(eval(evalt))[:1990] + '```' + '__Truncated!__')
  115. else:
  116. await client.send_message(message.channel, '```Python\n' + str(eval(evalt)) + '```')
  117. except Exception as x:
  118. template = "An exception of type {0} occured. Arguments:\n{1!r}"
  119. messagex = template.format(str(type(x).__name__), str(x))
  120. await client.send_message(message.channel, '''```Python
  121. ''' + messagex + '```')
  122. commands.add_command(command_name='eval', command_function=eval_logic, alias='run, shell')
  123. '''runs python code in a loop.'''
  124. async def repl_logic(message, client):
  125. if str(message.author.id) in client.bot_info.owner.id:
  126. await client.send_message(message.channel, 'Starting REPL session.')
  127. client.repl = True
  128. print(str(message.author) + ': ' + message.content)
  129. while client.repl is True:
  130. try:
  131. evalt = await client.wait_for_message(author=message.author)
  132. if evalt.content == '|rexit':
  133. client.repl = False
  134. await client.send_message(message.channel, 'Ending REPL session.')
  135. elif evalt.content.startswith('|'):
  136. if len(str(eval(evalt.content[1:]))) >= 1990:
  137. await client.send_message(message.channel, '```Python\n' + str(eval(evalt.content[1:]))[:1950] + '```' + '__Truncated!__')
  138. else:
  139. await client.send_message(message.channel, '```Python\n' + str(eval(evalt.content[1:])) + '```')
  140. except Exception as x:
  141. template = "An exception of type {0} occured. Arguments:\n{1!r}"
  142. messagex = template.format(str(type(x).__name__), str(x))
  143. await client.send_message(message.channel, '''```Python
  144. ''' + messagex + '```')
  145. commands.add_command(command_name='repl', command_function=repl_logic)
  146. '''run python code, not in a code block.'''
  147. async def eval_clean_logic(message, client):
  148. if str(message.author.id) in client.bot_info.owner.id:
  149. try:
  150. evalt = message.content.replace(message.content.split()[0] + ' ', '')
  151. await client.send_message(message.channel, str(eval(evalt)))
  152. print(str(message.author.id) + ': ' + message.content)
  153. except Exception as x:
  154. template = "An exception of type {0} occured. Arguments:\n{1!r}"
  155. messagex = template.format(str(type(x).__name__), str(x))
  156. await client.send_message(message.channel, '''```Python
  157. ''' + messagex + '```')
  158. commands.add_command(command_name='eval_clean', command_function=eval_clean_logic, alias='run_clean, shell_clean')