linux 使用Telegram发送消息-API还是CLI?

zvms9eto  于 2023-06-05  发布在  Linux
关注(0)|答案(7)|浏览(784)

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

我认为第一种方法更长,所以一个好主意可能是使用第二种方法。
在这种情况下,我真的不知道如何继续下去。我不太了解linux的脚本,但我试着这样做:

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

这在一半的工作:它正确地发送消息,但随后进程保持打开。第二个问题,我不知道如何从Python调用它,以及如何向这个脚本传递一些值。我想传递给脚本的值是“messagehere”var:这将是从Python脚本内部定义的100/200个字符的消息。
有人知道这方面的线索吗?谢谢你的回复,我希望这对其他人有用。

roejwanj

roejwanj1#

Telegram最近发布了他们的新Bot API,这使得发送/接收消息变得微不足道。我建议你也看看它,看看它是否符合你的需要,它比 Package 客户端库或与他们的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等效库供参考。

n1bvdmb6

n1bvdmb62#

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

nkkqxpd9

nkkqxpd93#

首先为telegram创建一个名为www.example.com的bash scripttg.sh:

#!/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"])
rjee0c15

rjee0c154#

我正在使用pytg,可以在这里找到:A Python package that wraps around Telegram messenger CLI
效果很好。我已经有了一个基于那个项目的Python机器人

x3naxklr

x3naxklr5#

您可以使用safe_quit来终止连接,因为它会等到所有事情都完成后才关闭连接并终止应用程序

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

使用这个作为一个简单的脚本,并从python代码调用它作为另一个答案建议。

lmvvr0a8

lmvvr0a86#

我推荐第一种选择。
一旦您熟悉了生成AuthKey,您就应该开始掌握文档。
为了提供帮助,我写了一个详细的分步指南,介绍如何从头开始编写AuthKey生成代码here
它在www.example.com中vb.net,但是这些步骤应该可以帮助你在python中做同样的事情。

czq61nw1

czq61nw17#

在这里,我将@ChrisBrand非常方便和最小的答案移植到了Python 3中,它在Python 2中工作。原来的版本也不能开箱即用,所以我自动提取了一个适当的chat-id参数,它允许您对阅读的第一条消息的发件人进行响应。请注意,如果您到目前为止还没有收到任何消息,则此操作将失败。
最后,我从环境中读取了bot_id,这样它就不会出现在任何源代码中。要使用它,至少在Linux上,首先执行export TELEGRAM_TOKEN=<value via botfather>

import os
import json
from urllib.request import urlopen
from urllib.parse import urlencode

# Generate a bot ID here: https://core.telegram.org/bots#botfather
bot_id = os.getenv('TELEGRAM_TOKEN')

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

# Extract the chat-id for replying to the first message provided.
chat_id = json.loads(result)["result"][0]["message"]["from"]["id"]

# Send a message back 
result = urlopen(f"https://api.telegram.org/bot{bot_id}/sendMessage", urlencode({ "chat_id": chat_id, "text": 'my message' }).encode('utf-8')).read()
print(result)

相关问题