电报机器人不会从组中删除贴纸

时间:2017-09-28 12:05:59

标签: python filter python-telegram-bot

我使用Python-Telegram-Bot框架和Re Module创建了一个电报机器人。 机器人应该删除成员发送给组的贴纸,也就是说,当单词start发送给组时,它将删除在组start之后发送的机器人贴纸。

我的代码:

from telegram.ext import Updater, MessageHandler, Filters
import re                                                                                                                          


def delete_method(bot, update):
    mlist=['/start']  
    for i in mlist:
        if re.match(i, update, message.text):
            update.message.delete()


def main():
    updater = Updater(token='TOKEN')
    dispatcher = updater.dispatcher
    dispatcher.add_handler(MessageHandler(Filters.all, delete_method))

    updater.start_polling()
    updater.idle()


if __name__ == '__main__':
    main()
# for exit
# updater.idle()

但是机器人不起作用,也就是说,在将发送单词start发送给组后,它不会删除发送给该组的贴纸。

代码不会给出任何错误。该组是一个超级组,该机器人是管理员,它可以访问消息!

你认为这个问题是什么?

1 个答案:

答案 0 :(得分:0)

这一行if re.match(i, update, message.text):是问题所在。您正在i对象中搜索/start(其值update)。我不明白为什么这应该有用。

您需要检查当前消息是否为贴纸。如果邮件是贴纸,则update.effective_message.sticker将返回一个值。否则它将返回None。所以你可以检查一下这个贴纸我想 - 我没有测试它:

from telegram.ext import Updater, MessageHandler, Filters


def delete_sticker(bot, update):
    if update.effective_message.sticker:
        update.message.delete


if __name__ == '__main__':
    updater = Updater(token='TOKEN')
    dispatcher = updater.dispatcher
    dispatcher.add_handler(MessageHandler(Filters.all, delete_sticker))

    updater.start_polling()
    updater.idle()