Telegram机器人的手机部署

目的

  • 一直有读 epub 电子书的习惯,摘录段落复制下来段落很难看,把自己写的排版器的逻辑复制下来,写成了一个排版机器人
  • 所有发给机器人的文字,都会经过排版,后转发到读书频道

前提

  • 本来最好方法是直接把机器人架在服务器上
    • 没钱,之前就折中放在自己笔记本电脑上开机运行
    • 开机运行还不起作用,所以都是自己手动启动
      • 此电脑 -> 管理 -> 计算机管理 -> 系统工具 -> 任务计划程序
      • 放置脚本在 C:\Users\<You>\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 目录下
      • 放置脚本在 C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp 目录下
      • 都不起作用……
  • 随身 Wifi 限速,连接 Telegram 需要科学上网,导致直接连不上
    • 行里不准拉宽带,说是被黑客黑过,于是总行禁止了全国的 WLAN 设备
  • 想到了部署在手机上

需求

  • 机器人手机部署,能随时开启和关闭

工具

  • 一台 Root 过的手机(Root 很重要,否则读取不了文件)
  • Termux 应用程序(代理软件需要放行 Termux,否则下不了软件包)
  • 写好的 Telegram Bot 程序代码(编译后版本,否则还要自己编译一遍)
  • 科学上网软件(黑名单模式)

步骤

  1. 拷贝 Telegram Bot 程序代码到 Termux 用户主目录任意文件夹下

  2. 准备运行环境

    • 本 Bot 使用 Grammy 框架,一个使用 JavaScript 写成的框架,所以需要下载 Node

    • # termux 也使用 apt
      apt install node
      npm install grammy
    • npm 下载有些慢,需要 Termux 也通过代理

  3. 开启调试环境(可选)

    • Grammy 设置一个环境变量即可看到 bot 的运行情况

    • export DEBUG="grammy*"
  4. 设置终端通过代理,否则 bot 发送的请求无法到达 Telegram 服务器

    • export http_proxy=<proxy-address>:<port>
      export https_proxy=<proxy-address>:<port>
  5. 运行即可

    • sudo -E node main.js
    • 一定要使用 sudo,否则 Android 系统禁止 Termux 自带的用户读取 /data/data/com.termux/files/home 下的文件

    • -E 携带当前的环境变量直接进入 sudo 的 root 环境,否则 node 使用 root 权限运行还是没有调试的环境变量,也就看不到调试信息,而且也不能通过代理

备注

  1. 代理软件一定要是黑名单模式
    • 黑名单模式默认其他程序为白名单,通过
    • 通过 Termux 程序启动的进程,是从 Android 系统 fork 出来的子进程,而该子进程因为不是手机里的 apk,没有包名,所以使用系统的代理
    • 如果代理软件使用白名单模式,相当于同时禁止了系统的代理权限,所以 Bot 一定连不上 Telegram 的 API
  2. 一定要设置终端的代理,并让程序启动时携带当前的环境变量:sudo -E
    • 最主要还是让终端启动的进程能够通过代理
  3. 如果还需要运行其他程序,可以在 tmux 或者 screen 等终端复用软件上运行

附录

简易启动脚本

# 设置 shell 脚本安全性
set -Eexuo pipefail
# 开启调试环境
export DEBUG="grammy*"
# 设置终端代理,需要更改为自己的代理地址和端口
export http_proxy=<proxy-address>:<port>
export https_proxy=<proxy-address>:<port>
# 运行程序,需要更改为自己的路径
sudo -E node main.js

启动 Log

