-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bug fixes #18
Bug fixes #18
Changes from 6 commits
12880aa
db44575
36fc244
124aadb
c7d4f04
6999fe3
07ad964
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
class GroupChatRequiredException(Exception): | ||
"""Exception raised when an attempt is made to start a game outside a group chat.""" | ||
|
||
def __init__(self, user_id, message="Game can only be started in a group chat."): | ||
self.user_id = user_id | ||
self.message = message | ||
super().__init__(self.message) | ||
|
||
def __str__(self): | ||
return f"{self.message} User ID: {self.user_id}" |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -13,7 +13,23 @@ | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
fetch_poll_results, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from src.services.draw_result_image import draw_result_image | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from src.utils import message_is_poll, is_message_from_group_chat | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
from src.utils import message_is_poll, is_message_from_group_chat, try_to_delete_message | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
async def send_result(context, update, game: Game, records: list[Record]): | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
try: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
await context.bot.send_photo( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
chat_id=game.chat_id, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
photo=await draw_result_image( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
records=records, result=game.results, update=update, context=context | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
caption=f"The Game has been saved! Result: {game.results}", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
disable_notification=True, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
except Exception as e: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
await update.effective_message.reply_text( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
f"Result: {game.results}\nP.S. this bot can send you a result image, allow it to send photos. {e}" | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Comment on lines
+19
to
+32
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The + import logging
...
except Exception as e:
+ logging.error(f"Failed to send result photo: {e}")
await update.effective_message.reply_text( Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
async def _pass_checks( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -46,8 +62,9 @@ async def _pass_checks( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return False | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
if update.effective_user.id != poll_data.creator_id: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
user = msg_with_poll.from_user.username if msg_with_poll.from_user.username else msg_with_poll.from_user.first_name | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
await update.effective_message.reply_text( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
f"You are not the creator of the game! Only @{poll_data['creator_username']} can stop this poll." | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
f"You are not the creator of the game! Only @{user} can stop this poll." | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
return False | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -93,16 +110,15 @@ async def save( | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
await asyncio.gather( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
save_game(game), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
*(save_record(record) for record in records), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
context.bot.delete_message(chat_id=game.chat_id, message_id=game.poll_id), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
update.effective_message.delete(), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
context.bot.send_photo( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
try_to_delete_message( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
context=context, chat_id=game.chat_id, message_id=game.poll_id | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
try_to_delete_message( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
context=context, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
chat_id=game.chat_id, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
photo=await draw_result_image( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
records=records, result=game.results, update=update, context=context | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
caption="The Game has been saved!", | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
disable_notification=True, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
message_id=update.effective_message.id, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
send_result(context=context, update=update, game=game, records=records), | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
else: | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
await update.effective_message.reply_text( | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,12 +1,21 @@ | ||
from telegram import Update | ||
from telegram.ext import ContextTypes | ||
|
||
from src.config import AppConfig | ||
|
||
async def start(update: Update, context: ContextTypes.DEFAULT_TYPE) -> None: | ||
"""Inform user about what this bot can do""" | ||
|
||
async def start( | ||
update: Update, context: ContextTypes.DEFAULT_TYPE, config: AppConfig = AppConfig() | ||
) -> None: | ||
"""Inform user about what this bot can do""" | ||
await update.message.reply_text( | ||
"Hi this bot will help you to gather statistics about your games. Add it to chat " | ||
"with your friends and start a game by /game command. After game is finished, " | ||
"stop the poll by /save command. You can also /help to get more info." | ||
"Hi this bot will help you to gather statistics about your games. Add it to a chat " | ||
"with your friends and start a game by **/game** command. After game is finished, " | ||
"stop the poll by **/save** command. You can also /help to get more info." | ||
"**Hint**: Give the bot admin rights to delete messages and it will automatically clean up after itself.\n" | ||
"Feel free to contribute to the project: [GitHub](" | ||
"https://github.com/Alex-Kopylov/Secret-Hitler-Telegram-Bot-Statistic-Collector)\n" | ||
"Please report any issues to [GitHub Issues](" | ||
"https://github.com/Alex-Kopylov/Secret-Hitler-Telegram-Bot-Statistic-Collector/issues)", | ||
parse_mode="Markdown", | ||
) |
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -8,4 +8,12 @@ def message_is_poll(msg: Message) -> bool: | |||||||||||||||||||||||
|
||||||||||||||||||||||||
def is_message_from_group_chat(msg: Message) -> bool: | ||||||||||||||||||||||||
"""Check if a message is from a group chat""" | ||||||||||||||||||||||||
return msg.chat.type in ("group", "supergroup") | ||||||||||||||||||||||||
return msg.chat.type == "group" or msg.chat.type == "supergroup" | ||||||||||||||||||||||||
|
||||||||||||||||||||||||
|
||||||||||||||||||||||||
async def try_to_delete_message(context, chat_id, message_id): | ||||||||||||||||||||||||
try: | ||||||||||||||||||||||||
await context.bot.delete_message(chat_id=chat_id, message_id=message_id) | ||||||||||||||||||||||||
except Exception as e: | ||||||||||||||||||||||||
return | ||||||||||||||||||||||||
Comment on lines
+14
to
+18
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Consider logging exceptions in except Exception as e:
+ logging.error(f"Failed to delete message: {e}")
return Committable suggestion
Suggested change
|
||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Consider logging the exception caught when sending a poll fails. This can aid in debugging and understanding the specific issues encountered during operation.
Committable suggestion