feat(bot): ✨ Send a message to the user when they find an easter egg.

This commit is contained in:
Nyeki.py
2024-10-21 15:46:23 -03:00
parent a4dd1f57dc
commit e52953ccca
6 changed files with 62 additions and 1 deletions
+10
View File
@@ -0,0 +1,10 @@
import enum
class EasterEggCommand(enum.IntFlag):
"""Flags representing the easter eggs.
This is used to keep track of which easter eggs did the user find."""
CATMASK = 1
USERPHONE = 2
+35
View File
@@ -0,0 +1,35 @@
from discord.ext import commands
from payphone.db import utils
from payphone.cogs.easter import EasterEggCommand
def easter_egg(command: EasterEggCommand):
"""Send rewards to the user when they find an easter egg."""
async def predicate(ctx: commands.Context) -> bool:
if ctx.author.bot:
return False
user, _ = await utils.get_user(ctx.author)
if command not in user.found_easter_eggs:
user.found_easter_eggs |= command
remaining_easter_eggs = len(list(EasterEggCommand)) - len(
user.found_easter_eggs.name.split("|")
)
await ctx.send(
"✨ You found an easter egg! "
+ (
f"There are {remaining_easter_eggs} easter eggs remaining."
if remaining_easter_eggs > 0
else "There are no easter eggs left, congratulations! 🎉"
)
)
await user.save()
return True
return commands.check(predicate)
+3
View File
@@ -8,6 +8,7 @@ from payphone import bot
from payphone.db import models
from payphone.cogs import base
from payphone.core import constants
from payphone.cogs.easter import EasterEggCommand, checks
class Easter(base.Cog):
@@ -17,6 +18,7 @@ class Easter(base.Cog):
self.bot = bot_instance
@commands.command()
@checks.easter_egg(EasterEggCommand.CATMASK)
@transactions.atomic()
async def catmask(self, ctx: commands.Context) -> None:
"""
@@ -45,6 +47,7 @@ class Easter(base.Cog):
await channel_rs.save()
@commands.command(aliases=["speakerphone"])
@checks.easter_egg(EasterEggCommand.USERPHONE)
async def userphone(self, ctx: commands.Context) -> None:
"""
The second easter egg! You found it.
@@ -0,0 +1,11 @@
from tortoise import BaseDBAsyncClient
async def upgrade(db: BaseDBAsyncClient) -> str:
return """
ALTER TABLE "user" ADD "found_easter_eggs" SMALLINT NOT NULL DEFAULT 0;"""
async def downgrade(db: BaseDBAsyncClient) -> str:
return """
ALTER TABLE "user" DROP COLUMN "found_easter_eggs";"""
+2
View File
@@ -10,6 +10,7 @@ from discord import webhook
import aiohttp
from payphone.core import config, constants
from payphone.cogs.easter import EasterEggCommand
class User(models.Model):
@@ -17,6 +18,7 @@ class User(models.Model):
username: str = fields.CharField(max_length=32, db_index=True)
is_masked: bool = fields.BooleanField(default=False)
is_moderator: bool = fields.BooleanField(default=False)
found_easter_eggs: int = fields.IntEnumField(EasterEggCommand, default=0)
profiles: fields.BackwardFKRelation["Profile"]
call_rss: fields.BackwardFKRelation["CallUserChannelRelationship"]
leaderboard_position: int | None = fields.IntField(
+1 -1
View File
@@ -59,7 +59,7 @@ async def get_channel(channel: discord.TextChannel) -> models.Channel:
async def get_user(
user: discord.User | discord.Member,
) -> Tuple[models.User, models.Profile | None]:
) -> Tuple[models.User, models.Profile]:
"""Returns a user from the database, creating or updating it if it already exists.
Args: