Skip to content

Commit 1a8541f

Browse files
committed
chore: Произведен рефакторинг кода
Добавлены аннотации типов, docstring и в целом сделан рефакторинг кода
1 parent 19d9601 commit 1a8541f

File tree

3 files changed

+239
-99
lines changed

3 files changed

+239
-99
lines changed

buttons.py

+69-18
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,98 @@
1+
from typing import Dict
12
from discord.ui import Button
23
from handlers import skip_handler, queue_handler
34
import discord
5+
from discord.interactions import Interaction
46

57

6-
# Кнопка для пропуска трека
78
class SkipButton(Button):
8-
def __init__(self):
9-
super().__init__(label="Пропустить", style=discord.ButtonStyle.gray, emoji='⏭')
9+
"""
10+
Класс кнопки для пропуска текущего трека.
11+
12+
Attributes:
13+
label (str): Текст кнопки.
14+
style (discord.ButtonStyle): Стиль кнопки.
15+
emoji (str): Эмодзи для кнопки.
16+
17+
Methods:
18+
button_callback: Обработчик нажатия кнопки для пропуска текущего трека.
19+
"""
20+
21+
def __init__(self) -> None:
22+
super().__init__(label="Пропустить", style=discord.ButtonStyle.gray, emoji="⏭")
1023
self.callback = self.button_callback
1124

1225
@staticmethod
13-
async def button_callback(interaction):
26+
async def button_callback(interaction: Interaction) -> None:
1427
"""Пропускает текущий трек"""
1528
await skip_handler(interaction)
1629

1730

18-
# Кнопка для просмотра очереди треков
1931
class QueueButton(Button):
20-
def __init__(self, queues):
21-
super().__init__(label="Очередь", style=discord.ButtonStyle.gray, emoji='🎵')
32+
"""
33+
Класс кнопки для просмотра текущей очереди.
34+
35+
Attributes:
36+
label (str): Текст кнопки.
37+
style (discord.ButtonStyle): Стиль кнопки.
38+
emoji (str): Эмодзи для кнопки.
39+
queues (dict): Словарь очередей.
40+
41+
Methods:
42+
button_callback: Обработчик нажатия кнопки для просмотра текущей очереди.
43+
"""
44+
45+
def __init__(self, queues: Dict[int, list]) -> None:
46+
super().__init__(label="Очередь", style=discord.ButtonStyle.gray, emoji="🎵")
2247
self.queues = queues
2348
self.callback = self.button_callback
2449

25-
async def button_callback(self, interaction):
50+
async def button_callback(self, interaction) -> None:
2651
await queue_handler(interaction, self.queues)
2752

2853

29-
# Кнопка для удаления добавленного трека из очереди
3054
class RemoveButton(Button):
31-
def __init__(self, queues, track_info):
32-
super().__init__(label='Удалить', style=discord.ButtonStyle.gray, emoji='❌')
55+
"""
56+
Класс кнопки для удаления трека из очереди.
57+
58+
Attributes:
59+
label (str): Текст кнопки.
60+
style (discord.ButtonStyle): Стиль кнопки.
61+
emoji (str): Эмодзи для кнопки.
62+
queues (dict): Словарь очередей.
63+
track_info (dict): Информация о треке.
64+
65+
Methods:
66+
button_callback: Обработчик нажатия кнопки для удаления трека из очереди.
67+
"""
68+
69+
def __init__(self, queues: Dict[int, list], track_info: dict) -> None:
70+
super().__init__(label="Удалить", style=discord.ButtonStyle.gray, emoji="❌")
3371
self.queues = queues
3472
self.track_info = track_info
3573
self.callback = self.button_callback
3674

