From cb2e4c73122cefc7979d5861103b8dc161581a2b Mon Sep 17 00:00:00 2001 From: aikaterna Date: Sat, 2 Dec 2017 12:49:51 -0800 Subject: [PATCH] Add serverlimit --- serverlimit/info.json | 8 +++++ serverlimit/serverlimit.py | 71 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 79 insertions(+) create mode 100644 serverlimit/info.json create mode 100644 serverlimit/serverlimit.py diff --git a/serverlimit/info.json b/serverlimit/info.json new file mode 100644 index 0000000..890730f --- /dev/null +++ b/serverlimit/info.json @@ -0,0 +1,8 @@ +{ + "AUTHOR" : "aikaterna", + "INSTALL_MSG" : "No settings, when loaded the bot will leave servers with under 25 members on join.", + "NAME" : "serverlimit", + "SHORT" : "Serverlimit", + "DESCRIPTION" : "Limits the bot joining servers that have under 25 members.", + "TAGS": [] +} diff --git a/serverlimit/serverlimit.py b/serverlimit/serverlimit.py new file mode 100644 index 0000000..496e047 --- /dev/null +++ b/serverlimit/serverlimit.py @@ -0,0 +1,71 @@ +# get_default_channel_or_other is from Squid's Admin cog: +# https://github.com/tekulvw/Squid-Plugins + +import discord +import traceback + + +class ServerLimit: + def __init__(self, bot): + self.bot = bot + + async def _message(self, server): + server_owner = server.owner + notice_msg = "Hi, I tried to make an announcement in your "\ + + "server, " + server.name + ", but I don't have "\ + + "permissions to send messages in the default "\ + + "channel there!" + await self.bot.send_message(server_owner, notice_msg) + await self.bot.leave_server(server) + + async def on_server_join(self, server): + chan = self.get_default_channel_or_other(server, + discord.ChannelType.text, + send_messages=True) + me = server.me + server_owner = server.owner + msg = "I can only join servers which have more than 25 members. "\ + + "Please try again later when the server is larger." + if len(server.members) <= 25: + if chan is not None: + if chan.permissions_for(me).send_messages: + await self.bot.send_message(chan, msg) + await self.bot.leave_server(server) + else: + await self._message(server) + await self.bot.send_message(server_owner, msg) + else: + await self._message(server) + await self.bot.send_message(server_owner, msg) + + def get_default_channel_or_other(self, server, + ctype: discord.ChannelType=None, + **perms_required): + + perms = discord.Permissions.none() + perms.update(**perms_required) + if ctype is None: + types = [discord.ChannelType.text, discord.ChannelType.voice] + elif ctype == discord.ChannelType.text: + types = [discord.ChannelType.text] + else: + types = [discord.ChannelType.voice] + try: + channel = server.default_channel + except Exception: + channel = None + if channel is not None: + if channel.permissions_for(server.me).is_superset(perms): + return channel + + chan_list = [c for c in sorted(server.channels, + key=lambda ch: ch.position) + if c.type in types] + for ch in chan_list: + if ch.permissions_for(server.me).is_superset(perms): + return ch + return None + + +def setup(bot): + bot.add_cog(ServerLimit(bot))