-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathuser.py
72 lines (61 loc) · 2.95 KB
/
user.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
import logging
from aiogram import types
from common import check_voting_end, bot, dp, calculate_rest, send_vote_status
logger = logging.getLogger(__name__)
@dp.callback_query_handler(func=lambda q: q.data == 'check', state='voting')
async def voting(callback_query: types.CallbackQuery):
"""
Обрабатывает нажатие на клавишу "готово" в сообщении голосовании
"""
with dp.current_state(chat=callback_query.from_user.id, user=callback_query.from_user.id) as \
state:
data = await state.get_data()
if calculate_rest(data['bonus'], data['candidates']) != 0:
await bot.answer_callback_query(callback_query.id, 'Остаток не равен 0')
else:
await state.update_data({'completed': True})
logger.info(f"{state.user} закончил")
await bot.edit_message_text(
'Голосование закончено, ожидаем оставшихся',
callback_query.from_user.id,
data['vote_message_id'],
)
await check_voting_end()
await state.set_state('end')
await bot.answer_callback_query(callback_query.id)
@dp.callback_query_handler(state='voting')
async def voting(callback_query: types.CallbackQuery):
"""
Обрабатывает нажатие на клавиши выбора и меняет сообщение на приглашение к вводу
"""
with dp.current_state(chat=callback_query.from_user.id, user=callback_query.from_user.id) as \
state:
data = await state.get_data()
await bot.edit_message_text(
f"Голосуй за {data['candidates'][callback_query.data][0]}. Вводи сколько готов отдать.",
callback_query.from_user.id,
data['vote_message_id'],
)
await state.update_data({'candidate': callback_query.data})
await state.set_state('bonus_input')
await bot.answer_callback_query(callback_query.id)
@dp.message_handler(state='bonus_input')
async def bonus_input(message: types.Message):
"""
Обрабатывает ввод пользователя и присваивает голос выбранному кандидату
"""
with dp.current_state(chat=message.chat.id, user=message.from_user.id) as state:
data = await state.get_data()
try:
bonus = int(message.text)
except ValueError:
await message.reply('Это не число даже')
return
if bonus < 0:
await message.reply('Соси жопу, нельзя в минус')
return
candidate = data['candidate']
candidates = data['candidates']
candidates[candidate] = candidates[candidate][0], bonus
await state.update_data({'candidates': candidates})
await send_vote_status(state)