Advertisement
Guest User

Untitled

a guest
Aug 21st, 2017
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.20 KB | None | 0 0
  1. #TODO COMMENT THIS SHIT
  2. #TODO fnmatch (e.g. 'wed' matches 'wednesday')
  3. import discord
  4. import asyncio
  5. import json
  6.  
  7. ADMIN = ["49627337024606208", #olivia
  8. ]
  9. READY = 2
  10. NOTREADY = 1
  11. NOTSURE = 0
  12.  
  13. def makeday():
  14. with open('members', 'r') as f:
  15. members = json.loads(f.read())
  16. day = {}
  17. day['members'] = {}
  18. day['desc'] = ''
  19. for member in members:
  20. day['members'][member] = {'status' : NOTSURE, 'reason' : None}
  21. return day
  22.  
  23. def buildmessage(client, message, schedule):
  24. msg = ""
  25. try:
  26. for day in list(schedule.keys()):
  27. if (schedule[day]['description'] == ''):
  28. msg += ('\n**' + day + '**\n')
  29. else:
  30. msg += ('\n**' + day + '** *' +
  31. schedule[day]['description'] + '* \n')
  32. for user in list(schedule[day]['members'].keys()):
  33. if (schedule[day]['members'][user]['status'] == NOTREADY):
  34. msg += '<:negativebox:340066825922674688> '
  35. elif (schedule[day]['members'][user]['status'] == READY):
  36. msg += ':white_check_mark: '
  37. else:
  38. msg += '<:questionbox:340066786370256898> '
  39. name = ''
  40. for member in message.server.members:
  41. if (member.id == user):
  42. name = member.nick
  43. if (name == None):
  44. name = member.name
  45. reason = schedule[day]['members'][member.id]['reason']
  46. if not (reason == None or reason == ''):
  47. name += ' *(%s)*' % (reason)
  48. msg += name + '\n'
  49. except:
  50. msg = 'No raid days. Schedule some!'
  51. raise
  52. if (msg == ""):
  53. msg = 'Something happened.'
  54. return msg
  55.  
  56. @asyncio.coroutine
  57. def updateMessage(client, message, schedule):
  58. msg = yield from client.get_message(message.channel,
  59. '343182358247243777')
  60. yield from client.edit_message(msg, buildmessage(client,
  61. message,
  62. schedule))
  63. return
  64.  
  65. @asyncio.coroutine
  66. def raid(client, message):
  67. with open('raids', 'r') as f:
  68. query = " ".join(message.content.split()[1:]).lower()
  69. command = query.split()[0]
  70. day = query.split()[1]
  71. try:
  72. desc = " ".join(query.split()[2:])
  73. except IndexError:
  74. desc = ''
  75. schedule = json.loads(f.read())
  76. if (command.startswith('add') or command.startswith('clear')):
  77. schedule[day] = makeday()
  78. schedule[day]['description'] = desc
  79. if (command.startswith('remove')):
  80. del schedule[day]
  81. with open('raids', 'w') as f:
  82. f.write(json.dumps(schedule))
  83. yield from updateMessage(client, message, schedule)
  84.  
  85. @asyncio.coroutine
  86. def setup(client, message):
  87. try:
  88. if (message.author.id in ADMIN):
  89. users = message.mentions
  90. members = []
  91. for user in users:
  92. members.append(user.id)
  93. with open('members', 'w') as f:
  94. f.write(json.dumps(members))
  95. yield from client.send_message(message.channel,
  96. buildmessage(client, message, {}))
  97. except:
  98. pass
  99.  
  100. @asyncio.coroutine
  101. def lookup(client, message, fname):
  102. yield from client.send_message(message.channel, msg)
  103.  
  104. @asyncio.coroutine
  105. def dryrun(client, message):
  106. with open('raids', 'r') as f:
  107. schedule = json.loads(f.read())
  108. yield from client.send_message(message.channel,
  109. buildmessage(schedule))
  110. @asyncio.coroutine
  111. def digest(client, message):
  112. author = message.author.id
  113. operator = message.content[0]
  114. day = message.content.split()[0][1:]
  115. reason = " ".join(message.content.split()[1:])
  116. schedule = {}
  117. with open('raids', 'r') as f:
  118. schedule = json.loads(f.read())
  119. if (operator == '+'):
  120. schedule[day]['members'][author]['status'] = READY
  121. schedule[day]['members'][author]['reason'] = reason
  122. elif (operator == '-'):
  123. schedule[day]['members'][author]['status'] = NOTREADY
  124. schedule[day]['members'][author]['reason'] = reason
  125. elif (operator == '?'):
  126. schedule[day]['members'][author]['status'] = NOTSURE
  127. schedule[day]['members'][author]['reason'] = reason
  128. else:
  129. return
  130. with open('raids', 'w') as f:
  131. f.write(json.dumps(schedule))
  132. yield from updateMessage(client, message, schedule)
  133.  
  134. def parse(client, message):
  135. if (message.channel.name == 'raid-calendar'):
  136. if (message.content.lower().startswith('!raid')):
  137. yield from raid(client, message)
  138. elif (message.content.lower().startswith('!setup')):
  139. yield from setup(client, message)
  140. elif (message.content.lower().startswith('!dry-run')):
  141. yield from dryrun(client, message)
  142. else:
  143. yield from digest(client, message)
  144. yield from client.delete_message(message)
  145.  
  146. if __name__ == "__main__":
  147. print("This is a modular bot file. Please invoke it from a base bot.")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement