Is it a good way of refreshing ConversationHandlers? #5204
Unanswered
BlizzardJedi
asked this question in
Q&A
Replies: 2 comments 1 reply
-
async def hard_reset_chat_session(
update: Update | None,
context: ContextTypes.DEFAULT_TYPE
) -> None:
application = getattr(context, "application", None)
if update is not None and application is not None:
seen_handlers: set[int] = set()
def iter_conversation_handlers():
def walk(handler):
if not isinstance(handler, ConversationHandler):
return
handler_id = id(handler)
if handler_id in seen_handlers:
return
seen_handlers.add(handler_id)
yield handler
for child_handler in getattr(handler, "_child_conversations", []):
yield from walk(child_handler)
for handlers in application.handlers.values():
for handler in handlers:
yield from walk(handler)
for handler in iter_conversation_handlers():
try:
conversation_key = handler._get_key(update)
except RuntimeError:
continue
handler._update_state(ConversationHandler.END, conversation_key)
timeout_job = handler.timeout_jobs.pop(conversation_key, None)
if timeout_job is not None:
timeout_job.schedule_removal() |
Beta Was this translation helpful? Give feedback.
1 reply
-
|
|
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
The code below was written by ChatGPT. It is meant to get all the
ConversationHandlers available and refresh their state. GPT inserted calls ofhard_reset_chat_session(...)in every handler start. It seems to be a good try by GPT, but I wonder, if this code is legal. First of all, it uses some "_"-prefixed methods and onegetattrwith a hardcoded string argument. Looks a bit dirty for me, but what I really want to know is if it correctly processes different users? And perhaps there are some other pitfalls.Beta Was this translation helpful? Give feedback.
All reactions