Format code

This commit is contained in:
Ske
2018-07-12 00:49:02 +02:00
parent b81b768b04
commit 902c14ef65
6 changed files with 157 additions and 65 deletions

View File

@@ -9,9 +9,11 @@ import discord
from pluralkit import db
from pluralkit.bot import client, logger
def generate_hid() -> str:
return "".join(random.choices(string.ascii_lowercase, k=5))
async def parse_mention(mention: str) -> discord.User:
# First try matching mention format
match = re.fullmatch("<@!?(\\d+)>", mention)
@@ -27,10 +29,11 @@ async def parse_mention(mention: str) -> discord.User:
except (ValueError, discord.NotFound):
return None
async def get_system_fuzzy(conn, key) -> asyncpg.Record:
if isinstance(key, discord.User):
return await db.get_system_by_account(conn, account_id=key.id)
if isinstance(key, str) and len(key) == 5:
return await db.get_system_by_hid(conn, system_hid=key)
@@ -39,7 +42,8 @@ async def get_system_fuzzy(conn, key) -> asyncpg.Record:
if system:
return system
return None
async def get_member_fuzzy(conn, system_id: int, key: str, system_only=True) -> asyncpg.Record:
# First search by hid
if system_only:
@@ -60,6 +64,8 @@ command_map = {}
# Command wrapper
# Return True for success, return False for failure
# Second parameter is the message it'll send. If just False, will print usage
def command(cmd, subcommand, usage=None, description=None):
def wrap(func):
async def wrapper(conn, message, args):
@@ -70,12 +76,13 @@ def command(cmd, subcommand, usage=None, description=None):
success, msg = res, None
else:
success, msg = res
if not success and not msg:
# Failure, no message, print usage
usage_embed = discord.Embed()
usage_embed.colour = discord.Colour.blue()
usage_embed.add_field(name="Usage", value=usage, inline=False)
usage_embed.add_field(
name="Usage", value=usage, inline=False)
await client.send_message(message.channel, embed=usage_embed)
elif not success:
@@ -103,6 +110,8 @@ def command(cmd, subcommand, usage=None, description=None):
# Member command wrapper
# Tries to find member by first argument
# If system_only=False, allows members from other systems by hid
def member_command(cmd, subcommand, usage=None, description=None, system_only=True):
def wrap(func):
async def wrapper(conn, message, args):
@@ -122,11 +131,12 @@ def member_command(cmd, subcommand, usage=None, description=None, system_only=Tr
if member is None:
return False, "Can't find member \"{}\".".format(args[0])
return await func(conn, message, member, args[1:])
return command(cmd=cmd, subcommand=subcommand, usage=usage, description=description)(wrapper)
return wrap
async def generate_system_info_card(conn, system: asyncpg.Record) -> discord.Embed:
card = discord.Embed()
@@ -134,7 +144,8 @@ async def generate_system_info_card(conn, system: asyncpg.Record) -> discord.Emb
card.title = system["name"]
if system["description"]:
card.add_field(name="Description", value=system["description"], inline=False)
card.add_field(name="Description",
value=system["description"], inline=False)
if system["tag"]:
card.add_field(name="Tag", value=system["tag"])
@@ -158,11 +169,13 @@ async def generate_system_info_card(conn, system: asyncpg.Record) -> discord.Emb
member_texts.append("`{}`: {}".format(member["hid"], member["name"]))
if len(member_texts) > 0:
card.add_field(name="Members", value="\n".join(member_texts), inline=False)
card.add_field(name="Members", value="\n".join(
member_texts), inline=False)
card.set_footer(text="System ID: {}".format(system["hid"]))
return card
async def generate_member_info_card(conn, member: asyncpg.Record) -> discord.Embed:
card = discord.Embed()
card.set_author(name=member["name"], icon_url=member["avatar_url"])
@@ -171,18 +184,21 @@ async def generate_member_info_card(conn, member: asyncpg.Record) -> discord.Emb
card.colour = int(member["color"], 16)
if member["birthday"]:
card.add_field(name="Birthdate", value=member["birthday"].strftime("%b %d, %Y"))
card.add_field(name="Birthdate",
value=member["birthday"].strftime("%b %d, %Y"))
if member["pronouns"]:
card.add_field(name="Pronouns", value=member["pronouns"])
if member["prefix"] or member["suffix"]:
prefix = member["prefix"] or ""
suffix = member["suffix"] or ""
card.add_field(name="Proxy Tags", value="{}text{}".format(prefix, suffix))
card.add_field(name="Proxy Tags",
value="{}text{}".format(prefix, suffix))
if member["description"]:
card.add_field(name="Description", value=member["description"], inline=False)
card.add_field(name="Description",
value=member["description"], inline=False)
# Get system name and hid
system = await db.get_system(conn, system_id=member["system"])
@@ -192,9 +208,11 @@ async def generate_member_info_card(conn, member: asyncpg.Record) -> discord.Emb
system_value = "`{}`".format(system["hid"])
card.add_field(name="System", value=system_value, inline=False)
card.set_footer(text="System ID: {} | Member ID: {}".format(system["hid"], member["hid"]))
card.set_footer(text="System ID: {} | Member ID: {}".format(
system["hid"], member["hid"]))
return card
async def text_input(message, subject):
await client.send_message(message.channel, "Reply in this channel with the new description you want to set for {}.".format(subject))
msg = await client.wait_for_message(author=message.author, channel=message.channel)
@@ -208,4 +226,4 @@ async def text_input(message, subject):
return msg.content
else:
await client.clear_reactions(msg)
return None
return None