【问题标题】:Telegram Bot Is Not Working电报机器人不工作
【发布时间】:2017-08-13 12:46:38
【问题描述】:

我用 python-telegram-bot 制作了一个电报机器人。我已经为机器人定义了一个单词列表,我想管理组中的聊天机器人。也就是说,如果在定义的列表中找到聊天中的单词,机器人将删除它。我将机器人添加到一个组并在那里管理它。 bot 应该控制发送到组的消息,如果消息中有一个单词在 mlist 上,则 bot 应该删除该消息。我的代码:

# -*- coding: cp1256 -*-
#!/usr/bin/python
import os, sys
from telegram.ext import Filters
from telegram.ext import Updater, MessageHandler
import re

def delete_method(bot, update):
    if not update.message.text:
        print("it does not contain text")
        return

    mlist=['Hello', 'سلام']

    for i in mlist:
        if re.search(i, update.message.text):
            bot.delete_message(chat_id=update.message.chat_id,message_id=update.message.message_id)

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()

【问题讨论】:

  • 你能告诉我们为什么它不起作用吗?返回什么样的错误?
  • 你是否关闭了该机器人的隐私模式
  • @SmartManoj ;否
  • @91DarioDev; bot 应该在将 mlist 中的波斯语消息发送到组时删除消息,但它不会这样做,但如果 mlist 中的消息是拉丁文并将发送到组,则消息将被删除。 .完全没有错误
  • 编辑我的代码。

标签: python python-telegram-bot


【解决方案1】:
# -*- coding: utf8 -*-
#!python2
import time
import json 
import requests
#TOKEN = XXXXXX
URL = "https://api.telegram.org/bot{}/".format(TOKEN)

def get_updates(offset=None):
    url = URL + "getUpdates?timeout=100"
    if offset:url += "&offset={}".format(offset)
    return requests.get(url).json()


def get_last_update_id(updates):
    update_ids = []
    for update in updates["result"]:
        update_ids.append(int(update["update_id"]))
    return max(update_ids)

def delete_message(message_id, chat_id,msg):
    mlist=['Hello', 'سلام']
    url=URL + "deleteMessage?message_id={}&chat_id={}".format(message_id, chat_id)
    for i in mlist:
        if i in msg:request.get(url)

def echo_all(updates):
    for update in updates["result"]:
        cid = update["message"]["chat"]["id"]
        msg = update["message"].get("text")
        mid = update["message"].get("message_id")
        if msg:delete_message(mid,cid,msg)

def main():
    last_update_id = None
    while True:
        try:
            updates = get_updates(last_update_id)           
            z=updates.get("result")
            if z and len(z) > 0:
                last_update_id = get_last_update_id(updates) + 1
                echo_all(updates)
            time.sleep(0.5)
        except Exception as e:
            print(e)    

if __name__ == '__main__':
    main()

【讨论】:

  • ;发送到群组时bot不会删除سلام,但发送a时会被删除
  • @SmartManoj当问候发送到组时,机器人没有删除它,这给出了错误:'ascii' codec can't decode byte 0xd8 in position 0: ordinal not in range( 128)
  • 你的操作系统是什么?如果 Windows 更改编码,则更改 shebang
  • @SmartsManoj windows7 和 Python 2.7
  • @Sajjad 立即查看
猜你喜欢
  • 1970-01-01
  • 2017-06-30
  • 2017-08-18
  • 2019-10-14
  • 2017-05-21
  • 1970-01-01
  • 2017-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多