mirror of
https://github.com/NoiTheCat/WorldTime.git
synced 2024-11-24 17:34:14 +00:00
Add string-based user searching
This commit is contained in:
parent
593b44920e
commit
7dcae5847f
1 changed files with 48 additions and 16 deletions
62
commands.py
62
commands.py
|
@ -91,7 +91,7 @@ class WtCommands:
|
||||||
color=14742263,
|
color=14742263,
|
||||||
title='Help & About',
|
title='Help & About',
|
||||||
description=dedent('''
|
description=dedent('''
|
||||||
"What time is it for everyone here?" - Version `{0}`.
|
World Time, version `{0}`.
|
||||||
Serving {1} communities across {2} time zones.
|
Serving {1} communities across {2} time zones.
|
||||||
'''.format(versionstr, len(self.dclient.guilds), tzcount))
|
'''.format(versionstr, len(self.dclient.guilds), tzcount))
|
||||||
)
|
)
|
||||||
|
@ -106,7 +106,7 @@ class WtCommands:
|
||||||
`tz.remove` - Removes your name from this bot.
|
`tz.remove` - Removes your name from this bot.
|
||||||
'''))
|
'''))
|
||||||
em.add_field(name='Zones', value=dedent('''
|
em.add_field(name='Zones', value=dedent('''
|
||||||
This bot uses zone names from the tz database. Most common zones are supported. For a list of entries, see: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones.
|
This bot uses zone names from the tz database. Most common zones are supported. For a list of entries, see the "TZ database name" column under https://en.wikipedia.org/wiki/List_of_tz_database_time_zones.
|
||||||
'''))
|
'''))
|
||||||
await channel.send(embed=em)
|
await channel.send(embed=em)
|
||||||
|
|
||||||
|
@ -157,7 +157,7 @@ class WtCommands:
|
||||||
# To do: improve and merge into noparam2
|
# To do: improve and merge into noparam2
|
||||||
clist = self.userdb.get_list(guild.id)
|
clist = self.userdb.get_list(guild.id)
|
||||||
if len(clist) == 0:
|
if len(clist) == 0:
|
||||||
await channel.send(':x: No users with known zones have been active in the last 72 hours.')
|
await channel.send(':x: No users with registered time zones have been active in the last 30 days.')
|
||||||
return
|
return
|
||||||
resultarr = []
|
resultarr = []
|
||||||
for i in clist:
|
for i in clist:
|
||||||
|
@ -172,7 +172,7 @@ class WtCommands:
|
||||||
async def _list_noparam2(self, guild: discord.Guild, channel: discord.TextChannel):
|
async def _list_noparam2(self, guild: discord.Guild, channel: discord.TextChannel):
|
||||||
rawlist = self.userdb.get_list2(guild.id)
|
rawlist = self.userdb.get_list2(guild.id)
|
||||||
if len(rawlist) == 0:
|
if len(rawlist) == 0:
|
||||||
await channel.send(':x: No users with known zones have been active in the last 72 hours.')
|
await channel.send(':x: No users with registered time zones have been active in the last 30 days.')
|
||||||
return
|
return
|
||||||
|
|
||||||
resultData = []
|
resultData = []
|
||||||
|
@ -188,19 +188,51 @@ class WtCommands:
|
||||||
async def _list_userparam(self, guild: discord.Guild, channel: discord.TextChannel, author: discord.User, param):
|
async def _list_userparam(self, guild: discord.Guild, channel: discord.TextChannel, author: discord.User, param):
|
||||||
# wishlist: search based on username/nickname
|
# wishlist: search based on username/nickname
|
||||||
param = str(param)
|
param = str(param)
|
||||||
if param.startswith('<@!') and param.endswith('>'):
|
usersearch = self._resolve_user(guild, param)
|
||||||
param = param[3:][:-1]
|
if usersearch is None:
|
||||||
if param.startswith('<@') and param.endswith('>'):
|
await channel.send(':x: Cannot find the specified user.')
|
||||||
param = param[2:][:-1]
|
|
||||||
if not param.isnumeric():
|
|
||||||
# Didn't get an ID...
|
|
||||||
await channel.send(':x: You must specify a user by ID or `@` mention.')
|
|
||||||
return
|
return
|
||||||
res = self.userdb.get_list(guild.id, param)
|
|
||||||
|
res = self.userdb.get_list(guild.id, usersearch.id)
|
||||||
if len(res) == 0:
|
if len(res) == 0:
|
||||||
spaghetti = author.id == param
|
ownsearch = author.id == param
|
||||||
if spaghetti: await channel.send(':x: You do not have a time zone. Set it with `tz.set`.')
|
if ownsearch: await channel.send(':x: You do not have a time zone. Set it with `tz.set`.')
|
||||||
else: await channel.send(':x: The given user has not set a time zone. Ask to set it with `tz.set`.')
|
else: await channel.send(':x: The given user does not have a time zone set.')
|
||||||
return
|
return
|
||||||
resultstr = '```\n' + self._tzPrint(res[0]) + '\n```'
|
resultstr = '```\n' + self._tzPrint(res[0]) + '\n```'
|
||||||
await channel.send(resultstr)
|
await channel.send(resultstr)
|
||||||
|
|
||||||
|
def _resolve_user(self, guild: discord.Guild, inputstr: str):
|
||||||
|
"""
|
||||||
|
Takes a string input and attempts to find the corresponding user.
|
||||||
|
"""
|
||||||
|
idsearch = None
|
||||||
|
try:
|
||||||
|
idsearch = int(inputstr)
|
||||||
|
except ValueError:
|
||||||
|
pass
|
||||||
|
if inputstr.startswith('<@!') and inputstr.endswith('>'):
|
||||||
|
idsearch = inputstr[3:][:-1]
|
||||||
|
if inputstr.startswith('<@') and inputstr.endswith('>'):
|
||||||
|
idsearch = inputstr[2:][:-1]
|
||||||
|
if idsearch is not None:
|
||||||
|
return guild.get_member(idsearch)
|
||||||
|
|
||||||
|
# get_member_named is case-sensitive. we do it ourselves. username only.
|
||||||
|
for member in guild.members:
|
||||||
|
# we'll use the discriminator and do a username lookup if it exists
|
||||||
|
if len(inputstr) > 5 and inputstr[-5] == '#':
|
||||||
|
discstr = inputstr[-4:]
|
||||||
|
userstr = inputstr[:-5]
|
||||||
|
if discstr.isdigit():
|
||||||
|
if member.discriminator == discstr and userstr.lower() == member.name.lower():
|
||||||
|
return member
|
||||||
|
#nickname search
|
||||||
|
if member.nick is not None:
|
||||||
|
if member.nick.lower() == inputstr.lower():
|
||||||
|
return member
|
||||||
|
#username search
|
||||||
|
if member.name.lower() == inputstr.lower():
|
||||||
|
return member
|
||||||
|
|
||||||
|
return None
|
Loading…
Reference in a new issue