Удалить исходящее сообщение, отправленное telegram-ботом (Telegram, python)

#python-telegram-bot #messageid

#python-telegram-bot #messageid

Вопрос:

я застрял в своем коде, поскольку не знаю, как ввести / получить message_id исходящего сообщения, пересылаемого моим ботом.

Справочная информация: это всего лишь часть моего кода, которую я впоследствии интегрирую в основной код. Здесь я тестирую функциональность пересылки сообщений их удаления. Я могу успешно переслать их, но я застрял при их удалении. я могу ввести идентификатор chat_id, но не могу сделать это для удаления message_id. Есть ли способ сделать это, особенно когда я собираюсь интегрироваться в свой основной скрипт, который может иметь несколько групп для управления. Пожалуйста, помогите новичку во мне. Спасибо!

Мой скрипт:

 import logging
from telegram import ReplyKeyboardMarkup, ReplyKeyboardRemove, Update
from telegram.ext import (
    Updater,
    CommandHandler,
    MessageHandler,
    Filters,
    ConversationHandler,
    CallbackContext,
)

TOKEN = "PUT TOKEN HERE" #INPUT HERE 

# Enable logging
logging.basicConfig(
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)

logger = logging.getLogger(__name__)

MSG, DELETE_MSG = range(2)


def start(update: Update, context: CallbackContext) -> int:
    update.message.reply_text(
        'Hi! Please post the message you would like to share:')
    return MSG


def send(update: Update, context: CallbackContext) -> int:
    user = update.message.from_user
    logger.info("Message of %s: %s", user.first_name, update.message.text)
    print(update.message.message_id)
    send = update.message.forward(chat_id= 'PUT CHAT ID OF OUTGOING GROUP HERE') #INPUT HERE 
    update.message.reply_text("Please delete")

    return DELETE_MSG

def delete_msg(update: Update, context: CallbackContext) -> int:
    user = update.message.from_user
    logger.info("edit of %s: %s", user.first_name, update.message.text) 
    
    update.message.delete(chat_id='PUT CHAT ID OF OUTGOING GROUP HERE', 
                        message_id='IM STUCK HERE') #INPUT HERE 
    return ConversationHandler.END


def cancel(update: Update, context: CallbackContext) -> int:
    user = update.message.from_user
    logger.info("User %s canceled the conversation.", user.first_name)
    update.message.reply_text('Bye! I hope we can talk again some day.', reply_markup=ReplyKeyboardRemove())
    return ConversationHandler.END


def main() -> None:
    updater = Updater(TOKEN, use_context=True)

    dispatcher = updater.dispatcher
    conv_handler = ConversationHandler(
        entry_points=[CommandHandler('start', start)],
        states={
            MSG: [MessageHandler(~Filters.command, send)],
            DELETE_MSG: [MessageHandler(~Filters.command, delete_msg)]
        },
        fallbacks=[CommandHandler('cancel', cancel)],
    )

    dispatcher.add_handler(conv_handler)
    
    updater.start_polling()
    updater.idle()


if __name__ == '__main__':
    main()
 

Ответ №1:

update.message.reply_text("Please delete") должна быть переменная, и тогда вы сможете context.bot.deleteMessage message_id использовать ее. Вот так:

 must_delete = update.message.reply_text("Please delete")
context.bot.deleteMessage (message_id = must_delete.message_id,
                           chat_id = update.message.chat_id)
 

Попробуйте и дайте мне знать, сработало ли это для вас!!

Комментарии:

1. Это работает как по волшебству! Это помогло мне идентифицировать исходящий message_id как запрошенный! Кроме того, я понимаю, что продолжал пытаться с помощью update.message. удалить, которое не будет работать. мне нужно использовать context.bot.deleteMessage в соответствии с вашим синтаксисом. Большое спасибо! 🙂

2. Я рад, что смог помочь!