"""Functions for controlling the bot's presence. Also contains the loop.""" import random import nextcord from nextcord.ext import commands, tasks class BotPresence(commands.Cog, name="Bot Presence"): """Class for bot presence functions.""" def __init__(self, bot: commands.Bot) -> None: self.bot = bot @commands.Cog.listener() async def on_guild_join(self, guild: nextcord.Guild) -> None: # noqa: ARG002 """Listener for Guild Join. Updated presence on guild join.""" await self.change_presence() @commands.Cog.listener() async def on_ready(self) -> None: """Starts the loop when bot is ready.""" await self.bot.wait_until_ready() self.periodic_change_presence.start() @tasks.loop(minutes=2) async def periodic_change_presence(self) -> None: """Loops every 2 minutes and changes presence.""" await self.change_presence() async def change_presence(self) -> None: """Randomly chooses a presence and updates bot's presence.""" statuses = [ "Now with slash commands!", "Vuln Pls.", "All your base are belong to us.", "Double plus good.", "That's a lot of damage!", ] status = random.choice(statuses) # noqa: S311 status += f" | {len(self.bot.guilds)} servers" await self.bot.change_presence(activity=nextcord.Game(status))