botbotbot/botbotbot/nicks.py

73 lines
2.1 KiB
Python

import logging
import random
import discord
from botbotbot.shuffle import Shuffler
logger = logging.getLogger(__name__)
class NickBot:
def __init__(
self,
bot: discord.Bot,
shuffler: Shuffler,
guild_ids: list[int] = [],
) -> None:
self.bot = bot
self.shf = shuffler
self.guild_ids = guild_ids
def init_events(self) -> None:
self.bot.add_application_command(
discord.SlashCommand(
self.alea,
name="alea",
description="Modifier les pseudos",
guild_ids=self.guild_ids,
)
)
self.bot.add_application_command(
discord.SlashCommand(
self.chan,
name="chan",
description="Donner de nouveaux pseudos",
guild_ids=self.guild_ids,
)
)
async def alea(self, ctx: discord.ApplicationContext) -> None:
logger.info(f"ALEA <{ctx.author}>.")
await ctx.defer()
if await self.shf.try_shuffle(ctx.guild):
await ctx.respond("ALEA", ephemeral=True, delete_after=30)
logger.info("FIN ALEA")
else:
await ctx.respond("ERRE ALEA", ephemeral=True, delete_after=30)
logger.info("ERRE ALEA")
async def chan(
self, ctx: discord.ApplicationContext, file: discord.Attachment
) -> None:
logger.info(f"CHAN <{ctx.author}>.")
await ctx.defer()
members = ctx.guild.members
members.remove(ctx.guild.owner)
nicks = (await file.read()).decode().splitlines()
if len(nicks) < len(members):
await ctx.respond("ERRE CHAN", ephemeral=True, delete_after=30)
return
nicks = random.choices(nicks, k=len(members))
for member, nick in zip(members, nicks):
logger.info(member, nick)
await member.edit(nick=nick)
embed = discord.Embed(
title="CHAN", description="\n".join(nicks), color=discord.Colour.green()
)
await ctx.respond(embed=embed, ephemeral=True, delete_after=30)
logger.info("FIN CHAN")