Skip to content
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

Draft
wants to merge 6 commits into
base: dev
Choose a base branch
from

Conversation

FirePlank
Copy link
Contributor

Migrated clash of code cog to new extension format. This PR fixes the issue addressed at #222

Copy link
Collaborator

@HETHAT HETHAT left a 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

bot/extensions/clashofcode/commands.py Outdated Show resolved Hide resolved
Copy link
Collaborator

@takos22 takos22 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

bot/extensions/clashofcode/commands.py Outdated Show resolved Hide resolved
bot/extensions/clashofcode/events.py Outdated Show resolved Hide resolved
bot/extensions/clashofcode/commands.py Outdated Show resolved Hide resolved
@takos22
Copy link
Collaborator

takos22 commented Nov 3, 2023

even nicer using codingame library

Ping me if you need any help with it 👀

@FirePlank FirePlank requested a review from HETHAT November 5, 2023 19:07
Copy link
Collaborator

@takos22 takos22 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

bot/extensions/clashofcode/views.py Show resolved Hide resolved
bot/extensions/clashofcode/views.py Show resolved Hide resolved
bot/extensions/clashofcode/views.py Outdated Show resolved Hide resolved
bot/extensions/clashofcode/views.py Outdated Show resolved Hide resolved
bot/extensions/clashofcode/views.py Outdated Show resolved Hide resolved
@FirePlank FirePlank requested a review from SylteA November 7, 2023 15:31


async def setup(bot: DiscordBot) -> None:
await coc_client.login(remember_me_cookie=settings.coc.session_cookie)
Copy link
Owner

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"):
Copy link
Owner

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"}
Copy link
Owner

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": "",
Copy link
Owner

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):
Copy link
Owner

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?

Comment on lines +18 to +51
@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
Copy link
Owner

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?

Copy link
Contributor

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

Comment on lines +14 to +40
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",
]
Copy link
Owner

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

Copy link
Owner

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
Copy link
Owner

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()
Copy link
Owner

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(
Copy link
Owner

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?

@SylteA SylteA linked an issue Nov 11, 2023 that may be closed by this pull request
@SylteA
Copy link
Owner

SylteA commented Dec 4, 2023

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

@SylteA SylteA marked this pull request as draft December 4, 2023 11:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Migrate clash of code cog to new extension format
5 participants