从Python发送电报消息

2024-05-13 20:23:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过电报从Python脚本发送一条消息。 我试图通过telegram cli来实现这一点,包括original version from vyshengpatched version from luckydonald。有了它们,我可以成功地给手机发送信息。 我的问题是:

  • pytg2没有完全安装(import DictObject失败,显然作者在pypi上单独安装了这个,但我在那一点上停止了),需要Python 3(与我的项目的其他部分不同,但是是半可接受的),并且可以做的比我需要的多得多。
  • 我无法获得tg控制台环境的输入,然后在那里执行。通过<<EOF ... EOF输入失败;程序在控制台上打开,但不输出任何内容。
  • 通过-p选项打开端口成功。然后,我可以在nc环境中操作(类似于tg wiki),但我不确定在Python脚本中实现所有这些调用是否明智。

  • 我还发现了另一个脚本,它将命令回显到tg中(忘记源代码),但它也不起作用(类似于上面的<<EOF

    #!/bin/bash
    to=Matthias_SG
    msg="test message"
    tgpath=/home/matthias/dvl/tg
    cd ${tgpath}
    (echo "add_contact +xxx Matthias SG"; echo "msg $to $msg") | ${tgpath}/bin/telegram-cli -k tg-server.pub
    

所以我的问题是: 我是不是该回老皮格家去?我可以通过从subprocess.call或popen输入stringIO来修复shell脚本或将它们修改为Python吗?有人在外面用这个吗?

背景


Tags: tofrom脚本消息clibin环境version
3条回答

我认为使用特定的包来制作一个Telegram bot是一个坏主意;您必须保持它们的更新,它们可能不会像您希望的那样工作,除非它们正常工作,而且如果API的一部分发生了更改,而模块没有更新,可能会发生奇怪的事情。

对我来说,真正有效的是使用基本模块和自己生成所有命令。不过,一开始需要更多的时间。

看看this website,它们向您展示了使用jsonrequests创建bot的基础知识。他们写代码的方式给了你很大的自由。

通过使用简单的模块,您将获得保修;您需要的任何文档或帮助将直接从Telegram获得。

第一步是创建一个bot并获取token

第二步是获取chat_id

  • 在聊天中写点东西
  • 访问https://api.telegram.org/bot<YourBOTToken>/getUpdates,在message['chat']['id']键下获取chat_id

最后一步是使用以下代码:

import requests

def telegram_bot_sendtext(bot_message):

   bot_token = ''
   bot_chatID = ''
   send_text = 'https://api.telegram.org/bot' + bot_token + '/sendMessage?chat_id=' + bot_chatID + '&parse_mode=Markdown&text=' + bot_message

   response = requests.get(send_text)

   return response.json()


test = telegram_bot_sendtext("Testing Telegram bot")
print(test)

Medium.com: How to create a Telegram bot, and send messages with Python提取的代码

我宁愿使用这个包,它对我很好。

您可以找到here文档和一个简单的示例。

为了回复文本消息,可以在CommandHandler之后添加一个MessageHandler,例如:

updater.dispatcher.add_handler(MessageHandler(Filters.text, text_reply))

def text_reply(bot, updater):
    text = update.message.text

    if text == 'ping':
        reply = 'pong'

    elif text == 'pong':
        reply = 'ping'

    # add any process to the text

    else:
        reply = "I only respond to ping pong"

    update.message.reply_text(reply)

别忘了导入from telegram.ext import MessageHandler

希望这有帮助!

相关问题 更多 >