feat(bot): ✨ Add p.user command.

This commit is contained in:
Nyeki.py
2024-10-19 00:04:13 -03:00
parent ff402f9f9e
commit de65936073
+48 -7
View File
@@ -9,7 +9,7 @@ import discord
from discord import errors from discord import errors
from discord.ext import commands from discord.ext import commands
from tortoise import transactions from tortoise import transactions, expressions
from payphone import bot from payphone import bot
from payphone.db import models, utils from payphone.db import models, utils
@@ -243,9 +243,7 @@ class Mods(base.Cog):
- `[<reason>]`: The reason of the shutdown. - `[<reason>]`: The reason of the shutdown.
""" """
oncall_channel_ids = list( oncall_channel_ids = list(await redis.smembers(constants.CHANNELS_ONCALL_SET))
await redis.smembers(constants.CHANNELS_ONCALL_SET)
)
searching_channel_ids = list( searching_channel_ids = list(
await redis.smembers(constants.CHANNELS_SEARCH_QUEUE) await redis.smembers(constants.CHANNELS_SEARCH_QUEUE)
) )
@@ -272,9 +270,7 @@ class Mods(base.Cog):
await asyncio.sleep(seconds) await asyncio.sleep(seconds)
oncall_channel_ids = list( oncall_channel_ids = list(await redis.smembers(constants.CHANNELS_ONCALL_SET))
await redis.smembers(constants.CHANNELS_ONCALL_SET)
)
searching_channel_ids = list( searching_channel_ids = list(
await redis.smembers(constants.CHANNELS_SEARCH_QUEUE) await redis.smembers(constants.CHANNELS_SEARCH_QUEUE)
) )
@@ -396,6 +392,51 @@ class Mods(base.Cog):
if i < iterations: if i < iterations:
await asyncio.sleep(wait) await asyncio.sleep(wait)
@commands.command()
async def user(self, ctx: commands.Context, user: converters.DiscordUserID) -> None:
"""
Shows all the information about a user.
Options:
- `[<user>]`: The user, their ID, or `.` or `reply` replying to their message.
"""
user_id = user
user = await models.User.get(id=user_id).prefetch_related("profiles")
profile: models.Profile = user.profiles[0]
bans = await models.Ban.filter(
expressions.Q(
expires_at=None,
expires_at__gt=datetime.now(timezone.utc),
join_type="OR",
),
user_id=user_id,
)
embed = discord.Embed(
color=profile.color or constants.EMBED_COLOR,
title="Profile Information",
timestamp=datetime.now(timezone.utc),
fields=[
discord.EmbedField(
name="Ongoing Bans",
value="\n".join(
[
f"- `ID: {ban.id}`{f" (by <@{ban.banned_by_id}>)" if ban.banned_by_id else None}: {ban.reason if ban.reason else "*No reason*"}. Banned {f"until <t:{int(ban.expires_at.timestamp())}:R>" if ban.expires_at is not None else "permanently"}."
for ban in bans
]
)
or "*No ongoing bans.*",
)
],
author=profile.embed_author,
thumbnail=profile.avatar_url
)
await ctx.send(embed=embed)
def setup(b: bot.Payphone) -> None: def setup(b: bot.Payphone) -> None:
"""Load the cog into the bot. """Load the cog into the bot.