История изменений
Исправление theurs, (текущая версия) :
message_id - id сообщения а не группы или темы в группе
потыкал в отладчике и вроде понятнее стало
когда кто то что то пишет в тему в группе у объекта message почему то есть поле message.reply_to_message и message.is_topic_message == True
странно, ведь это сообщение не выглядит как ответ на чье то сообщение
и пара исключений
если пишут в главную тему группы то там этого поля нет (message.reply_to_message) и message.is_topic_message = None(False)
если пишут в ответ на сообщение в теме группы, тогда message.reply_to_message нету но есть message.is_topic_message == True
в итоге функция для идентификации получилась такая, но может это еще не все случаи и исключения Ж(
def get_topic_id(message: telebot.types.Message) -> str:
"""
Get the topic ID from a Telegram message.
Parameters:
message (telebot.types.Message): The Telegram message object.
Returns:
str: '[chat.id] [topic.id]'
"""
chat_id = message.chat.id
# topic_id = 'not topic'
topic_id = 0
if message.reply_to_message and message.reply_to_message.is_topic_message:
# if message.reply_to_message and message.reply_to_message.content_type == 'forum_topic_created':
topic_id = message.reply_to_message.message_thread_id
elif message.is_topic_message:
topic_id = message.message_thread_id
# bot.reply_to(message, f'DEBUG: [{chat_id}] [{topic_id}]')
return f'[{chat_id}] [{topic_id}]'
Исправление theurs, :
message_id - id сообщения а не группы или темы в группе
потыкал в отладчике и вроде понятнее стало
когда кто то что то пишет в тему в группе у объекта message почему то есть поле message.reply_to_message и message.is_topic_message == True
странно, ведь это сообщение не выглядит как ответ на чье то сообщение
и пара исключений
если пишут в главную тему группы то там этого поля нет (message.reply_to_message)
если пишут в ответ на сообщение в теме группы, тогда message.reply_to_message нету но есть message.is_topic_message == True
в итоге функция для идентификации получилась такая, но может это еще не все случаи и исключения Ж(
def get_topic_id(message: telebot.types.Message) -> str:
"""
Get the topic ID from a Telegram message.
Parameters:
message (telebot.types.Message): The Telegram message object.
Returns:
str: '[chat.id] [topic.id]'
"""
chat_id = message.chat.id
# topic_id = 'not topic'
topic_id = 0
if message.reply_to_message and message.reply_to_message.is_topic_message:
# if message.reply_to_message and message.reply_to_message.content_type == 'forum_topic_created':
topic_id = message.reply_to_message.message_thread_id
elif message.is_topic_message:
topic_id = message.message_thread_id
# bot.reply_to(message, f'DEBUG: [{chat_id}] [{topic_id}]')
return f'[{chat_id}] [{topic_id}]'
Исходная версия theurs, :
message_id - id сообщения а не группы или темы в группе
потыкал в отладчике и вроде понятнее стало
когда кто то что то пишет в тему в группе у объекта message почему то есть поле message.reply_to_message и оно message.reply_to_message.content_type == 'forum_topic_created'
странно, ведь это сообщение не выглядит как ответ на чье то сообщение
и пара исключений
если пишут в главную тему группы то там этого поля нет
если пишут в ответ на сообщение в теме группы, тогда message.reply_to_message нету но есть message.is_topic_message == True
в итоге функция для идентификации получилась такая, но может это еще не все случаи и исключения Ж(
def get_topic_id(message: telebot.types.Message) -> str:
"""
Get the topic ID from a Telegram message.
Parameters:
message (telebot.types.Message): The Telegram message object.
Returns:
str: '[chat.id] [topic.id]'
"""
chat_id = message.chat.id
# topic_id = 'not topic'
topic_id = 0
if message.reply_to_message and message.reply_to_message.content_type == 'forum_topic_created':
topic_id = message.reply_to_message.message_thread_id
elif message.is_topic_message:
topic_id = message.message_thread_id
# bot.reply_to(message, f'DEBUG: [{chat_id}] [{topic_id}]')
return f'[{chat_id}] [{topic_id}]'