Add basic switch model and migrate fronter command
This commit is contained in:
parent
31322f3fea
commit
4a48e43d13
@ -109,21 +109,7 @@ async def system_fronter(ctx: CommandContext):
|
|||||||
else:
|
else:
|
||||||
system = await ctx.ensure_system()
|
system = await ctx.ensure_system()
|
||||||
|
|
||||||
fronters, timestamp = await pluralkit.utils.get_fronters(ctx.conn, system_id=system.id)
|
embed = await embeds.front_status(await system.get_latest_switch(ctx.conn), ctx.conn)
|
||||||
fronter_names = [member.name for member in fronters]
|
|
||||||
|
|
||||||
embed = embeds.status("")
|
|
||||||
|
|
||||||
if len(fronter_names) == 0:
|
|
||||||
embed.add_field(name="Current fronter", value="(no fronter)")
|
|
||||||
elif len(fronter_names) == 1:
|
|
||||||
embed.add_field(name="Current fronter", value=fronter_names[0])
|
|
||||||
else:
|
|
||||||
embed.add_field(name="Current fronters", value=", ".join(fronter_names))
|
|
||||||
|
|
||||||
if timestamp:
|
|
||||||
embed.add_field(name="Since", value="{} ({})".format(timestamp.isoformat(sep=" ", timespec="seconds"),
|
|
||||||
humanize.naturaltime(pluralkit.utils.fix_time(timestamp))))
|
|
||||||
await ctx.reply(embed=embed)
|
await ctx.reply(embed=embed)
|
||||||
|
|
||||||
|
|
||||||
|
@ -3,9 +3,11 @@ from typing import Tuple
|
|||||||
|
|
||||||
import discord
|
import discord
|
||||||
|
|
||||||
|
import pluralkit
|
||||||
from pluralkit import db
|
from pluralkit import db
|
||||||
from pluralkit.bot.utils import escape
|
from pluralkit.bot.utils import escape
|
||||||
from pluralkit.member import Member
|
from pluralkit.member import Member
|
||||||
|
from pluralkit.switch import Switch
|
||||||
from pluralkit.system import System
|
from pluralkit.system import System
|
||||||
from pluralkit.utils import get_fronters
|
from pluralkit.utils import get_fronters
|
||||||
|
|
||||||
@ -149,4 +151,25 @@ async def member_card(conn, member: Member) -> discord.Embed:
|
|||||||
value=member.description, inline=False)
|
value=member.description, 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
|
return card
|
||||||
|
|
||||||
|
|
||||||
|
async def front_status(switch: Switch, conn) -> discord.Embed:
|
||||||
|
if switch:
|
||||||
|
embed = status("")
|
||||||
|
fronter_names = [member.name for member in await switch.fetch_members(conn)]
|
||||||
|
|
||||||
|
if len(fronter_names) == 0:
|
||||||
|
embed.add_field(name="Current fronter", value="(no fronter)")
|
||||||
|
elif len(fronter_names) == 1:
|
||||||
|
embed.add_field(name="Current fronter", value=fronter_names[0])
|
||||||
|
else:
|
||||||
|
embed.add_field(name="Current fronters", value=", ".join(fronter_names))
|
||||||
|
|
||||||
|
if switch.timestamp:
|
||||||
|
embed.add_field(name="Since",
|
||||||
|
value="{} ({})".format(switch.timestamp.isoformat(sep=" ", timespec="seconds"),
|
||||||
|
humanize.naturaltime(pluralkit.utils.fix_time(switch.timestamp))))
|
||||||
|
else:
|
||||||
|
embed = error("No switches logged.")
|
||||||
|
return embed
|
||||||
|
11
src/pluralkit/switch.py
Normal file
11
src/pluralkit/switch.py
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
from collections import namedtuple
|
||||||
|
|
||||||
|
from typing import List
|
||||||
|
|
||||||
|
from pluralkit import db
|
||||||
|
from pluralkit.member import Member
|
||||||
|
|
||||||
|
|
||||||
|
class Switch(namedtuple("Switch", ["id", "system", "timestamp", "members"])):
|
||||||
|
async def fetch_members(self, conn) -> List[Member]:
|
||||||
|
return await db.get_members(conn, self.members)
|
@ -5,6 +5,7 @@ from typing import Optional, List
|
|||||||
|
|
||||||
from pluralkit import db, errors
|
from pluralkit import db, errors
|
||||||
from pluralkit.member import Member
|
from pluralkit.member import Member
|
||||||
|
from pluralkit.switch import Switch
|
||||||
from pluralkit.utils import generate_hid, contains_custom_emoji, validate_avatar_url_or_raise
|
from pluralkit.utils import generate_hid, contains_custom_emoji, validate_avatar_url_or_raise
|
||||||
|
|
||||||
|
|
||||||
@ -104,6 +105,18 @@ class System(namedtuple("System", ["id", "hid", "name", "description", "tag", "a
|
|||||||
async def get_members(self, conn) -> List[Member]:
|
async def get_members(self, conn) -> List[Member]:
|
||||||
return await db.get_all_members(conn, self.id)
|
return await db.get_all_members(conn, self.id)
|
||||||
|
|
||||||
|
async def get_switches(self, conn, count) -> List[Switch]:
|
||||||
|
"""Returns the latest `count` switches logged for this system, ordered latest to earliest."""
|
||||||
|
return [Switch(**s) for s in await db.front_history(conn, self.id, count)]
|
||||||
|
|
||||||
|
async def get_latest_switch(self, conn) -> Optional[Switch]:
|
||||||
|
"""Returns the latest switch logged for this system, or None if no switches have been logged"""
|
||||||
|
switches = await self.get_switches(conn, 1)
|
||||||
|
if switches:
|
||||||
|
return switches[0]
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
def get_member_name_limit(self) -> int:
|
def get_member_name_limit(self) -> int:
|
||||||
"""Returns the maximum length a member's name or nickname is allowed to be. Depends on the system tag."""
|
"""Returns the maximum length a member's name or nickname is allowed to be. Depends on the system tag."""
|
||||||
if self.tag:
|
if self.tag:
|
||||||
|
Loading…
Reference in New Issue
Block a user