-
Notifications
You must be signed in to change notification settings - Fork 54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Migrated clash of code cog to new extension format #249
base: dev
Are you sure you want to change the base?
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would be nice to move all the api doing into utils.py
and even nicer using codingame
library
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
Ping me if you need any help with it 👀 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
|
||
|
||
async def setup(bot: DiscordBot) -> None: | ||
await coc_client.login(remember_me_cookie=settings.coc.session_cookie) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Don't log in here init file is only for setup of the cog.
from bot.extensions.clashofcode.views import CreateCocView | ||
|
||
|
||
class ClashOfCode(commands.GroupCog, group_name="coc"): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Set default_permisisons to administrator=True for the group.
Don't need permissions per command in the group (That's impossible)
@@ -18,6 +18,7 @@ jishaku = {extras = ["procinfo", "profiling"], version = "^2.5.1"} | |||
beautifulsoup4 = "^4.12.2" | |||
tabulate = "^0.9.0" | |||
pillow = "^10.1.0" | |||
codingame = {extras = ["async"], version = "^1.4.2"} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we should skip installing the async extra and just use our own version of aiohttp
[ | ||
test_session_handle, | ||
{ | ||
"code": "", |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I liked the "Ignore me I'm a bot"
text :D
|
||
@app_commands.command() | ||
@app_commands.default_permissions() | ||
async def start(self, interaction: core.InteractionType): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I was thinking differently about this
I was thinking that we start a session and the bot automatically creates a game for us with the provided settings.
Then when that game ends, the bot will automatically create a new game.
Then we can also have commands to force start / stop a clash?
@commands.Cog.listener() | ||
async def on_raw_reaction_add(self, payload: discord.RawReactionActionEvent): | ||
if payload.user_id == self.bot.user.id: | ||
return | ||
|
||
if payload.message_id != settings.coc.message_id: | ||
return | ||
|
||
if self.role in payload.member.roles: | ||
return | ||
|
||
await payload.member.add_roles(self.role) | ||
try: | ||
await payload.member.send(f"Gave you the **{self.role.name}** role!") | ||
except discord.HTTPException: | ||
pass | ||
|
||
@commands.Cog.listener() | ||
async def on_raw_reaction_remove(self, payload: discord.RawReactionActionEvent): | ||
if payload.user_id == self.bot.user.id: | ||
return | ||
|
||
if payload.message_id != settings.coc.message_id: | ||
return | ||
|
||
member = self.bot.guild.get_member(payload.user_id) | ||
if self.role not in member.roles: | ||
return | ||
|
||
await member.remove_roles(self.role) | ||
try: | ||
await member.send(f"Removed your **{self.role.name}** role!") | ||
except discord.HTTPException: | ||
pass |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I thought we were going to set up the welcome screen where people can select roles?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
yes we are, avib will do that when he has time
languages = [ | ||
"Bash", | ||
"C", | ||
"C#", | ||
"C++", | ||
"Clojure", | ||
"D", | ||
"Dart", | ||
"Go", | ||
"Groovy", | ||
"Haskell", | ||
"Java", | ||
"Javascript", | ||
"Kotlin", | ||
"Lua", | ||
"ObjectiveC", | ||
"OCaml", | ||
"Pascal", | ||
"Perl", | ||
"PHP", | ||
"Python3", | ||
"Ruby", | ||
"Rust", | ||
"Scala", | ||
"Swift", | ||
"TypeScript", | ||
] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Can't we get this list from codingame api
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If not, at least format it better.
Example from what I did in another project:
# fmt: off
CRC16_TABLE = (
0x0000, 0xC0C1, 0xC181, 0x0140, 0xC301, 0x03C0, 0x0280, 0xC241, 0xC601,
0x06C0, 0x0780, 0xC741, 0x0500, 0xC5C1, 0xC481, 0x0440, 0xCC01, 0x0CC0,
0x0D80, 0xCD41, 0x0F00, 0xCFC1, 0xCE81, 0x0E40, 0x0A00, 0xCAC1, 0xCB81,
0x0B40, 0xC901, 0x09C0, 0x0880, 0xC841, 0xD801, 0x18C0, 0x1980, 0xD941,
0x1B00, 0xDBC1, 0xDA81, 0x1A40, 0x1E00, 0xDEC1, 0xDF81, 0x1F40, 0xDD01,
0x1DC0, 0x1C80, 0xDC41, 0x1400, 0xD4C1, 0xD581, 0x1540, 0xD701, 0x17C0,
0x1680, 0xD641, 0xD201, 0x12C0, 0x1380, 0xD341, 0x1100, 0xD1C1, 0xD081,
0x1040, 0xF001, 0x30C0, 0x3180, 0xF141, 0x3300, 0xF3C1, 0xF281, 0x3240,
0x3600, 0xF6C1, 0xF781, 0x3740, 0xF501, 0x35C0, 0x3480, 0xF441, 0x3C00,
0xFCC1, 0xFD81, 0x3D40, 0xFF01, 0x3FC0, 0x3E80, 0xFE41, 0xFA01, 0x3AC0,
0x3B80, 0xFB41, 0x3900, 0xF9C1, 0xF881, 0x3840, 0x2800, 0xE8C1, 0xE981,
0x2940, 0xEB01, 0x2BC0, 0x2A80, 0xEA41, 0xEE01, 0x2EC0, 0x2F80, 0xEF41,
0x2D00, 0xEDC1, 0xEC81, 0x2C40, 0xE401, 0x24C0, 0x2580, 0xE541, 0x2700,
0xE7C1, 0xE681, 0x2640, 0x2200, 0xE2C1, 0xE381, 0x2340, 0xE101, 0x21C0,
0x2080, 0xE041, 0xA001, 0x60C0, 0x6180, 0xA141, 0x6300, 0xA3C1, 0xA281,
0x6240, 0x6600, 0xA6C1, 0xA781, 0x6740, 0xA501, 0x65C0, 0x6480, 0xA441,
0x6C00, 0xACC1, 0xAD81, 0x6D40, 0xAF01, 0x6FC0, 0x6E80, 0xAE41, 0xAA01,
0x6AC0, 0x6B80, 0xAB41, 0x6900, 0xA9C1, 0xA881, 0x6840, 0x7800, 0xB8C1,
0xB981, 0x7940, 0xBB01, 0x7BC0, 0x7A80, 0xBA41, 0xBE01, 0x7EC0, 0x7F80,
0xBF41, 0x7D00, 0xBDC1, 0xBC81, 0x7C40, 0xB401, 0x74C0, 0x7580, 0xB541,
0x7700, 0xB7C1, 0xB681, 0x7640, 0x7200, 0xB2C1, 0xB381, 0x7340, 0xB101,
0x71C0, 0x7080, 0xB041, 0x5000, 0x90C1, 0x9181, 0x5140, 0x9301, 0x53C0,
0x5280, 0x9241, 0x9601, 0x56C0, 0x5780, 0x9741, 0x5500, 0x95C1, 0x9481,
0x5440, 0x9C01, 0x5CC0, 0x5D80, 0x9D41, 0x5F00, 0x9FC1, 0x9E81, 0x5E40,
0x5A00, 0x9AC1, 0x9B81, 0x5B40, 0x9901, 0x59C0, 0x5880, 0x9841, 0x8801,
0x48C0, 0x4980, 0x8941, 0x4B00, 0x8BC1, 0x8A81, 0x4A40, 0x4E00, 0x8EC1,
0x8F81, 0x4F40, 0x8D01, 0x4DC0, 0x4C80, 0x8C41, 0x4400, 0x84C1, 0x8581,
0x4540, 0x8701, 0x47C0, 0x4680, 0x8641, 0x8201, 0x42C0, 0x4380, 0x8341,
0x4100, 0x81C1, 0x8081, 0x4040
)
# fmt: on
# fmt: off
disables black formatting in "this" file until you enable it again.
if len(selected_languages) == 25: | ||
selected_languages = [] | ||
if not selected_modes: | ||
selected_modes = modes |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just to confirm
If they don't select any modes, we use all of them?
if not selected_modes: | ||
selected_modes = modes | ||
|
||
await interaction.response.defer() |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Here we can probably do a thinking=True, if that does anything on a button
|
||
try: | ||
# Submit an empty solution to not hold up the clash once everyone has submitted | ||
await coc_client.request( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe (if there's any reason to) we should wait with submitting ours until the game is over?
My thought here right now is that we get the automated chess PR finished and look at how well it works, then we can jump back and complete this |
Migrated clash of code cog to new extension format. This PR fixes the issue addressed at #222