Skip to content
1 change: 1 addition & 0 deletions bot.toml.example
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ log_level = "INFO"
id = <the id of the server here>
news_channel_id = <the id of the news channel here>
news_role_id = <the id of the news channel here>
auto_role_channel_id = <the id of the auto role channel here>

[sith_api]
api_key = "<your sith api token here>"
Expand Down
12 changes: 11 additions & 1 deletion src/commands/club.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ class ClubCog(commands.GroupCog, group_name="club"):
def __init__(self, bot: AeBot):
self.club_service = ClubService(bot)
self.settings = Settings()
self.bot = bot

async def autocomplete_club(
self, _interaction: Interaction, current: str
Expand Down Expand Up @@ -125,7 +126,16 @@ async def create_club(
if Club.filter(Club.sith_id == club.id).exists():
await interaction.followup.send(f"Le club : {club.name} existe déjà...")
else:
await self.club_service.create_club(club, interaction.guild)
guild = interaction.guild
id_channel_autorole = utils.get(
guild.channels, id=self.bot.settings.guild.auto_role_channel_id
)
mess = await id_channel_autorole.send(
f"Réagi à ce message pour rejoindre le club {club.name}"
)

await mess.add_reaction("✅")
await self.club_service.create_club(club, guild, mess)
await interaction.followup.send(f"Le club : {club.name} à été créé")

@app_commands.command(name="passation")
Expand Down
66 changes: 66 additions & 0 deletions src/commands/role.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
from __future__ import annotations

from typing import TYPE_CHECKING

from discord.ext import commands

from src.client import ClubSchema # noqa TC001
from src.db.models import Club
from src.services.club import ClubService
from src.settings import Settings

if TYPE_CHECKING:
from src.main import AeBot


class RoleCog(commands.GroupCog, group_name="role"):
def __init__(self, bot: AeBot):
self.settings = Settings()
self.club_service = ClubService(bot)
self.bot = bot

@commands.Cog.listener()
async def on_raw_reaction_add(self, payload):
Comment thread
imperosol marked this conversation as resolved.
Outdated
if payload.guild_id is None:
return

guild = self.bot.get_guild(payload.guild_id)
member = guild.get_member(payload.user_id)

if member == self.bot.user:
return

channel = self.bot.get_channel(payload.channel_id)
message = await channel.fetch_message(payload.message_id)
emoji = str(payload.emoji)
db_club = Club.get(Club.message_autorole_id == message.id)

if not db_club:
return

elif emoji != "✅":
await message.remove_reaction(payload.emoji, member)

await self.club_service.add_member(db_club, member)

@commands.Cog.listener()
async def on_raw_reaction_remove(self, payload):
if payload.guild_id is None:
return

guild = self.bot.get_guild(payload.guild_id)
member = guild.get_member(payload.user_id)

if member == self.bot.user:
return

channel = self.bot.get_channel(payload.channel_id)
message = await channel.fetch_message(payload.message_id)
emoji = str(payload.emoji)

db_club = Club.get(Club.message_autorole_id == message.id)

if not db_club or emoji != "✅":
return

await self.club_service.remove_member(db_club, member, _former=0)
1 change: 1 addition & 0 deletions src/db/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ class Club(DbBaseModel):
treasurer_role_id = peewee.IntegerField(unique=True)
member_role_id = peewee.IntegerField(unique=True)
former_member_role_id = peewee.IntegerField(unique=True)
message_autorole_id = peewee.IntegerField(unique=True)


def init():
Expand Down
2 changes: 2 additions & 0 deletions src/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from src.commands.club import ClubCog
from src.commands.misc import MiscCog
from src.commands.news import NewsCog
from src.commands.role import RoleCog
from src.settings import BASE_DIR, Settings

if TYPE_CHECKING:
Expand All @@ -38,6 +39,7 @@ async def setup_hook(self):
await self.add_cog(NewsCog(self))
await self.add_cog(AdminCog(self))
await self.add_cog(MiscCog())
await self.add_cog(RoleCog(self))

async def on_ready(self):
await self.wait_until_ready()
Expand Down
12 changes: 8 additions & 4 deletions src/services/club.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from src.settings import Settings

if TYPE_CHECKING:
from discord import Guild, Member
from discord import Guild, Member, Message

from src.client import ClubSchema, SimpleClubSchema
from src.main import AeBot
Expand Down Expand Up @@ -77,7 +77,7 @@ def embed(self, club: ClubSchema) -> Embed:
)
return embed

async def create_club(self, club: ClubSchema, guild: Guild):
async def create_club(self, club: ClubSchema, guild: Guild, mess: Message):
if Club.filter(Club.sith_id == club.id).exists():
raise ClubExists
# create the role for member, presidence and treasurer
Expand Down Expand Up @@ -119,6 +119,7 @@ async def create_club(self, club: ClubSchema, guild: Guild):
treasurer_role_id=treasurer.id,
member_role_id=member.id,
former_member_role_id=former_member.id,
message_autorole_id=mess.id,
)

async def add_member(self, club: Club, member: Member):
Expand All @@ -130,11 +131,14 @@ async def add_member(self, club: Club, member: Member):
)
await member.add_roles(role, reason=f"{member.name} joined club {club.name}")

async def remove_member(self, club: Club, member: Member):
async def remove_member(self, club: Club, member: Member, _former=1):
Comment thread
TitouanDor marked this conversation as resolved.
Outdated
role = utils.get(member.guild.roles, id=club.member_role_id)
former = utils.get(member.guild.roles, id=club.former_member_role_id)
await member.remove_roles(role, reason=f"{member.name} left club {club.name}")
await member.add_roles(former, reason=f"{member.name} left club {club.name}")
if _former == 1:
await member.add_roles(
former, reason=f"{member.name} left club {club.name}"
)

async def handover(
self, club: ClubSchema, new_pres: Member, new_treso: Member, guild: Guild
Expand Down
1 change: 1 addition & 0 deletions src/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ class GuildConfig(BaseModel):
id: int
news_channel_id: int | None = None
news_role_id: int | None = None
auto_role_channel_id: int | None = None


class BotConfig(BaseModel):
Expand Down