from bot.cogs.cog_manager import BaseCog import discord import random import asyncio class FunCog(BaseCog): def __init__(self, bot): super().__init__(bot) async def cmd_horse(self, message): """ Toggle horse reactions in a channel Usage: .horse """ if message.channel.id in self.bot.horsin: self.bot.horsin.remove(message.channel.id) await message.reply("no longer horsin around D:") else: self.bot.horsin.append(message.channel.id) await message.reply(":D") async def cmd_rps(self, message): """ Play Rock Paper Scissors Usage: .rps """ choices = ["rock", "paper", "scissors"] content = message.content.strip().lower() parts = content.split(maxsplit=1) if len(parts) != 2 or parts[1] not in choices: await message.edit(content="❌ Usage: `.rps `") return user_choice = parts[1] bot_choice = random.choice(choices) # Determine winner if user_choice == bot_choice: result = "It's a tie! 🤝" elif (user_choice == "rock" and bot_choice == "scissors") or \ (user_choice == "paper" and bot_choice == "rock") or \ (user_choice == "scissors" and bot_choice == "paper"): result = "You win! 🎉" else: result = "I win! 🎮" await message.edit(content=f"You chose {user_choice}, I chose {bot_choice}. {result}") async def cmd_repeat(self, message): """ Repeat a message multiple times Usage: .repeat29 """ content = message.content.strip() if " " not in content: await message.edit(content="❌ Usage: `.repeat29 `") return text = content.split(" ", 1)[1] # Don't allow mentions in repeated text if "@" in text: text = text.replace("@", "@\u200b") # Insert zero-width space to break mentions # Delete original command await message.delete() # Send 29 times for _ in range(29): await message.channel.send(text) await asyncio.sleep(0.5) # Add small delay to avoid rate limiting