37-
async def button_callback(self, interaction):
38-
if interaction.user != self.track_info['author']:
39-
return await interaction.response.send_message(
40-
'Ты не можешь удалять треки, добавленные другими пользователями', ephemeral=True
75+
async def button_callback(self, interaction: Interaction) -> None:
76+
"""
77+
Удаляет трек из очереди при нажатии кнопки.
78+
79+
Parameters:
80+
interaction (Interaction): Взаимодействие с кнопкой.
81+
"""
82+
if interaction.user != self.track_info["author"]:
83+
await interaction.response.send_message(
84+
"Ты не можешь удалять треки, добавленные другими пользователями",
85+
ephemeral=True,
4186
)
87+
return
4288

43-
if self.queues.get(interaction.guild_id) and self.track_info not in self.queues[interaction.guild_id]:
44-
return await interaction.response.send_message(f'Трек {self.track_info["title"]} отсутствует в очереди')
89+
if self.track_info not in self.queues[interaction.guild_id]:
90+
await interaction.response.send_message(
91+
f'Трек {self.track_info["title"]} отсутствует в очереди'
92+
)
93+
return
4594

4695
self.queues[interaction.guild_id].remove(self.track_info)
47-
return await interaction.response.send_message(f'Трек {self.track_info["title"]} был удален из очереди')
96+
await interaction.response.send_message(
97+
f'Трек {self.track_info["title"]} был удален из очереди'
98+
)

handlers.py

+41-15
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,70 @@
11
from collections import defaultdict
2+
from typing import Dict
3+
from discord.interactions import Interaction
24

35
skip_votes = defaultdict(set)
46

57

6-
async def skip_handler(interaction):
7-
"""Пропускает текущий трек"""
8+
async def skip_handler(interaction: Interaction) -> None:
9+
"""
10+
Обработчик команды пропуска текущего трека.
11+
12+
Parameters:
13+
interaction (Interaction): Взаимодействие с кнопкой.
14+
"""
815
if not interaction.user.voice:
9-
return await interaction.response.send_message('Ты должен быть в голосовом канале', ephemeral=True)
16+
await interaction.response.send_message(
17+
"Ты должен быть в голосовом канале", ephemeral=True
18+
)
19+
return
1020

1121
guild_id = interaction.guild_id
1222
voice_client = interaction.guild.voice_client
1323

1424
if not voice_client:
15-
return await interaction.response.send_message('Сейчас ничего не играет', ephemeral=True)
25+
await interaction.response.send_message(
26+
"Сейчас ничего не играет", ephemeral=True
27+
)
28+
return
1629

1730
if interaction.user.id in skip_votes[guild_id]:
18-
return await interaction.response.send_message('Ты уже проголосовал', ephemeral=True)
31+
await interaction.response.send_message("Ты уже проголосовал", ephemeral=True)
32+
return
1933

2034
skip_votes[guild_id].add(interaction.user.id)
2135
total_members = len(interaction.user.voice.channel.voice_states.keys()) - 1
2236

2337
if not len(skip_votes[guild_id]) / total_members >= 0.5:
24-
return await interaction.response.send_message(
25-
f'Ты проголосовал за пропуск трека. Осталось голосов '
26-
f'{round(total_members * 0.5) - len(skip_votes[guild_id])}'
38+
await interaction.response.send_message(
39+
f"Ты проголосовал за пропуск трека. Осталось голосов "
40+
f"{round(total_members * 0.5) - len(skip_votes[guild_id])}"
2741
)
42+
return
2843

2944
voice_client.stop()
3045
del skip_votes[guild_id]
31-
return await interaction.response.send_message('Трек пропущен')
46+
await interaction.response.send_message("Трек пропущен")
3247

3348

34-
async def queue_handler(interaction, queues):
35-
"""Отображает текущую очередь"""
49+
async def queue_handler(interaction: Interaction, queues: Dict[int, list]) -> None:
50+
"""
51+
Обработчик команды для просмотра текущей очереди.
52+
53+
Parameters:
54+
interaction (Interaction): Взаимодействие с кнопкой.
55+
queues (Dict[int, list]): Словарь очередей.
56+
"""
3657
guild_id = interaction.guild_id
3758

3859
if queues.get(guild_id):
3960
formatted_queue = "\n".join(
40-
[f'{index + 1}. {query["title"]}' for index, query in enumerate(queues[guild_id])])
41-
message = f'Следующие треки:\n{formatted_queue}'
42-
return await interaction.response.send_message(message)
61+
[
62+
f'{index + 1}. {query["title"]}'
63+
for index, query in enumerate(queues[guild_id])
64+
]
65+
)
66+
message = f"Следующие треки:\n{formatted_queue}"
67+
await interaction.response.send_message(message)
68+
return
4369

44-
await interaction.response.send_message('Очередь пуста')
70+
await interaction.response.send_message("Очередь пуста")

0 commit comments

Comments
 (0)