mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-24 03:54:20 +00:00
Fix callback queries
This commit is contained in:
parent
c9069a5221
commit
9266aedad9
1 changed files with 118 additions and 103 deletions
221
telegrambot.py
221
telegrambot.py
|
@ -388,113 +388,128 @@ def cmd_mm(bot: telegram.Bot, update: telegram.Update, session: db.Session):
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
|
|
||||||
@command
|
def on_callback_query(bot: telegram.Bot, update: telegram.Update):
|
||||||
@database_access
|
try:
|
||||||
def on_callback_query(bot: telegram.Bot, update: telegram.Update, session: db.Session):
|
session = db.Session()
|
||||||
if update.callback_query.data.startswith("vote_"):
|
if update.callback_query.data.startswith("vote_"):
|
||||||
if update.callback_query.data == "vote_yes":
|
if update.callback_query.data == "vote_yes":
|
||||||
status = db.VoteChoices.YES
|
status = db.VoteChoices.YES
|
||||||
emoji = "🔵"
|
emoji = "🔵"
|
||||||
elif update.callback_query.data == "vote_no":
|
elif update.callback_query.data == "vote_no":
|
||||||
status = db.VoteChoices.NO
|
status = db.VoteChoices.NO
|
||||||
emoji = "🔴"
|
emoji = "🔴"
|
||||||
elif update.callback_query.data == "vote_abstain":
|
elif update.callback_query.data == "vote_abstain":
|
||||||
status = db.VoteChoices.ABSTAIN
|
status = db.VoteChoices.ABSTAIN
|
||||||
emoji = "⚫️"
|
emoji = "⚫️"
|
||||||
else:
|
|
||||||
raise NotImplementedError()
|
|
||||||
user = session.query(db.Telegram).filter_by(telegram_id=update.callback_query.from_user.id).one_or_none()
|
|
||||||
if user is None:
|
|
||||||
bot.answer_callback_query(update.callback_query.id, show_alert=True,
|
|
||||||
text=strings.LINK.ERRORS.ROYALNET_NOT_LINKED,
|
|
||||||
parse_mode="Markdown")
|
|
||||||
return
|
|
||||||
question = session.query(db.VoteQuestion)\
|
|
||||||
.filter_by(message_id=update.callback_query.message.message_id)\
|
|
||||||
.one()
|
|
||||||
answer = session.query(db.VoteAnswer).filter_by(question=question, user=user).one_or_none()
|
|
||||||
if answer is None:
|
|
||||||
answer = db.VoteAnswer(question=question, choice=status, user=user)
|
|
||||||
session.add(answer)
|
|
||||||
bot.answer_callback_query(update.callback_query.id, text=f"Hai votato {emoji}.", cache_time=1)
|
|
||||||
elif answer.choice == status:
|
|
||||||
session.delete(answer)
|
|
||||||
bot.answer_callback_query(update.callback_query.id, text=f"Hai ritratto il tuo voto.", cache_time=1)
|
|
||||||
else:
|
|
||||||
answer.choice = status
|
|
||||||
bot.answer_callback_query(update.callback_query.id, text=f"Hai cambiato il tuo voto in {emoji}.",
|
|
||||||
cache_time=1)
|
|
||||||
session.commit()
|
|
||||||
inline_keyboard = IKMarkup([[IKButton("🔵 Sì", callback_data="vote_yes")],
|
|
||||||
[IKButton("🔴 No", callback_data="vote_no")],
|
|
||||||
[IKButton("⚫️ Astieniti", callback_data="vote_abstain")]])
|
|
||||||
bot.edit_message_text(message_id=update.callback_query.message.message_id,
|
|
||||||
chat_id=update.callback_query.message.chat.id,
|
|
||||||
text=question.generate_text(session),
|
|
||||||
reply_markup=inline_keyboard,
|
|
||||||
parse_mode="HTML")
|
|
||||||
elif update.callback_query.data.startswith("match_"):
|
|
||||||
user = session.query(db.Telegram).filter_by(telegram_id=update.callback_query.from_user.id).one_or_none()
|
|
||||||
if user is None:
|
|
||||||
bot.answer_callback_query(update.callback_query.id,
|
|
||||||
show_alert=True,
|
|
||||||
text=strings.LINK.ERRORS.ROYALNET_NOT_LINKED,
|
|
||||||
parse_mode="Markdown")
|
|
||||||
return
|
|
||||||
match = session.query(db.Match).filter_by(message_id=update.callback_query.message.message_id).one()
|
|
||||||
if update.callback_query.data == "match_close":
|
|
||||||
if match.creator != user:
|
|
||||||
bot.answer_callback_query(update.callback_query.id,
|
|
||||||
show_alert=True,
|
|
||||||
text=strings.MATCHMAKING.ERRORS.NOT_ADMIN)
|
|
||||||
return
|
|
||||||
match.closed = True
|
|
||||||
for player in match.players:
|
|
||||||
if player.status >= 1:
|
|
||||||
reply_msg(bot, player.user.telegram_id, strings.MATCHMAKING.GAME_START[player.status], **match.format_dict())
|
|
||||||
elif update.callback_query.data == "match_cancel":
|
|
||||||
if not (match.creator == user or user.telegram_id == 25167391):
|
|
||||||
bot.answer_callback_query(update.callback_query.id,
|
|
||||||
show_alert=True,
|
|
||||||
text=strings.MATCHMAKING.ERRORS.NOT_ADMIN)
|
|
||||||
return
|
|
||||||
match.closed = True
|
|
||||||
status = {
|
|
||||||
"match_ready": db.MatchmakingStatus.READY,
|
|
||||||
"match_wait_for_me": db.MatchmakingStatus.WAIT_FOR_ME,
|
|
||||||
"match_maybe": db.MatchmakingStatus.MAYBE,
|
|
||||||
"match_ignore": db.MatchmakingStatus.IGNORED,
|
|
||||||
"match_close": None,
|
|
||||||
"match_cancel": None,
|
|
||||||
}.get(update.callback_query.data)
|
|
||||||
if status:
|
|
||||||
if match.closed:
|
|
||||||
bot.answer_callback_query(update.callback_query.id,
|
|
||||||
show_alert=True,
|
|
||||||
text=strings.MATCHMAKING.ERRORS.MATCH_CLOSED)
|
|
||||||
return
|
|
||||||
player = session.query(db.MatchPartecipation).filter_by(match=match, user=user).one_or_none()
|
|
||||||
if player is None:
|
|
||||||
player = db.MatchPartecipation(match=match, status=status.value, user=user)
|
|
||||||
session.add(player)
|
|
||||||
else:
|
else:
|
||||||
player.status = status.value
|
raise NotImplementedError()
|
||||||
session.commit()
|
user = session.query(db.Telegram).filter_by(telegram_id=update.callback_query.from_user.id).one_or_none()
|
||||||
bot.answer_callback_query(update.callback_query.id,
|
if user is None:
|
||||||
text=strings.MATCHMAKING.TICKER_TEXT[update.callback_query.data],
|
bot.answer_callback_query(update.callback_query.id, show_alert=True,
|
||||||
cache_time=1)
|
text=strings.LINK.ERRORS.ROYALNET_NOT_LINKED,
|
||||||
if not match.closed:
|
parse_mode="Markdown")
|
||||||
inline_keyboard = IKMarkup([([IKButton(strings.MATCHMAKING.BUTTONS[key], callback_data=key)]) for key in strings.MATCHMAKING.BUTTONS])
|
return
|
||||||
else:
|
question = session.query(db.VoteQuestion)\
|
||||||
inline_keyboard = None
|
.filter_by(message_id=update.callback_query.message.message_id)\
|
||||||
try:
|
.one()
|
||||||
|
answer = session.query(db.VoteAnswer).filter_by(question=question, user=user).one_or_none()
|
||||||
|
if answer is None:
|
||||||
|
answer = db.VoteAnswer(question=question, choice=status, user=user)
|
||||||
|
session.add(answer)
|
||||||
|
bot.answer_callback_query(update.callback_query.id, text=f"Hai votato {emoji}.", cache_time=1)
|
||||||
|
elif answer.choice == status:
|
||||||
|
session.delete(answer)
|
||||||
|
bot.answer_callback_query(update.callback_query.id, text=f"Hai ritratto il tuo voto.", cache_time=1)
|
||||||
|
else:
|
||||||
|
answer.choice = status
|
||||||
|
bot.answer_callback_query(update.callback_query.id, text=f"Hai cambiato il tuo voto in {emoji}.",
|
||||||
|
cache_time=1)
|
||||||
|
session.commit()
|
||||||
|
inline_keyboard = IKMarkup([[IKButton("🔵 Sì", callback_data="vote_yes")],
|
||||||
|
[IKButton("🔴 No", callback_data="vote_no")],
|
||||||
|
[IKButton("⚫️ Astieniti", callback_data="vote_abstain")]])
|
||||||
bot.edit_message_text(message_id=update.callback_query.message.message_id,
|
bot.edit_message_text(message_id=update.callback_query.message.message_id,
|
||||||
chat_id=config["Telegram"]["announcement_group"],
|
chat_id=update.callback_query.message.chat.id,
|
||||||
text=match.generate_text(session),
|
text=question.generate_text(session),
|
||||||
reply_markup=inline_keyboard,
|
reply_markup=inline_keyboard,
|
||||||
parse_mode="HTML")
|
parse_mode="HTML")
|
||||||
except BadRequest:
|
elif update.callback_query.data.startswith("match_"):
|
||||||
pass
|
user = session.query(db.Telegram).filter_by(telegram_id=update.callback_query.from_user.id).one_or_none()
|
||||||
|
if user is None:
|
||||||
|
bot.answer_callback_query(update.callback_query.id,
|
||||||
|
show_alert=True,
|
||||||
|
text=strings.LINK.ERRORS.ROYALNET_NOT_LINKED,
|
||||||
|
parse_mode="Markdown")
|
||||||
|
return
|
||||||
|
match = session.query(db.Match).filter_by(message_id=update.callback_query.message.message_id).one()
|
||||||
|
if update.callback_query.data == "match_close":
|
||||||
|
if match.creator != user:
|
||||||
|
bot.answer_callback_query(update.callback_query.id,
|
||||||
|
show_alert=True,
|
||||||
|
text=strings.MATCHMAKING.ERRORS.NOT_ADMIN)
|
||||||
|
return
|
||||||
|
match.closed = True
|
||||||
|
for player in match.players:
|
||||||
|
if player.status >= 1:
|
||||||
|
reply_msg(bot, player.user.telegram_id, strings.MATCHMAKING.GAME_START[player.status], **match.format_dict())
|
||||||
|
elif update.callback_query.data == "match_cancel":
|
||||||
|
if not (match.creator == user or user.telegram_id == 25167391):
|
||||||
|
bot.answer_callback_query(update.callback_query.id,
|
||||||
|
show_alert=True,
|
||||||
|
text=strings.MATCHMAKING.ERRORS.NOT_ADMIN)
|
||||||
|
return
|
||||||
|
match.closed = True
|
||||||
|
status = {
|
||||||
|
"match_ready": db.MatchmakingStatus.READY,
|
||||||
|
"match_wait_for_me": db.MatchmakingStatus.WAIT_FOR_ME,
|
||||||
|
"match_maybe": db.MatchmakingStatus.MAYBE,
|
||||||
|
"match_ignore": db.MatchmakingStatus.IGNORED,
|
||||||
|
"match_close": None,
|
||||||
|
"match_cancel": None,
|
||||||
|
}.get(update.callback_query.data)
|
||||||
|
if status:
|
||||||
|
if match.closed:
|
||||||
|
bot.answer_callback_query(update.callback_query.id,
|
||||||
|
show_alert=True,
|
||||||
|
text=strings.MATCHMAKING.ERRORS.MATCH_CLOSED)
|
||||||
|
return
|
||||||
|
player = session.query(db.MatchPartecipation).filter_by(match=match, user=user).one_or_none()
|
||||||
|
if player is None:
|
||||||
|
player = db.MatchPartecipation(match=match, status=status.value, user=user)
|
||||||
|
session.add(player)
|
||||||
|
else:
|
||||||
|
player.status = status.value
|
||||||
|
session.commit()
|
||||||
|
bot.answer_callback_query(update.callback_query.id,
|
||||||
|
text=strings.MATCHMAKING.TICKER_TEXT[update.callback_query.data],
|
||||||
|
cache_time=1)
|
||||||
|
if not match.closed:
|
||||||
|
inline_keyboard = IKMarkup([([IKButton(strings.MATCHMAKING.BUTTONS[key], callback_data=key)]) for key in strings.MATCHMAKING.BUTTONS])
|
||||||
|
else:
|
||||||
|
inline_keyboard = None
|
||||||
|
try:
|
||||||
|
bot.edit_message_text(message_id=update.callback_query.message.message_id,
|
||||||
|
chat_id=config["Telegram"]["announcement_group"],
|
||||||
|
text=match.generate_text(session),
|
||||||
|
reply_markup=inline_keyboard,
|
||||||
|
parse_mode="HTML")
|
||||||
|
except BadRequest:
|
||||||
|
pass
|
||||||
|
except Exception:
|
||||||
|
sentry.user_context({
|
||||||
|
"id": update.effective_user.id,
|
||||||
|
"telegram": {
|
||||||
|
"username": update.effective_user.username,
|
||||||
|
"first_name": update.effective_user.first_name,
|
||||||
|
"last_name": update.effective_user.last_name
|
||||||
|
}
|
||||||
|
})
|
||||||
|
sentry.extra_context({
|
||||||
|
"update": update.to_dict()
|
||||||
|
})
|
||||||
|
sentry.captureException()
|
||||||
|
finally:
|
||||||
|
session.close()
|
||||||
|
|
||||||
|
|
||||||
@command
|
@command
|
||||||
|
|
Loading…
Reference in a new issue