~ $ ./run-bot.sh
allexport       off
braceexpand     on
emacs           off
errexit         on
errtrace        on
functrace       off
hashall         on
histexpand      off
history         off
ignoreeof       off
interactive-comments    on
keyword         off
monitor         off
noclobber       off
noexec          off
noglob          off
nolog           off
notify          off
nounset         on
onecmd          off
physical        off
pipefail        off
posix           off
privileged      off
verbose         off
vi              off
xtrace          on
++ export 'DEBUG=grammy*'
++ DEBUG='grammy*'
++ export http_proxy=<proxy-address>:<port>
++ http_proxy=<proxy-address>:<port>
++ export https_proxy=<proxy-address>:<port>
++ https_proxy=<proxy-address>:<port>
++ sudo -E node /data/data/com.termux/files/home/ChinesePassagesTypesetBotForTelegram/main.jsgrammy:bot Initializing bot +0msgrammy:core Calling getMe +0msgrammy:core Calling deleteWebhook +33ms
(node:30291) [DEP0040] DeprecationWarning: The punycode module is deprecated. Please use a userland alternative instead.
(Use node --trace-deprecation ... to show where the warning was created)grammy:bot I am TinySnowRebornBot! +3sgrammy:bot Starting simple long polling +0msgrammy:core Calling getUpdates +3sgrammy:core Calling getUpdates +31sgrammy:core Calling getUpdates +30sgrammy:bot Processing update 124801012 +15mgrammy:core Calling sendMessage +24sgrammy:core Calling getUpdates +1msgrammy:core Calling getUpdates +30sgrammy:bot Processing update 124801013 +2mgrammy:core Calling sendMessage +7sgrammy:core Calling getUpdates +0msgrammy:core Calling getUpdates +32sgrammy:core Calling getUpdates +30sgrammy:bot Processing update 124801014 +1mgrammy:core Calling sendMessage +27sgrammy:core Calling getUpdates +3msgrammy:bot Processing update 124801015 +28sgrammy:core Calling sendMessage +28sgrammy:core Calling getUpdates +2msgrammy:core Calling getUpdates +31sgrammy:core Calling getUpdates +31sgrammy:error HttpError: Network request for 'getUpdates' failed!grammy:error     at /data/data/com.termux/files/home/ChinesePassagesTypesetBotForTelegram/node_modules/grammy/out/core/error.js:85:15grammy:error     at process.processTicksAndRejections (node:internal/process/task_queues:105:5)grammy:error     at async ApiClient.call (/data/data/com.termux/files/home/ChinesePassagesTypesetBotForTelegram/node_modules/grammy/out/core/client.js:54:29)grammy:error     at async ApiClient.callApi (/data/data/com.termux/files/home/ChinesePassagesTypesetBotForTelegram/node_modules/grammy/out/core/client.js:86:22)
grammy:error     at async Bot.fetchUpdates (/data/data/com.termux/files/home/ChinesePassagesTypesetBotForTelegram/node_modules/grammy/out/bot.js:400:27)grammy:error     at async Bot.loop (/data/data/com.termux/files/home/ChinesePassagesTypesetBotForTelegram/node_modules/grammy/out/bot.js:375:29)grammy:error     at async Bot.start (/data/data/com.termux/files/home/ChinesePassagesTypesetBotForTelegram/node_modules/grammy/out/bot.js:314:9) +0msgrammy:error Call to getUpdates failed, retrying in 3 seconds ... +2msgrammy:core Calling getUpdates +16sgrammy:core Calling getUpdates +31sgrammy:core Calling getUpdates +30sgrammy:core Calling getUpdates +30sgrammy:core Calling getUpdates +30sgrammy:bot Processing update 124801016 +6mgrammy:core Calling sendMessage +22sgrammy:core Calling getUpdates +3msgrammy:core Calling getUpdates +32sgrammy:core Calling getUpdates +30sgrammy:core Calling getUpdates +30sgrammy:core Calling getUpdates +31sgrammy:core Calling getUpdates +30sgrammy:core Calling getUpdates +30sgrammy:core Calling getUpdates +31sgrammy:core Calling getUpdates +31sgrammy:bot Processing update 124801017 +5m
  • 只要没有 Error 就可以,Log 中的 Error 是因为当时网络断了
  • 如果在 grammy:core Calling deleteWebhook 这一步停留了太长时间,说明没有连接上 API 服务器

    本文由博客一文多发平台 OpenWrite 发布!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/57763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源呼叫中心系统与商业软件的对比

