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.

92 lines
3.5KB

  1. import discord
  2. from discord.ext import commands
  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_client):
  16. self.bot = bot_client
  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) or not self.servers[str(member_a.guild.id)]["twitch"]["enabled"]:
  22. return
  23. if member_a.activitiy:
  24. if member_a.activity.type == discord.ActivityType.streaming and member_b.activity.type != discord.ActivityType.streaming:
  25. ts_whitelist = self.servers[str(member_a.guild.id)]["twitch"]["whitelist"]["enabled"]
  26. if not ts_whitelist or member_a.id in self.servers[str(member_a.guild.id)]["twitch"]["whitelist"]["list"]:
  27. channel = self.bot.get_channel(self.servers[str(member_a.guild.id)]["twitch"]["twitch-channel"])
  28. return await channel.send(":video_game:** {} is live!** :video_game:\n{}\n{}".format(
  29. member_a.name, member_a.game.name, member_a.game.url))
  30. @commands.group()
  31. @checks.is_admin_or_mod()
  32. async def whitelist(self, ctx):
  33. """Command group that handles the twitch cog's whitelist."""
  34. if ctx.invoked_subcommand is None:
  35. return await ctx.send('Missing Argument')
  36. @whitelist.command()
  37. async def enable(self, ctx):
  38. """Enables the twitch shilling whitelist. Repeat the command to disable.
  39. Usage:
  40. ;whitelist enable"""
  41. self.servers = self.con.load_config()
  42. if not self.servers[str(ctx.guild.id)]["twitch"]["whitelist"]["enabled"]:
  43. self.servers[str(ctx.guild.id)]["twitch"]["whitelist"]["enabled"] = 1
  44. self.con.update_config(self.servers)
  45. return await ctx.send("Whitelist for Twitch shilling has been enabled.")
  46. else:
  47. self.servers[str(ctx.guild.id)]["twitch"]["whitelist"]["enabled"] = 0
  48. self.con.update_config(self.servers)
  49. return await ctx.send("Whitelist for Twitch shilling has been disabled.")
  50. @whitelist.command()
  51. async def edit(self, ctx, option, mentions = None):
  52. """Adds or removes users to the whitelist. Exactly the same as the blacklist command in usage."""
  53. whitelist_count = 0
  54. if not ctx.message.mentions and option != 'list':
  55. return await ctx.send("You haven't mentioned anyone to whitelist.")
  56. if option not in ['+', '-', 'add', 'remove', 'list']:
  57. return await ctx.send('Invalid option "%s" specified, use +, -, add, or remove' % option, expire_in=20)
  58. if option in ['+', 'add']:
  59. self.servers = self.con.load_config()
  60. for user in ctx.message.mentions:
  61. self.servers[str(ctx.guild.id)]["twitch"]["whitelist"]["list"].append(user.id)
  62. whitelist_count += 1
  63. self.con.update_config(self.servers)
  64. return await ctx.send('{} user(s) have been added to the whitelist'.format(whitelist_count))
  65. elif option in ['-', 'remove']:
  66. self.servers = self.con.load_config()
  67. for user in ctx.message.mentions:
  68. if user.id in self.servers[str(ctx.guild.id)]["twitch"]["whitelist"]["list"]:
  69. self.servers[str(ctx.guild.id)]["twitch"]["whitelist"]["list"].remove(user.id)
  70. whitelist_count += 1
  71. self.con.update_config(self.servers)
  72. return await ctx.send('{} user(s) have been removed to the whitelist'.format(whitelist_count))
  73. elif option == 'list':
  74. return await ctx.send(self.servers[str(ctx.guild.id)]["twitch"]["whitelist"]["list"])
  75. def setup(bot_client):
  76. bot_client.add_cog(Twitch(bot_client))