Skip to content

Commit 5f927e9

Browse files
authored
Add ability to assign Discord role in SignUp request (#36)
* Update dependencies * Fix isort * Give role to applicant
1 parent 6a63f51 commit 5f927e9

9 files changed

Lines changed: 86 additions & 30 deletions

File tree

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ celerybeat-schedule
8585
*.sage.py
8686

8787
# Environments
88-
slao_bot/.env
88+
.env
8989
.venv
9090
env/
9191
venv/

requirements-dev.txt

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,33 @@
11
-r requirements.txt
22

3-
isort==5.12.0
3+
isort==5.13.2
44
cognitive-complexity==1.3.0
55

6-
mypy==1.4.1
6+
mypy==1.10.1
77

88
mccabe==0.7.0
9-
flake8==6.0.0
9+
flake8==7.1.0
1010
flake8-broken-line==1.0.0
11-
flake8-bugbear==23.7.10
12-
flake8-builtins==2.1.0
11+
flake8-bugbear==24.4.26
12+
flake8-builtins==2.5.0
1313
flake8-class-attributes-order==0.1.3
1414
flake8-cognitive-complexity==0.1.0
15-
flake8-commas==2.1.0
16-
flake8-comprehensions==3.14.0
15+
flake8-commas==4.0.0
16+
flake8-comprehensions==3.15.0
1717
flake8-debugger==4.1.2
1818
flake8-eradicate==1.5.0
1919
flake8-functions==0.0.8
20-
flake8-isort==6.0.0
20+
flake8-isort==6.1.1
2121
flake8-mock==0.4
2222
flake8-multiline-containers==0.0.19
2323
flake8-mutable==1.2.0
24-
flake8-noqa==1.3.2
24+
flake8-noqa==1.4.0
2525
flake8-print==5.0.0
26-
flake8-pytest-style==1.7.2
26+
flake8-pytest-style==2.0.0
2727
flake8-pytest==1.4
28-
flake8-quotes==3.3.2
29-
flake8-simplify==0.20.0
28+
flake8-quotes==3.4.0
29+
flake8-simplify==0.21.0
3030
flake8-string-format==0.3.0
3131
flake8-super==0.1.3
32-
flake8-todos==0.3.0
32+
flake8-todos==0.3.1
3333
flake8-variables-names==0.0.6

requirements.txt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
aiohttp==3.9.4
2-
discord==2.3.1
1+
aiohttp==3.9.5
2+
discord.py==2.4.0
33
gql[all]==3.5.0
4-
pydantic-settings==2.0.2
5-
tenacity==8.2.2
6-
diskcache==5.6.1
4+
pydantic-settings==2.3.4
5+
tenacity==8.5.0
6+
diskcache==5.6.3

setup.cfg

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ line_length = 80
4949
multi_line_output = 5
5050
combine_as_imports = True
5151
include_trailing_comma = True
52+
known_first_party = slaobot
5253

5354
[mypy]
5455
incremental = False

slao_bot/cogs/gear.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@
77
import tenacity
88
from discord import Colour, Embed, app_commands
99
from discord.ext import commands
10-
from slaobot import SlaoBot
1110
from utils import enchants
1211
from utils.constants import SLOT_NAMES, Role
1312
from utils.models import Raider
1413
from utils.report import Report
1514
from utils.sockets import MIN_GEM_ILEVEL, SOCKETS
1615
from utils.wcl_client import WCLClient
1716

17+
from slaobot import SlaoBot
18+
1819

1920
@dataclass
2021
class RaidWeakEquipment:

slao_bot/cogs/potions.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,11 @@
66
import tenacity
77
from discord import Colour, Embed, app_commands
88
from discord.ext import commands
9-
from slaobot import SlaoBot
109
from utils.constants import POT_IMAGES
1110
from utils.wcl_client import WCLClient
1211

12+
from slaobot import SlaoBot
13+
1314

1415
@dataclass
1516
class RaidConsumables:

slao_bot/cogs/raidreport.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,14 @@
55
import tenacity
66
from discord import Colour, Embed, Message, app_commands
77
from discord.ext import commands
8-
from slaobot import SlaoBot
98
from utils.constants import ZONE_IMAGES, Role
109
from utils.format import bold, make_execution
1110
from utils.raidview import RaidView
1211
from utils.report import Report
1312
from utils.wcl_client import WCLClient
1413

14+
from slaobot import SlaoBot
15+
1516

1617
class RaidReport(commands.Cog):
1718
def __init__(self, bot: SlaoBot):

slao_bot/cogs/signup.py

Lines changed: 59 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,61 @@
1+
import time
2+
13
import discord
24
from discord import Colour, Embed, Member, app_commands
35
from discord.ext import commands
46
from discord.ext.commands import Context
5-
from slaobot import SlaoBot
67
from utils.config import settings
78

9+
from slaobot import SlaoBot
10+
11+
12+
class SignUpRequest(discord.ui.View):
13+
"""View that will give starting role to a newcomer"""
14+
15+
def __init__(self):
16+
super().__init__(timeout=None)
17+
18+
@discord.ui.button(label='Принять', style=discord.ButtonStyle.green, custom_id='sur:accept')
19+
async def accept(self, interaction: discord.Interaction, button: discord.ui.Button):
20+
if interaction.message is None:
21+
return None
22+
23+
# noinspection PyUnresolvedReferences
24+
await interaction.response.defer()
25+
26+
# There should be an embed with questionnaire answers
27+
embed: Embed = interaction.message.embeds[0]
28+
if not embed:
29+
return None
30+
31+
try:
32+
mention = embed.fields[5].value
33+
mention = mention.replace('<', '')
34+
mention = mention.replace('>', '')
35+
mention = mention.replace('@', '')
36+
mention = mention.replace('!', '')
37+
38+
candidate = interaction.guild.get_member(int(mention))
39+
except discord.NotFound:
40+
await interaction.followup.send('Не нашел пользователя.', ephemeral=True)
41+
return None
42+
43+
role = discord.utils.get(interaction.guild.roles, name='Служитель')
44+
try:
45+
await candidate.add_roles(role)
46+
except discord.Forbidden:
47+
await interaction.followup.send('Нет прав.', ephemeral=True)
48+
return None
49+
50+
# Role set. Let's update embed and stop the view
51+
embed.set_footer(text=f'{interaction.user} сделал Служителем | {time.asctime(time.localtime(time.time()))} ')
52+
await interaction.message.edit(embed=embed, view=None)
53+
self.stop()
54+
855

956
class SignUpModal(discord.ui.Modal, title='Информация о себе'):
57+
"""Modal dialog window with basic questions about newcomer."""
58+
1059
name = discord.ui.TextInput(
1160
label='Твой имя',
1261
placeholder='Как тебя зовут',
@@ -62,7 +111,7 @@ async def on_submit(self, interaction: discord.Interaction):
62111
signup_embed.add_field(name='Пользователь', value=format(interaction.user.mention))
63112
if interaction.user.avatar:
64113
signup_embed.set_thumbnail(url=interaction.user.avatar.url)
65-
await signup_channel.send(embed=signup_embed)
114+
await signup_channel.send(embed=signup_embed, view=SignUpRequest())
66115

67116
# noinspection PyUnresolvedReferences
68117
await interaction.response.send_message(
@@ -76,13 +125,15 @@ async def on_error(self, interaction: discord.Interaction, error: Exception) ->
76125

77126

78127
class SignUp(commands.Cog):
79-
def __init__(self, bot: SlaoBot):
80-
"""
81-
Cog to greet newcomers and give them some basic questionnaire.
128+
"""Cog to greet newcomers and give them some basic questionnaire.
129+
130+
:param bot: Bot instance
131+
"""
82132

83-
:param bot: Bot instance
84-
"""
133+
def __init__(self, bot: SlaoBot):
85134
self.bot: SlaoBot = bot
135+
# Register the persistent view for listening here.
136+
self.bot.add_view(SignUpRequest())
86137

87138
@commands.Cog.listener()
88139
async def on_member_join(self, member: Member) -> None:
@@ -95,7 +146,7 @@ async def on_member_join(self, member: Member) -> None:
95146
dm_channel = await member.create_dm()
96147
intro_message = (f'Привет, {format(member.mention)}! \r\n'
97148
'Приветствуем тебя на Discord сервере гильдии <Адепты Катаклизма>! \r\n'
98-
'Мы играем в Wrath of the Lich King Classic за Альянс на Пламегоре. \r\n'
149+
'Мы играем в Cataclysm Classic за Альянс на Пламегоре. \r\n'
99150
'Если хочешь вступить к нам в гильдию, то напиши /signup в любом \r\n'
100151
'канале Discord сервера Адептов. \r\n'
101152
'Удачного времяпрепровождения!')

slao_bot/utils/raidview.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import discord
44
from discord import Embed
5+
56
from slaobot import SlaoBot
67

78

0 commit comments

Comments
 (0)