开源呼叫中心系统与商业软件的对比 作者&#xff1a;FreeIPCC 在当今的商业环境中&#xff0c;呼叫中心系统已成为企业与客户之间沟通的重要桥梁。而在选择呼叫中心系统时&#xff0c;企业面临着两种主要的选择&#xff1a;开源呼叫中心系统和商业软件。这两种系统各有其独特的…

各数据表字段的数据类型与相关属性应该如何设计?分类列出并说明原因

在设计数据库表字段的数据类型与相关属性时&#xff0c;可以根据不同的数据类型进行分类。以下是常见的数据类型及其相关属性的分类和说明&#xff1a; 数值型数据 整型 (INT, BIGINT, SMALLINT, TINYINT) 用途: 存储整数值。 原因: 整型适合存储计数、ID等不需要小数的数值&…

面试中的一个基本问题:如何在数据库中存储密码?

面试中的一个基本问题&#xff1a;如何在数据库中存储密码&#xff1f; 在安全面试中&#xff0c;“如何在数据库中存储密码&#xff1f;”是一个基础问题&#xff0c;但反映了应聘者对安全最佳实践的理解。以下是安全存储密码的最佳实践概述。 了解风险 存储密码必须安全&am…

【Java小白图文教程】-05-数组和排序算法详解

精品专题&#xff1a; 01.《C语言从不挂科到高绩点》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12753294.html?spm1001.2014.3001.5482 02. 《SpringBoot详细教程》课程详细笔记 https://blog.csdn.net/yueyehuguang/category_12789841.html?spm1001.20…

less和sass基本使用

变量 变量在LESS和SASS中都以符号定义&#xff0c;可以在全局范围内使用&#xff0c;也可以在局部范围内定义和使用。 LESS示例&#xff1a; primary-color: #3498db; padding: 15px;.article {background-color: primary-color;padding: padding; }SASS示例&#xff1a; $…

day02|计算机网络重难点之HTTP请求报文和响应报文

day02|计算机网络重难点之HTTP请求报文和响应报文 3.HTTP请求报文和响应报文是怎样的&#xff0c;有哪些常见的字段&#xff1f; 3.HTTP请求报文和响应报文是怎样的&#xff0c;有哪些常见的字段&#xff1f; HTTP请求报文主要是由 请求行、请求头部、空行和请求体 四部分组成…

电商平台店铺运营:巧用 API 接口的策略之道

一、商品管理策略 实时库存同步 通过 API 接口&#xff0c;将店铺的库存管理系统与电商平台连接起来&#xff0c;实现实时库存同步。这样可以避免超卖现象的发生&#xff0c;提高顾客满意度。当库存发生变化时&#xff0c;系统自动更新平台上的库存数量&#xff0c;确保信息的准…

Redis 发布订阅 总结

前言 相关系列 《Redis & 目录》&#xff08;持续更新&#xff09;《Redis & 发布订阅 & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Redis & 发布订阅 & 总结》&#xff08;学习总结/最新最准/持续更新&#xff09;《Redis &a…

ChatGPT的科研写作能力提升专题

在当今信息爆炸的时代&#xff0c;科研工作者不仅需要在各自的领域中产生高质量的研究成果&#xff0c;还需要面对大量文献阅读、写作和发表任务。为了应对这些挑战&#xff0c;越来越多的科研人员开始借助人工智能&#xff08;AI&#xff09;工具&#xff0c;而GPT&#xff08…

简单工厂(Simple Factory)

简单工厂&#xff08;Simple Factory&#xff09; 在创建一个对象时不向客户暴露内部细节&#xff0c;并提供一个创建对象的通用接口。 说明&#xff1a; 简单工厂把实例化的操作单独放到一个类中&#xff0c;这个类就成为简单工厂类&#xff0c;让简单工厂类来决定应该用哪…

