Skip to content

Commit 370479f

Browse files
committed
add register as embed
1 parent 270b312 commit 370479f

File tree

3 files changed

+101
-41
lines changed

3 files changed

+101
-41
lines changed

cogs/admin.py

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
"""User management"""
22

33
import logging
4+
import os
5+
import sys
46

57
import discord
68
from discord import Role, app_commands
@@ -13,9 +15,42 @@
1315
from database.dto.users import User
1416
from database.error_handling import is_unique_violation
1517
from utils.kd_roles import get_kd_roles
18+
from utils.register import register
1619
from utils.role_management import RoleManagement
1720

1821

22+
class RegisterModal(discord.ui.Modal, title="Register your EA account"):
23+
def __init__(self, bot: KDRBot):
24+
self.bot = bot
25+
super().__init__()
26+
27+
username = discord.ui.TextInput(
28+
label="What is your EA id",
29+
style=discord.TextStyle.short,
30+
max_length=500,
31+
placeholder="test",
32+
required=True,
33+
)
34+
35+
async def on_submit(self, interaction: discord.Interaction[KDRBot]) -> None:
36+
await interaction.response.defer()
37+
await register(self.bot, interaction, self.username.value)
38+
39+
40+
class RegisterView(discord.ui.View):
41+
def __init__(self, bot: KDRBot):
42+
self.bot = bot
43+
super().__init__(timeout=None)
44+
45+
@discord.ui.button(
46+
label="Register",
47+
custom_id="register_user",
48+
style=discord.ButtonStyle.primary,
49+
)
50+
async def verify_callback(self, interaction: discord.Interaction, button):
51+
await interaction.response.send_modal(RegisterModal(self.bot))
52+
53+
1954
class Admin(commands.Cog):
2055
def __init__(self, bot: KDRBot):
2156
self.bot = bot
@@ -170,7 +205,25 @@ async def remove_kd_role(
170205
await session.commit()
171206
await interaction.followup.send("KD-role has been removed", ephemeral=True)
172207

208+
kdroles_group = app_commands.Group(
209+
name="generate", description="Generate a message", parent=group
210+
)
211+
212+
@kdroles_group.command(name="register", description="Generate the register button")
213+
@app_commands.guild_only()
214+
@app_commands.default_permissions(administrator=True)
215+
@app_commands.checks.has_permissions(administrator=True)
216+
async def generate_register(self, interaction: discord.Interaction) -> None:
217+
"""Generate the register button"""
218+
embed = discord.Embed(
219+
title="Register with your EA account to get your KD-role",
220+
)
221+
await interaction.response.send_message(
222+
embed=embed, view=RegisterView(self.bot)
223+
)
224+
173225

174226
async def setup(bot: KDRBot) -> None:
175227
"""Setup the cog within discord.py lib"""
228+
bot.add_view(RegisterView(bot))
176229
await bot.add_cog(Admin(bot))

cogs/users.py

Lines changed: 7 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,7 @@
88

99
from bot import KDRBot
1010
from database.dto.users import User
11-
from database.error_handling import is_unique_violation
12-
from utils.kd_roles import get_kd_roles
13-
from utils.role_management import RoleManagement
14-
from sqlalchemy.exc import IntegrityError
11+
from utils.register import register
1512

1613

1714
class Users(commands.Cog):
@@ -24,45 +21,14 @@ def __init__(self, bot: KDRBot):
2421
@app_commands.guild_only()
2522
async def register(self, interaction: discord.Interaction, username: str) -> None:
2623
"""Register a user."""
27-
async with self.bot.db.create_session() as session:
28-
if interaction.guild is None:
29-
await interaction.followup.send(
30-
"Command has to be used in the server", ephemeral=True
31-
)
32-
return
33-
34-
await interaction.response.defer()
35-
players = await self.bot.gametools_api.find_player(interaction, username)
36-
if len(players) <= 0:
37-
await interaction.followup.send("User not found", ephemeral=True)
38-
return
39-
found_player = players[0]
40-
41-
stats = await self.bot.gametools_api.get_stats(found_player)
42-
if len(players) <= 0:
43-
await interaction.followup.send(
44-
"No stats found for user", ephemeral=True
45-
)
46-
return
47-
48-
stat = stats[0]
49-
kd_roles = await get_kd_roles(session, stat["user"].server_id)
50-
kdr_role_id = await RoleManagement().update_kdr_role(
51-
self.bot, stat["user"], stat["gamemodes"], kd_roles
24+
await interaction.response.defer()
25+
if interaction.guild is None:
26+
await interaction.followup.send(
27+
"Command has to be used in the server", ephemeral=True
5228
)
29+
return
5330

54-
found_player.kdr_role_id = kdr_role_id
55-
try:
56-
session.add(found_player)
57-
await session.commit()
58-
except IntegrityError as ex:
59-
if is_unique_violation(ex):
60-
await interaction.followup.send(
61-
"You are already registered within this discord!",
62-
ephemeral=True,
63-
)
64-
65-
await interaction.followup.send("Registered", ephemeral=True)
31+
await register(self.bot, interaction, username)
6632

6733
@app_commands.command(name="kdr", description="Get your current kdr")
6834
@app_commands.guild_only()

utils/register.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import discord
2+
from sqlalchemy.exc import IntegrityError
3+
4+
from bot import KDRBot
5+
from database.error_handling import is_unique_violation
6+
from utils.kd_roles import get_kd_roles
7+
from utils.role_management import RoleManagement
8+
9+
10+
async def register(bot: KDRBot, interaction: discord.Interaction, username: str):
11+
async with bot.db.create_session() as session:
12+
players = await bot.gametools_api.find_player(interaction, username)
13+
if len(players) <= 0:
14+
await interaction.followup.send("User not found", ephemeral=True)
15+
return
16+
found_player = players[0]
17+
18+
stats = await bot.gametools_api.get_stats(found_player)
19+
if len(players) <= 0:
20+
await interaction.followup.send("No stats found for user", ephemeral=True)
21+
return
22+
23+
stat = stats[0]
24+
kd_roles = await get_kd_roles(session, stat["user"].server_id)
25+
kdr_role_id = await RoleManagement().update_kdr_role(
26+
bot, stat["user"], stat["gamemodes"], kd_roles
27+
)
28+
29+
found_player.kdr_role_id = kdr_role_id
30+
try:
31+
session.add(found_player)
32+
await session.commit()
33+
except IntegrityError as ex:
34+
if is_unique_violation(ex):
35+
await interaction.followup.send(
36+
"You are already registered within this discord!",
37+
ephemeral=True,
38+
)
39+
return
40+
41+
await interaction.followup.send("Registered", ephemeral=True)

0 commit comments

Comments
 (0)