0%

Telegram Bot API

最近发现了一个很有意思的东西,就是 Telegram Bot API,不知道什么时候添加了一个 Using a Local Bot API Server 的功能,可以自己搭建一个 Telegram Bot API 的服务器,实现发大文件2G的功能,官方bot发文件有50兆的限制。

使用

  1. 编译 bot api server

  2. 运行需要先去官网 ,登录后,点API development tools可以看到你的api-id和api-hash,这个要记下来,留在后面备用。

  3. 启动 bot api server telegram-bot-api --api-id=<arg> --api-hash=<arg> --local -l /var/logs/tgserver.log -v 3

  4. 发送文件,这里直接发送文件而不是先上传到你本地server。curl -v -F chat_id="<chat_id>" -F video="file://</home/hd/my.mp4>" -F supports_streaming=true -F caption="my.mp4" http://localhost:8081/bot<token>/sendVideo,如果你想调分辨率需要设置 height 和 width 参数,具体参数可以看这里

  5. 仔细看返回信息

    *   Trying 127.0.0.1...
    * TCP_NODELAY set
    * Connected to localhost (127.0.0.1) port 8081 (#0)
    > POST /bot<you_token>/sendVideo HTTP/1.1
    > Host: localhost:8081
    > User-Agent: curl/7.64.1
    > Accept: */*
    > Content-Length: 558
    > Content-Type: multipart/form-data; boundary=------------------------f7dec8eebe228600
    >
    * We are completely uploaded and fine

    这就说明,local server直接从本地取文件发送了。你可以tail下log,看到它在后台正在使劲的发送中。

    tail -F tgserver.log 

问题

主要问题出现在编译上,macOS 倒是很顺利,用了十多分钟;但是我的vps配置太低,编译速度太慢而且内存太低所以遇到了下面两个问题。

c++: internal compiler error: Killed (program cc1plus)

这个一搜索直接找到就是内存不够,开始我增加了2g的swap还是不够,最后索性增加了4g的swap,然后就编译成功了。

增加swap

#可以通过临时使用交换分区来解决:

sudo dd if=/dev/zero of=/swapfile bs=64M count=16
#count的大小就是增加的swap空间的大小,64M是块大小,所以空间大小是bs*count=1024MB
sudo mkswap /swapfile #把刚才空间格式化成swap格式
sudo swapon /swapfile #使用刚才创建的swap空间

#在编译完成后,最好可以关闭(释放)交换空间
sudo swapoff /swapfile
sudo rm /swapfile

client_loop: send disconnect: Broken pipe

因为本身配置低,导致命令执行时间太长,所以会出现这个问题,选择用screen命令,然后在后台执行,然后就可以了。

screen

好像还有个tmux可以解决这类问题,但是之前用过screen,所以用screen。但是之前一直没有总结,现在有gpt了,就顺便总结下。

使用 screen 可以创建一个持久性的终端会话,使您可以在后台运行长时间运行的命令,即使连接中断也可以重新连接到该会话并恢复该命令的运行。下面是如何使用 screen 的步骤:

打开终端并连接到您的 VPS。
在终端中输入以下命令以启动一个新的 screen 会话:

screen 
# or
screen -S <会话ID>

现在您已经进入了一个新的 screen 会话。在这个会话中,您可以执行您想要在后台运行的命令。
在 screen 会话中,您可以使用以下命令将当前会话放入后台运行:

Ctrl + A + D

这将使当前 screen 会话放入后台,并返回到您的原始终端会话。
要恢复到 screen 会话中,您可以使用以下命令:

screen -r

如果您有多个 screen 会话,则可以使用以下命令恢复到特定的会话:php

screen -r <会话ID>

您可以使用 screen -ls 命令查看所有的 screen 会话及其会话ID。
如果您需要完全退出 screen 会话,可以在会话中执行以下命令:

exit

或者,在您使用 Ctrl + A + D 将会话放入后台后,您可以在原始终端中执行以下命令来彻底关闭该会话:

screen -X -S <会话ID> quit

这是使用 screen 的基本操作。screen 提供了很多其他功能,如分屏、会话共享等。您可以使用 man screen 命令查看 screen 的完整文档。

参考

Telegram Bot API Server作弊条
Choose an operating system on which you want to use the Telegram Bot API server