supermall项目上拉加载bug分析

1.bug分析 bug出现的过程是这样的&#xff1a;better-scroll框架会计算滚动内容的高度(通过BScroll对象的scrollerHeight属性记录滚动内容的高度) 由于内容中的图片资源还未加载成功 就已经完成计算 导致计算结果错误 而计算之后 图片资源随之加载完成 这时候better-scroll框架…

《Python游戏编程入门》注-第2章2

《Python游戏编程入门》的“2.2.5 绘制线条”中提到了通过pygame库绘制线条的方法。 1 相关函数介绍 通过pygame.draw模块中的line()函数来绘制线条&#xff0c;该函数的格式如下所示。 line(surface, color, start_pos, end_pos, width1) -> Rect 其中&#xff0c;第一…

Go 语言中的 GOMAXPROCS

在 Go 语言中&#xff0c;GOMAXPROCS 是一个非常重要的设置&#xff0c;它决定了程序中可以同时运行的 goroutines 的数量。默认情况下&#xff0c;GOMAXPROCS 的值与机器的 CPU 核心数相同&#xff0c;这样可以充分利用多核 CPU 的并发处理能力。但是&#xff0c;在某些环境下…

UnityShader——基础篇之学习Shader所需的数学基础——下

裁剪空间 顶点接下来要从观察空间转换到裁剪空间&#xff08;也被称为齐次裁剪空间&#xff09; 中&#xff0c;这个用于变换的矩阵叫做裁剪矩阵&#xff0c;也被称为投影矩阵 裁剪空间的目标是能够方便地对渲染图元进行裁剪&#xff1a;完全位于这块空间内部的图元将会被保留&…

[deadlock]死锁导致的设备登录无响应问题

[deadlock]死锁导致的设备登录无响应问题 一、问题现象二、初步观察三、继续深挖查看netlink相关信息查看warnd进程栈 四、再接再厉查看warnd 用户栈 后记 一、问题现象 实验室一台压力测试设备突然无法登录&#xff0c;无论web页面&#xff0c;ssh或者telnet登录&#xff0c;…

[Redis] Redis数据持久化

&#x1f338;个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 &#x1f3f5;️热门专栏: &#x1f9ca; Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 &#x1f355; Collection与…

【设计模式系列】装饰器模式

目录 一、什么是装饰器模式 二、装饰器模式中的角色 三、装饰器模式的典型应用场景 四、装饰器模式在BufferedReader中的应用 一、什么是装饰器模式 装饰器模式是一种结构型设计模式&#xff0c;用于在不修改对象自身的基础上&#xff0c;通过创建一个或多个装饰类来给对象…

无人机之低空管控技术

无人机的低空管控技术是对低空飞行活动进行管理和控制的一系列措施和技术的总称&#xff0c;旨在确保低空飞行活动的安全、有序和高效。 一、主要技术手段 雷达系统监测 原理&#xff1a;雷达是利用电磁波探测目标的电子设备&#xff0c;通过发射电磁波对目标进行照射并接收…

【MySQL数据库】MySQL高级语句(SQL语句进阶版)

文章目录 SQL语句进阶版MySQL查询数据的过程一、连接与身份验证二、查询缓存&#xff08;MySQL 8.0之前版本&#xff09;三、查询解析与优化四、查询执行五、返回结果 MySQL语句准备环境创建 location 表并插入数据创建 store_info 表并插入数据查询示例 语句示例SELECTDISTINC…

数据结构与算法分析:你真的理解排序算法吗——计数排序(代码详解)

一、算法描述 一个会计师负责对一个小饭店的账本进行审核。每天晚上饭店打洋时&#xff0c;饭店主人记录白 天的总销售额&#xff0c;然后打印出有总额和日期的收据。这些收据存放在一个大盒子里面.每 年年终&#xff0c;会计师审核盒子中的这些收据&#xff0c;检查是否有的已…