member = 1
role = 2
channel = 4
+ server = 8
def string(instance):
if type(instance) == discord.member.Member:
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):
]
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."
@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)
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
do |= Identify.member.value
if parsed.role:
do |= Identify.role.value
+ if parsed.server:
+ do |= Identify.server.value
results = []
if do & Identify.member.value:
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)])