college-bot-v1/cogs/mcdonalds.py

67 lines
2.8 KiB
Python
Raw Normal View History

2023-12-05 12:04:27 +00:00
import asyncio
import typing
import discord
from discord.ext import commands
class McDonaldsCog(commands.Cog):
def __init__(self, bot):
self.bot = bot
self.targets: dict[discord.Member, float] = {}
self.lock = asyncio.Lock()
self.cooldown: dict[discord.Member, float] = {}
@commands.Cog.listener()
async def on_message(self, message: discord.Message):
2023-12-05 12:11:14 +00:00
me = message.guild.me if message.guild else self.bot.user
if not message.channel.permissions_for(me).manage_messages:
2023-12-05 12:04:27 +00:00
return
async with self.lock:
if message.author in self.targets:
if message.content.upper() != "MCDONALDS!":
await message.delete()
if (message.created_at.timestamp() - self.targets[message.author]) > 10:
await message.channel.send(
f"{message.author.mention} Please say `MCDONALDS!` to end commercial.",
delete_after=30
)
self.targets[message.author] = message.created_at.timestamp()
else:
await message.reply(
"Thank you. You may now resume your activity.",
delete_after=60
)
2023-12-05 12:09:10 +00:00
self.targets.pop(message.author, None)
2023-12-05 12:04:27 +00:00
self.cooldown[message.author] = message.created_at.timestamp()
@commands.user_command(name="Commercial Break")
async def commercial_break(self, ctx: discord.ApplicationContext, member: discord.Member):
2023-12-05 12:07:45 +00:00
await ctx.defer(ephemeral=True)
2023-12-05 12:13:08 +00:00
if member.bot or member == ctx.user:
return await ctx.respond("No.", ephemeral=True)
if member in self.targets.keys():
2023-12-05 12:04:27 +00:00
await ctx.respond(f"{member.mention} is already in a commercial break.")
return
2023-12-05 12:13:08 +00:00
elif member in self.cooldown.keys() and self.cooldown[member] + 300 > discord.utils.utcnow().timestamp():
2023-12-05 12:04:27 +00:00
await ctx.respond(
f"{member.mention} is not due another ad break yet. Their next commercial break will start "
f"<t:{int(self.cooldown[member] + 300)}:R> at the earliest."
)
return
self.targets[member] = discord.utils.utcnow().timestamp()
await ctx.send(
f"{member.mention} Commercial break! Please say `MCDONALDS!` to end commercial.\n"
f"*This commercial break is sponsored by {ctx.user.mention}.*",
2023-12-05 12:07:45 +00:00
delete_after=300,
allowed_mentions=discord.AllowedMentions(users=True, roles=False, everyone=False)
2023-12-05 12:04:27 +00:00
)
await ctx.respond("Commercial break started.", ephemeral=True)
await ctx.delete(delay=120)
def setup(bot):
bot.add_cog(McDonaldsCog(bot))