使用 Telegram - API 或 CLI 发送消息?

Posted

技术标签:

【中文标题】使用 Telegram - API 或 CLI 发送消息?【英文标题】:Sending messages with Telegram - APIs or CLI? 【发布时间】:2014-08-11 10:15:10 【问题描述】:

我希望能够向 Telegram 中的群聊发送消息。我想运行一个 python 脚本(它可以进行一些已经可以运行的操作),然后,如果某些参数有一些值,该脚本应该通过 Telegram 向群聊发送一条消息。我正在使用 Ubuntu 和 Python 2.7

我认为,如果我没记错的话,我有两种方法可以做到这一点:

方法一:让 Python 脚本直接连接到 Telegram API 并发送消息 (https://core.telegram.org/api)。

方法二:让 Python 脚本调用 Telegram 的 CLI (https://github.com/vysheng/tg),将一些值传递给它,然后由 Telegram 的 CLI 发送消息。

我认为第一种方式更长,所以一个好主意可能是使用方式二。

在这种情况下,我真的不知道如何进行。 我不太了解 linux 中的脚本,但我尝试过这样做:

#!/bin/bash
cd /home/username/tg
echo "msg user#******** messagehere" | ./telegram
sleep 10
echo "quit" | ./telegram

这工作了一半:它正确发送消息,但随后进程保持打开状态。第二个问题,我不知道如何从 python 调用它以及如何将一些值传递给这个脚本。我想传递给脚本的值是“messagehere”变量:这将是一条 100/200 个字符的消息,从 python 脚本内部定义。

有人对此有任何线索吗? 感谢您的回复,我希望这可能对其他人有用。

【问题讨论】:

你有没有从 python 中找到一种方法来做到这一点? 【参考方案1】:

我会推荐第一个选项。

一旦您对生成 AuthKey 感到满意,您就应该开始掌握文档了。

为了提供帮助,我编写了详细的分步指南,说明我如何从头开始编写 AuthKey 生成代码 here。

它在 vb.net 中,但这些步骤应该可以帮助您在 python 中做同样的事情。

【讨论】:

【参考方案2】:

Telegram 最近发布了他们的新 Bot API,这使得发送/接收消息变得微不足道。我建议您也看看它,看看它是否符合您的需求,它胜过包装客户端库或与他们的 MTProto API 集成。

import urllib
import urllib2

# Generate a bot ID here: https://core.telegram.org/bots#botfather
bot_id = "YOUR_BOT_ID"

# Request latest messages
result = urllib2.urlopen("https://api.telegram.org/bot" + bot_id + "/getUpdates").read()
print result

# Send a message to a chat room (chat room ID retrieved from getUpdates)
result = urllib2.urlopen("https://api.telegram.org/bot" + bot_id + "/sendMessage", urllib.urlencode( "chat_id": 0, "text": 'my message' )).read()
print result

不幸的是,我还没有看到任何可以直接与之交互的 Python 库,但这里有一个 NodeJS 等价物供我参考。

【讨论】:

这个链接可能会回答这个问题,但是你能提供比仅仅链接到 API 更多的上下文吗?也许是关于如何设置 API 和发送消息的小 sn-p? 我用一些 Python 示例更新了答案。我在 NodeJS 中使用 API,但示例代码应该可以正常工作。 非常感谢!我现在通过 github.com/leonjza/hogar 使用他们的 Bot API,它要简单得多!【参考方案3】:

从 1.05 版开始,您可以使用 -P 选项来接受来自套接字的消息,这是解决问题的第三个选项。抱歉,这不是您问题的真正答案,但我无法评论您的问题,因为我没有足够的声誉。

【讨论】:

【参考方案4】:

我正在使用 pytg,可以在这里找到: A Python package that wraps around Telegram messenger CLI

效果很好。我已经有一个基于该项目的 python 机器人

【讨论】:

仅供参考:它被称为pytg,可通过pip install pytg安装【参考方案5】:

您可以使用safe_quit 来终止连接,因为它会等到一切都完成后再关闭连接并终止应用程序

#!/bin/bash
cd /home/username/tg
echo "msg user#******** messagehere\nsafe_quit\n" | ./telegram

将其用作一个简单的脚本,并按照其他答案的建议从 python 代码中调用它。

【讨论】:

【参考方案6】:

首先为电报创建一个名为 tg.sh 的bash script:

#!/bin/bash
now=$(date)
to=$1
subject=$2
body=$3
tgpath=/home/youruser/tg
LOGFILE="/home/youruser/tg.log"
cd $tgpath
$tgpath/telegram -k $tgpath/tg-server.pub -W <<EOF
msg $to $subject
safe_quit
EOF
echo "$now Recipient=$to Message=$subject" >> $LOGFILE
echo "Finished" >> $LOGFILE

然后将脚本放在与你的python脚本相同的文件夹中,并用chmod +x tg.sh给它+x权限

最后在 python 中,你可以这样做:

import subprocess
subprocess.call(["./tg.sh", "user#****", "message here"])

【讨论】:

它不起作用,并且出现此错误:[警告] fd 0 上的 Epoll ADD(1) 失败。旧事件为 0;读取更改为 1(添加);写入更改为 0(无):不允许操作

以上是关于使用 Telegram - API 或 CLI 发送消息?的主要内容,如果未能解决你的问题,请参考以下文章

通过 API 自动将消息发布到 Telegram 频道

如何下载发送到我的 Telegram 机器人的文件或照片?

如何与 Telegram API 交互

如何使用 Telegram API 接收图像?

使用 Java 桌面应用程序的 Telegram API?

使用 Express、Socket.io 和 Node-Telegram-Bot-Api 结束 Mocha 测试