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

我希望能够向 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”变量:这将是一条 100/200 个字符的消息,从 python 脚本内部定义。

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

【问题讨论】:

  • 你有没有从 python 中找到一种方法来做到这一点?

标签: python linux shell python-2.7 telegram


【解决方案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(无):不允许操作
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-12-28
        • 1970-01-01
        • 2021-07-06
        • 1970-01-01
        • 2023-03-23
        • 1970-01-01
        • 2016-05-09
        相关资源
        最近更新 更多