From 67387dc80ddcd996cc3646d2e7495ab7997ef6e5 Mon Sep 17 00:00:00 2001 From: CMDR furrycat Date: Thu, 2 Mar 2017 12:03:49 +0000 Subject: [PATCH] Identify servers. --- plugin/developer/developer.py | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) diff --git a/plugin/developer/developer.py b/plugin/developer/developer.py index bf5a5c2..233ebe7 100644 --- a/plugin/developer/developer.py +++ b/plugin/developer/developer.py @@ -14,6 +14,7 @@ class Identify(Enum): member = 1 role = 2 channel = 4 + server = 8 def string(instance): if type(instance) == discord.member.Member: @@ -26,6 +27,8 @@ class Identify(Enum): if instance.type == discord.ChannelType.voice: return 'Voice Channel ({}bps)'.format(instance.bitrate) return 'Channel' + elif type(instance) == discord.server.Server: + return 'Server' class Developer(object): def description(self): @@ -64,23 +67,25 @@ class Developer(object): ] elif command == 'id': lines = [ - 'Print the Discord IDs of member, roles or channels known to me.', + 'Print the Discord IDs of servers, members, roles or channels known to me.', '```', + 'id SERVER', 'id MEMBER', 'id ROLE', 'id CHANNEL', '```', - 'Prints the ID of the member, role or channel with the given name.', + 'Prints the ID of the server, member, role or channel with the given name.', "I can only identify someone or something if I share a server.", 'Useful for `announce create` to specify a `voice` channel, which must be done by ID.', '', '```', + 'id --servers', 'id --members', 'id --roles', 'id --channels', 'id', '```', - 'Identify all MEMBERs, ROLEs or CHANNELs known to me.', + 'Identify all SERVERs, MEMBERs, ROLEs or CHANNELs known to me.', "If you don't give any arguments I'll identify everyone and everything I know about.", 'Note that if I share more than one server with a member, that member will be listed twice with two IDs!', "Also note that because of the Discord message length limit I'll probably have to split my reply into multiple posts." @@ -131,16 +136,18 @@ class Developer(object): @asyncio.coroutine def handle_id(self, message, args): - do = Identify.member.value | Identify.role.value | Identify.channel.value + do = Identify.member.value | Identify.role.value | Identify.channel.value | Identify.server.value target = None channel_id = None role_id = None member_id = None + server_id = None ap = ThrowingArgumentParser() ap.add_argument('--channel', '--channels', action='store_true') ap.add_argument('--member', '--members', action='store_true') ap.add_argument('--role', '--roles', action='store_true') + ap.add_argument('--server', '--servers', action='store_true') ap.add_argument('target', nargs='?') try: parsed = ap.parse_args(args) @@ -163,9 +170,11 @@ class Developer(object): elif prefix == '#': channel_id = str(id) do = Identify.channel.value + elif re.match(r'^\d+$', parsed.target): + server_id = str(target) else: target = parsed.target - elif parsed.channel or parsed.member or parsed.role: + elif parsed.channel or parsed.member or parsed.role or parsed.server: do = 0 if parsed.channel: do |= Identify.channel.value @@ -173,6 +182,8 @@ class Developer(object): do |= Identify.member.value if parsed.role: do |= Identify.role.value + if parsed.server: + do |= Identify.server.value results = [] if do & Identify.member.value: @@ -214,5 +225,15 @@ class Developer(object): if target and channel.name.lower() != target.lower(): continue results.append(channel) + if do & Identify.server.value: + if server_id: + for server in client.servers: + if server.id == server_id: + results.append(server) + else: + for server in client.servers: + if target and server.name.lower() != target.lower(): + continue + results.append(server) yield from bot.say_many(message.channel, ['{} {} {}'.format(Identify.string(result), result.id, result.name) for result in set(results)]) -- 2.7.4