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.

94 lines
3.5KB

  1. import discord
  2. from discord.ext.commands import group
  3. import checks
  4. from config.server_config import ServerConfig
  5. def blacklisted(user):
  6. with open("config/blacklist.txt", "r") as fp:
  7. for line in fp.readlines():
  8. if user.id+"\n" == line:
  9. return True
  10. return False
  11. class Twitch():
  12. """
  13. A cog that handles posting when users go live on Twitch
  14. """
  15. def __init__(self, Bot):
  16. self.bot = Bot
  17. self.con = ServerConfig()
  18. self.servers = self.con.servers
  19. async def on_member_update(self, member_b, member_a):
  20. # Twitch Shilling Part
  21. if blacklisted(member_b):
  22. return
  23. # Check to see if member_before game exists. Avoids crashes at line 24
  24. if member_b.game:
  25. typeb = member_b.game.type
  26. else:
  27. typeb = False
  28. if member_a.game:
  29. if member_a.game.type and not typeb: # Hopefully this fucking fixes it
  30. ts_enabled = self.servers[member_a.server.id]["twitch"]["enabled"]
  31. ts_whitelist = self.servers[member_a.server.id]["twitch"]["whitelist"]["enabled"]
  32. if ts_enabled:
  33. if not ts_whitelist or member_a.id in \
  34. self.servers[member_a.server.id]["twitch"]["whitelist"]["list"]:
  35. channel = discord.Object(self.servers[member_a.server.id]["twitch"]["twitch-channel"])
  36. return await self.bot.send_message(channel,
  37. content=":video_game:** {} is live!** :video_game:\n{}\n{}".format(
  38. member_a.name, member_a.game.name, member_a.game.url))
  39. @group(pass_context=True, hidden=True)
  40. @checks.is_bot_owner()
  41. async def twitch(self, ctx):
  42. if ctx.invoked_subcommand is None:
  43. return await self.bot.say('Missing Argument')
  44. @twitch.command(pass_context=True, hidden=True)
  45. async def enablewhitelist(self, ctx):
  46. self.servers = self.con.load_config()
  47. if not self.servers[ctx.server.id]["twitch"]["whitelist"]["enabled"]:
  48. self.servers[ctx.server.id]["twitch"]["whitelist"]["enabled"] = 1
  49. self.con.update_config(self.servers)
  50. return await self.bot.reply("Whitelist for Twitch shilling has been enabled.")
  51. else:
  52. self.servers[ctx.server.id]["twitch"]["whitelist"]["enabled"] = 0
  53. self.con.update_config(self.servers)
  54. return await self.bot.reply("Whitelist for Twitch shilling has been disabled.")
  55. @twitch.command(pass_context=True, hidden=True)
  56. async def whitelistadd(self, ctx, option, *mentions):
  57. whitelist_count = 0
  58. if not ctx.message.mentions and option != 'list':
  59. return await self.bot.reply("You haven't mentioned anyone to whitelist.")
  60. if option not in ['+', '-', 'add', 'remove', 'list']:
  61. return await self.bot.say('Invalid option "%s" specified, use +, -, add, or remove' % option, expire_in=20)
  62. if option in ['+', 'add']:
  63. self.servers = self.con.load_config()
  64. for user in ctx.message.mentions:
  65. self.servers[ctx.message.server.id]["twitch"]["whitelist"]["list"].append(user.id)
  66. self.con.update_config(self.servers)
  67. whitelist_count += 1
  68. return await self.bot.say('{} user(s) have been added to the whitelist'.format(whitelist_count))
  69. elif option in ['-', 'remove']:
  70. self.servers = self.con.load_config()
  71. for user in ctx.message.mentions:
  72. if user.id in self.servers[ctx.message.server.id]["twitch"]["whitelist"]["list"]:
  73. self.servers[ctx.message.server.id]["twitch"]["whitelist"]["list"].remove(user.id)
  74. self.con.update_config(self.servers)
  75. whitelist_count += 1
  76. return await self.bot.say('{} user(s) have been removed to the whitelist'.format(whitelist_count))
  77. elif option == 'list':
  78. return await self.bot.say(
  79. self.servers[ctx.message.server.id]["twitch"]["whitelist"]["list"])
  80. def setup(Bot):
  81. Bot.add_cog(Twitch(Bot))