Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
169 commits
Select commit Hold shift + click to select a range
2adc651
[Refactor] begin refactor of develop to resolve tech debt, fix bugs, …
YaoxuanZhang Jul 22, 2025
27ded0c
[Refactor] add audiooop dependency back for py3.13+, update shell scr…
YaoxuanZhang Jul 22, 2025
46d215e
add event changes
YaoxuanZhang Jul 22, 2025
23bc873
add event changes
YaoxuanZhang Jul 22, 2025
ddbf724
add event changes part 3
YaoxuanZhang Jul 22, 2025
f1725af
update readme as demo
YaoxuanZhang Jul 22, 2025
3797d10
fixed unused calls by making it intentially unused but still able to …
woweiseng Jul 25, 2025
3cb4034
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
woweiseng Jul 25, 2025
798172a
dropdown base checks passed
Jul 25, 2025
710bea6
privacy policy cog checks passed
Jul 25, 2025
7928b32
hotswap checks passed
Jul 25, 2025
647b10e
Purge cog checks passed
Jul 25, 2025
ba72788
Modal Base test cog all checks passed
Jul 25, 2025
35864b9
feature request cog passed checks
Jul 25, 2025
ab0764e
fixed ruff check errors in ontest_profile_handlers
simtiaz5 Jul 25, 2025
d54b935
edited main and sys_logger
Jest-a Jul 25, 2025
aaabd77
put CODE_LENGTH outside the function
simtiaz5 Jul 25, 2025
7301641
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
Jest-a Jul 25, 2025
421d25f
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
Jul 25, 2025
7d3ad25
Merge branch 'develop' of https://github.com/CApy-RPI/app into refact…
YaoxuanZhang Jul 25, 2025
41d22bb
edited event
Jest-a Jul 25, 2025
cfe33f8
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
Jest-a Jul 25, 2025
17b6717
refactored TicketBase class using dictionaries to fix error with too …
woweiseng Jul 25, 2025
df8f5c6
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
woweiseng Jul 25, 2025
cc957be
edited guild
Jest-a Jul 25, 2025
c1752a5
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
woweiseng Jul 25, 2025
5dd9899
removed color from ticket_base because the change in implementation m…
woweiseng Jul 25, 2025
e3ebab3
Fixed dropdown base refactor, and all calls to dropdown view that use…
Jul 28, 2025
1a340b1
Continued from previous
Jul 28, 2025
dc46dca
renamed functions with underscore
Jul 29, 2025
f7a2801
Deleted profile views, profile works without it and no calls to any o…
Jul 29, 2025
f05e73e
fixed warning with magic number by adding a constant varaible. Fixed …
woweiseng Jul 29, 2025
d114ff0
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
woweiseng Jul 29, 2025
94cd106
updated restrict and user
Jest-a Jul 29, 2025
fc3960e
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
Jest-a Jul 29, 2025
4a73aa9
guild, major handler, email
YaoxuanZhang Jul 29, 2025
953c7f5
ollama checks passed
Jul 29, 2025
3f31d43
updated bot
Jest-a Jul 29, 2025
682b348
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
Jest-a Jul 29, 2025
431e37e
removed db because it wasn't camelcase and program said it was an error
woweiseng Jul 29, 2025
8d03a13
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
woweiseng Jul 29, 2025
bf0146e
removed db because it wasn't camelcase and program said it was an error
woweiseng Jul 29, 2025
61f11c4
add install package in development mode for pytest
YaoxuanZhang Jul 29, 2025
6b09d8e
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
YaoxuanZhang Jul 29, 2025
bc73fa4
fixed formatting issues with too many characters in one line
woweiseng Jul 29, 2025
62daa11
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
woweiseng Jul 29, 2025
56dbff0
removed db because it wasn't camelcase and program said it was an error
woweiseng Jul 29, 2025
a1b7f6c
made several ruff error fixes
simtiaz5 Jul 29, 2025
d6b2668
changed a single line in bot, where I used a | instead of a ,
Jest-a Jul 29, 2025
9437ec8
add xenon complexity check
YaoxuanZhang Jul 29, 2025
e878852
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
YaoxuanZhang Jul 29, 2025
d56eb8a
update docker image to install requirements and not dev reqs
YaoxuanZhang Jul 29, 2025
a3d4c26
split out reaction handling branches to get rid of error with too man…
woweiseng Jul 29, 2025
ef942b2
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
woweiseng Jul 29, 2025
c0c5991
remove output.txt
YaoxuanZhang Jul 29, 2025
9c6ba8a
refactored several functions
simtiaz5 Jul 29, 2025
6ca8061
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
simtiaz5 Jul 29, 2025
b2a91ac
dropdown fix
Aug 1, 2025
221de66
refactored several functions
simtiaz5 Aug 1, 2025
3af1a97
refactored handle_attendance_add
simtiaz5 Aug 1, 2025
073c190
fixed pathing errors in conftest.py
simtiaz5 Aug 1, 2025
298c3bf
remove unnecessary guild scope check in guild cog
YaoxuanZhang Aug 1, 2025
3a7dbbe
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
YaoxuanZhang Aug 1, 2025
02c3104
combined with statements in email_test
simtiaz5 Aug 1, 2025
dd42c7a
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
simtiaz5 Aug 1, 2025
5f91b4e
fixed argument type error in email_test
simtiaz5 Aug 1, 2025
a509d1f
remove unused is_guild import guild_cog
YaoxuanZhang Aug 1, 2025
487fded
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
YaoxuanZhang Aug 1, 2025
b91225d
reduce branch complexity of on_raw_reaction_add by splitting into mo…
woweiseng Aug 1, 2025
709faff
added #noqa: ARG001 to multiple. Removing the argument db will otherw…
simtiaz5 Aug 1, 2025
f30e0c3
remove flake8 ignores
YaoxuanZhang Aug 1, 2025
0bbbe56
fixed unused argument ruff errors in user_test
simtiaz5 Aug 1, 2025
de29fc7
removed ignore-errors for mypy
simtiaz5 Aug 2, 2025
42dbfcc
auto fixed some ruff errors
simtiaz5 Aug 2, 2025
2007b7b
fixed ruff errors for restrict_test
simtiaz5 Aug 4, 2025
5248490
fixed ruff errors for office_hours_cog
simtiaz5 Aug 4, 2025
4ffe923
fixed most ruff errors for profile_cog. A few left to go.
simtiaz5 Aug 5, 2025
3f1ff23
fixed minor flake8 error on error_handler_cog
simtiaz5 Aug 5, 2025
baa50be
added constant variable to fix error
woweiseng Aug 5, 2025
e8c6b50
added constant variable to fix error
woweiseng Aug 5, 2025
8f70544
added constant variable to fix error
woweiseng Aug 5, 2025
2c66c20
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
woweiseng Aug 5, 2025
40c4d45
forgot to replace some numbers with new const variables
woweiseng Aug 5, 2025
1475bed
fixed unused db calls
woweiseng Aug 5, 2025
4f888e1
added more constants to fix errors
woweiseng Aug 5, 2025
61eeccf
found more unused db calls
woweiseng Aug 5, 2025
5c9e97b
added more constants to fix errors
woweiseng Aug 5, 2025
f0359da
refactored handle_profile
simtiaz5 Aug 5, 2025
dcc6f4c
fixed ruff error in database_test
simtiaz5 Aug 5, 2025
59aec70
fixed constant declarations becuase they were different in different …
woweiseng Aug 5, 2025
b3ff20a
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
woweiseng Aug 5, 2025
24e3444
fixed db unused in event_test
woweiseng Aug 5, 2025
2fc75f8
fixed wrong import and db calls and used constant variables to fix so…
woweiseng Aug 5, 2025
6341c69
fixed formatting imports
woweiseng Aug 5, 2025
d3dad51
fixed an error in ticket_base that was messing up the feature request…
woweiseng Aug 8, 2025
dc9cf8d
Dropdowns now split into multiple pages when dropdown has greater tha…
Aug 8, 2025
eaed554
Dropdowns now split into multiple dropdown pages when options greater…
Aug 8, 2025
b016494
changed some titles and prompts in feature_reqest_cog to match the fe…
woweiseng Aug 8, 2025
9e55da3
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
woweiseng Aug 8, 2025
b62b550
[Fix] ruff version discrepancy, pytest dev path not found
YaoxuanZhang Aug 8, 2025
4774b70
changed the error embed to use STATUS_ERROR import so that it doesn't…
woweiseng Aug 8, 2025
3c9080b
fixed line too long errors for ticket_base.py
woweiseng Aug 8, 2025
d52b0bc
guild cog edited so that server edit responds correctly to interactio…
Aug 10, 2025
3d7c3d4
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
Aug 10, 2025
3132bff
guild cog changed to correctly respond to interactions from dropdown …
Aug 10, 2025
465b70c
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
simtiaz5 Aug 10, 2025
ebdaff8
[Update] remove black formatter in favor of ruff format
YaoxuanZhang Aug 10, 2025
9637ad2
changed ticket_base to use custom button message prompts for feature …
woweiseng Aug 11, 2025
2063259
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
woweiseng Aug 11, 2025
0ff6b6d
STATUS_ERROR import was removed but was needed in ticket_base so I ad…
woweiseng Aug 11, 2025
9109dbe
[Fix] server settings really does set annoucement channel now (#87)
shamikkarkhanis Aug 12, 2025
6a5c4f2
[Feature] view and edit old events (#86)
shamikkarkhanis Aug 12, 2025
0327360
[Fix] reaction based registrations (#85)
shamikkarkhanis Aug 12, 2025
3b1edc4
[Fix] profile creation confirmation picture (#81)
shamikkarkhanis Aug 12, 2025
bb86098
fix - all mypy, xenon errors fixed
shamikkarkhanis Sep 1, 2025
15b6593
feature - added logging to guild_cog.py
shamikkarkhanis Sep 1, 2025
f72395a
fix - all errors with purge_cog.py
shamikkarkhanis Sep 2, 2025
9010dfb
[Update] config for precommit and ruff
YaoxuanZhang Sep 2, 2025
92fbe37
[Fix] - hotswap_cog.py errors
shamikkarkhanis Sep 2, 2025
1f27632
[Fix] - errors major_handler.py
shamikkarkhanis Sep 2, 2025
aa6bedb
[Fix] - error bot.py
shamikkarkhanis Sep 2, 2025
d61eba9
[Fix] - errors in test_profile_handlers.py
shamikkarkhanis Sep 2, 2025
49e11fe
[Fix] - errors ticket_base.py
shamikkarkhanis Sep 3, 2025
ac0c408
[Fix] - errors help_cog.py
shamikkarkhanis Sep 4, 2025
9d6143a
[Fix] - errors office_hours_cog.py
shamikkarkhanis Sep 4, 2025
4e7da0c
[Fix] - errors error_handler_cog.py
shamikkarkhanis Sep 4, 2025
1e46b6c
[Fix] - errors in dropdown_base.py
shamikkarkhanis Sep 4, 2025
d35816b
[Fix] - error handler cog typing error
shamikkarkhanis Sep 4, 2025
30d127b
[Fix] - linting issues error_handler_cog.py
shamikkarkhanis Sep 4, 2025
672949c
[Fix] - mypy issues dropdown_base.py again??
shamikkarkhanis Sep 4, 2025
0add6fd
[Fix] - mypy issues in guild_config.py
shamikkarkhanis Sep 4, 2025
6543c12
[Fix] - ticket_base.py mypy errors
shamikkarkhanis Sep 4, 2025
0e74ce5
[Fix] - profile_cog.py errors
shamikkarkhanis Sep 4, 2025
c956f6f
fixed limiting majors because it was broken again changed the selecti…
woweiseng Sep 23, 2025
84ee500
fixed cancel major selection button, fixed consistency issues with in…
woweiseng Sep 26, 2025
0e2660c
tic tac toe and higherlower and init
TheGoatInTheBoat Sep 26, 2025
5f3bd53
init er diagram
YaoxuanZhang Sep 26, 2025
3026cd6
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
YaoxuanZhang Sep 30, 2025
eabe4aa
[GitIgnore] add .vscode
YaoxuanZhang Sep 30, 2025
39c5a94
[Feature] - retry loop profile verification code
shamikkarkhanis Sep 30, 2025
a5524c2
Merge branch 'refactor/dev-mvp' of https://github.com/CApy-RPI/app in…
shamikkarkhanis Oct 1, 2025
ac0ec7a
started multichess: function stubs, comment pseudocode, discord inter…
TheGoatInTheBoat Oct 4, 2025
fe1cdc5
changed major select modal to just another section in the form. Got r…
woweiseng Oct 12, 2025
24af63f
Event cog refactor
TagCiccone Sep 26, 2025
3cf82ab
[Merge] Event cog refactor
TagCiccone Oct 14, 2025
129e793
[Fix] - email verification code validation
shamikkarkhanis Oct 14, 2025
ca3b5da
[Fix] Cap 210 - Rectify pre-commit violations
TagCiccone Oct 14, 2025
f0b8aa8
Merge branch 'refactor/dev-mvp' into feature/cap-210-pre-commit
TagCiccone Oct 14, 2025
0623fd2
[Fix] profile cog violations
TagCiccone Oct 14, 2025
1815e8b
[Fix] circular input in profile
TagCiccone Oct 14, 2025
e3f4021
[Update] README contributors (#89)
TagCiccone Oct 14, 2025
58a5367
Merge branch 'origin/refactor/dev-mvp' into feature/games
TheGoatInTheBoat Oct 14, 2025
9c8b082
bug fixes, format fixes, significant development of multiplayer chess
TheGoatInTheBoat Oct 24, 2025
6793514
Worked on notation parser function and split it into subfunctions
TheGoatInTheBoat Nov 1, 2025
6e7f6cc
Completed the Queen Parser function
TheGoatInTheBoat Nov 4, 2025
94b5480
bug fixes, completed rook_parser, bishop_parser, pawn_parser, added p…
TheGoatInTheBoat Nov 6, 2025
13d7d51
added en passant capabilities and castling capabilities
TheGoatInTheBoat Nov 6, 2025
aa77111
added game start message and comments
TheGoatInTheBoat Nov 7, 2025
6c71fcf
Merge branch 'develop' of https://github.com/CApy-RPI/app into featur…
TheGoatInTheBoat Nov 7, 2025
7abdceb
added more checks to is_move_legal and pseudocode
TheGoatInTheBoat Nov 8, 2025
19bbfe8
added castling to is_move_legal
TheGoatInTheBoat Nov 9, 2025
a39696e
bug fixes + added knight, bishop, queen, and rook to is_move_legal an…
TheGoatInTheBoat Nov 10, 2025
b6e55df
added function to get squares attacked by given piece, coded check_wi…
TheGoatInTheBoat Nov 11, 2025
ad457e4
code loop actually makes the move on the board + added option to make…
TheGoatInTheBoat Nov 17, 2025
469bc35
added get_pieces_on_board(), partially finished check_draw(), complet…
TheGoatInTheBoat Nov 18, 2025
7c58aba
finished check_draw(), draw by 50 move rule, draw by repetition, stal…
TheGoatInTheBoat Nov 20, 2025
939e741
bug fixes
TheGoatInTheBoat Nov 21, 2025
e1332e8
bug fixes
TheGoatInTheBoat Dec 5, 2025
c4e2b3c
bug fix in tictactoe
TheGoatInTheBoat Dec 5, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 6 additions & 4 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ repos:
require_serial: true
verbose: true
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: v0.12.8
rev: v0.12.8
hooks:
- id: ruff
Expand All @@ -31,22 +32,23 @@ repos:
"B",
"--max-average",
"B",
"src",
]
files: \.py$
exclude: games/
- id: radon-mi
name: radon maintainability index
name: radon maintainability index
entry: bash
language: system
exclude: games
args:
[
"-c",
'output=$(radon mi --min C --show src); if [ -n "$output" ]; then echo "$output"; exit 1; fi',
'output=$(radon mi --min C --show -i games src); if [ -n "$output" ]; then echo "$output"; exit 1; fi',
]
files: \.py$
- id: pytest
name: pytest
entry: bash -c 'PYTHONPATH=src pytest'
entry: pytest
language: system
pass_filenames: false
always_run: true
Expand Down
3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ target-version = "py312"
[tool.ruff.lint]
select = ["E", "W", "F", "I", "N", "UP", "C90", "B", "A", "C4", "T20", "SIM", "ARG", "PTH", "PL", "RUF"]

[tool.ruff.lint.pylint]
max-args = 7

[tool.ruff.lint.isort]
split-on-trailing-comma = true
force-single-line = false
Expand Down
2 changes: 1 addition & 1 deletion setup.bat
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ echo Setting up development environment...

REM Create virtual environment
echo Creating virtual environment...
python -m venv .venv
py -m venv .venv
if !errorlevel! neq 0 (
echo Failed to create virtual environment
exit /b 1
Expand Down
26 changes: 21 additions & 5 deletions src/capy_app/frontend/cogs/features/event_cog.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,11 @@
from backend.db.documents.user import User
from discord import app_commands
from discord.ext import commands
from frontend.interactions.bases.button_base import ConfirmDeleteView, ConfirmView, EditView
from frontend.interactions.bases.button_base import (
ConfirmDeleteView,
ConfirmView,
EditView,
)
from frontend.interactions.bases.dropdown_base import DynamicDropdownView
from frontend.interactions.bases.modal_base import DynamicModalView

Expand Down Expand Up @@ -94,7 +98,9 @@ def now() -> datetime:
return datetime.now(UTC)


def _event_time(ev: Event): # This is marked private so not to conflict with any variables event_time
def _event_time(
ev: Event,
): # This is marked private so not to conflict with any variables event_time
"""
Return the time of an event, using UTC if it's timezone-naive
"""
Expand Down Expand Up @@ -618,7 +624,10 @@ async def _save_new_event(self, interaction, event_data, event_time: datetime) -
return new_event, event_id

async def _show_event_embed(
self, event: Event, message: discord.Message | None = None, interaction: discord.Interaction | None = None
self,
event: Event,
message: discord.Message | None = None,
interaction: discord.Interaction | None = None,
) -> None:
"""
Display event details in an embed
Expand Down Expand Up @@ -725,7 +734,10 @@ async def _delete_event(self, interaction: discord.Interaction) -> None:
delete_error = await self._delete_event_and_cleanup(event, interaction.guild_id)
if delete_error:
# If error occurs during deletion, notify user
await edit_message_safe(message, f"Error deleting event '{event.details.name}': {delete_error}")
await edit_message_safe(
message,
f"Error deleting event '{event.details.name}': {delete_error}",
)
else:
# Notify user of successful deletion
await edit_message_safe(message, f"Event '{event.details.name}' has been deleted.")
Expand Down Expand Up @@ -765,7 +777,11 @@ async def _get_event_selection(
if values is not None:
# Get selected event ID
selected_id_str = None
for key in ("event_selection_upcoming", "event_selection_old", "event_selection"):
for key in (
"event_selection_upcoming",
"event_selection_old",
"event_selection",
):
selected_list = values.get(key, [])
if selected_list:
selected_id_str = selected_list[0]
Expand Down
10 changes: 8 additions & 2 deletions src/capy_app/frontend/cogs/features/guild_cog.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,10 @@ async def _verify_guild_access(self, interaction: discord.Interaction) -> tuple[
getattr(interaction.user, "id", None),
getattr(interaction.guild, "id", None),
)
return False, "Only administrators or members with the configured Admin role may run server commands."
return (
False,
"Only administrators or members with the configured Admin role may run server commands.",
)

async def _process_settings_selection(
self,
Expand Down Expand Up @@ -561,7 +564,10 @@ async def auto_create(self, interaction: discord.Interaction, _button: discord.u
updates, created_channels, created_roles = await self.cog._handle_auto_create(interaction.guild)
guild_data = await GuildHandlerCog.ensure_guild_exists(interaction.guild.id)
Database.update_document(guild_data, updates)
await interaction.followup.send(self.cog._build_auto_summary(created_channels, created_roles), ephemeral=True)
await interaction.followup.send(
self.cog._build_auto_summary(created_channels, created_roles),
ephemeral=True,
)
await self.cog.show_settings(interaction)

@discord.ui.button(label="Manual Select", style=discord.ButtonStyle.blurple)
Expand Down
56 changes: 56 additions & 0 deletions src/capy_app/frontend/cogs/games/higherlower_cog.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
import logging
import random

import discord
from discord import app_commands
from discord.ext import commands

from config import settings


class HigherLowerCog(commands.Cog):
def __init__(self, bot: commands.Bot):
self.bot = bot
self.logger = logging.getLogger(f"discord.cog.{self.__class__.__name__.lower()}")

@app_commands.guilds(discord.Object(id=settings.DEBUG_GUILD_ID))
@app_commands.command(
name="higherlower",
description="Picks a random number between user specified bounds that you have to guess",
)
async def higherlower(self, interaction: discord.Interaction, lower_bound: int, upper_bound: int):
"""Higher/Lower guessing game."""
if lower_bound > upper_bound:
await interaction.response.send_message("❌ Lower bound must be <= upper bound", ephemeral=True)
return

target = random.randint(lower_bound, upper_bound)
self.logger.info(f"[HigherLower] Target number: {target}")

await interaction.response.send_message(
f"🎯 I've picked a number between {lower_bound} and {upper_bound}. Try to guess it!",
ephemeral=True,
)

def check(msg: discord.Message):
return msg.author == interaction.user and msg.channel == interaction.channel and msg.content.isdigit()

while True:
try:
guess_msg = await self.bot.wait_for("message", check=check, timeout=120.0)
guess = int(guess_msg.content)

if guess < target:
await interaction.followup.send("🔽 Too low! Try again...", ephemeral=True)
elif guess > target:
await interaction.followup.send("🔼 Too high! Try again...", ephemeral=True)
else:
await interaction.followup.send(f"✅ You got it! The number was **{target}** 🎉", ephemeral=True)
break
except TimeoutError:
await interaction.followup.send("⌛ You took too long to respond. Game over!", ephemeral=True)
break


async def setup(bot: commands.Bot):
await bot.add_cog(HigherLowerCog(bot))
Loading