From 312d43b3c5aa694878f8739642cfc794531b4b00 Mon Sep 17 00:00:00 2001 From: Mixss Date: Sun, 22 Jan 2023 20:57:39 +0100 Subject: [PATCH] fixed displaying error messages --- dnd-bot/dnd_bot/dc/ui/messager.py | 7 +++++-- dnd-bot/dnd_bot/dc/ui/views/view_game.py | 16 +++++++++++++++- dnd-bot/dnd_bot/dc/utils/message_holder.py | 19 +++++++++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/dnd-bot/dnd_bot/dc/ui/messager.py b/dnd-bot/dnd_bot/dc/ui/messager.py index 4eee430d..e37f351d 100644 --- a/dnd-bot/dnd_bot/dc/ui/messager.py +++ b/dnd-bot/dnd_bot/dc/ui/messager.py @@ -12,7 +12,7 @@ async def send_message(channel_id: id, content: str): await channel.send(content=content) @staticmethod - async def send_dm_message(user_id: int, content: str | None, embed=None, view=None, files=None): + async def send_dm_message(user_id: int, content: str | None, embed=None, view=None, files=None, error=False): user = Messager.bot.get_user(user_id) # includes files; parameter files is a list of string file paths @@ -21,7 +21,10 @@ async def send_dm_message(user_id: int, content: str | None, embed=None, view=No files=[nextcord.File(f) for f in files]) else: sent_message = await user.send(content=content, embed=embed, view=view) - MessageHolder.register_last_message_data(user_id, user.dm_channel.id, sent_message.id) + if not error: + MessageHolder.register_last_message_data(user_id, user.dm_channel.id, sent_message.id) + else: + MessageHolder.register_last_error_data(user_id, user.dm_channel.id, sent_message.id) @staticmethod async def edit_message(channel_id: int, message_id: int, new_content: str): diff --git a/dnd-bot/dnd_bot/dc/ui/views/view_game.py b/dnd-bot/dnd_bot/dc/ui/views/view_game.py index 9b04e529..56efdd5e 100644 --- a/dnd-bot/dnd_bot/dc/ui/views/view_game.py +++ b/dnd-bot/dnd_bot/dc/ui/views/view_game.py @@ -7,6 +7,7 @@ from dnd_bot.dc.ui.message_templates import MessageTemplates from dnd_bot.dc.ui.messager import Messager +from dnd_bot.dc.utils.message_holder import MessageHolder from dnd_bot.logic.game.handler_skills import HandlerSkills from dnd_bot.logic.game.handler_attack import HandlerAttack from dnd_bot.logic.game.handler_movement import HandlerMovement @@ -99,6 +100,11 @@ async def end_turn(self, button: nextcord.ui.Button, interaction: nextcord.Inter player.action_points, False) await Messager.edit_last_user_message(user.discord_id, map_view_message) + error_data = MessageHolder.read_last_error_data(user.discord_id) + if error_data is not None: + MessageHolder.delete_last_error_data(user.discord_id) + await Messager.delete_message(error_data[0], error_data[1]) + return @@ -152,10 +158,18 @@ async def move_one_tile(direction, id_user, token, interaction: nextcord.Interac """shared function to move by one tile for all directions""" status, error_message = await HandlerMovement.handle_movement(direction, 1, id_user, token) + error_data = MessageHolder.read_last_error_data(id_user) if not status: - await interaction.response.send_message(error_message) + if error_data is not None: + await Messager.edit_message(error_data[0], error_data[1], f"**{error_message}**") + else: + await Messager.send_dm_message(id_user, f"**{error_message}**", error=True) return + if error_data is not None: + MessageHolder.delete_last_error_data(id_user) + await Messager.delete_message(error_data[0], error_data[1]) + lobby_players = Multiverse.get_game(token).user_list for user in lobby_players: diff --git a/dnd-bot/dnd_bot/dc/utils/message_holder.py b/dnd-bot/dnd_bot/dc/utils/message_holder.py index 37f20d5d..2eb56717 100644 --- a/dnd-bot/dnd_bot/dc/utils/message_holder.py +++ b/dnd-bot/dnd_bot/dc/utils/message_holder.py @@ -3,6 +3,7 @@ class MessageHolder: # keys of this dict are user discord ids; values are couples of channel id and message_id user_last_message_data = {} + user_last_error_message_data = {} @staticmethod def register_last_message_data(user_id, channel_id, message_id): @@ -16,3 +17,21 @@ def read_last_message_data(user_id): return None else: return MessageHolder.user_last_message_data[str(user_id)] + + @staticmethod + def register_last_error_data(user_id, channel_id, message_id): + """saves last message data for given discord user id""" + MessageHolder.user_last_error_message_data[str(user_id)] = (channel_id, message_id) + + @staticmethod + def read_last_error_data(user_id): + """read last message data for given discord user id""" + if not str(user_id) in MessageHolder.user_last_error_message_data: + return None + else: + return MessageHolder.user_last_error_message_data[str(user_id)] + + @staticmethod + def delete_last_error_data(user_id): + MessageHolder.user_last_error_message_data[str(user_id)] = None +