1.部署docker版telegram-cli
在群晖内新建tg_cli文件夹,并在目录内新建 /app
文件夹。
例如我在docker文件夹内新建
感谢@云淡风轻近午天 提供telegram-cli的docker镜像。
在群晖docker中的注册表搜索tg_cli,双击下载 kukudemajia/tg_cli
,等待下载完毕。
镜像下载完毕,使用root账号登陆群晖ssh,执行以下命令创建容器。(其中的 8822
端口可自己定义,/volume1/docker/tg_cli/app
替换为上步新建的文件夹位置。)
docker run -d --name tg_cli --privileged=true -p 8822:22 -v /volume1/docker/tg_cli/app:/app kukudemajia/tg_cli:1.4.1
如下图就是创建成功
输入以下命令,进入容器
docker exec -it tg_cli /bin/sh
安装 cron
apt-get install cron -y
安装 vim
apt-get install vim -y
2.激活 TG API
访问 telegram 的 API申请网站(点击进入),输入TG的绑定手机号和验证码,点击登陆。
选择创建的application种类为app安卓等。
重要是获取 Public keys
,如下图,电脑端新建一个文件,然后把 Public keys
的全部内容复制进去并保存,命名为 Public-keys.pub
下载本站提供的msg.sh(下载链接),把 Public-keys.pub
与 msg.sh
一并上传到第一步创建的 app
文件夹内
测试TG登陆,打开容器,终端机,新建通过命令启动,输入 /bin/sh
启动,进入sh终端后输入
/usr/local/share/tg/bin/telegram-cli -k /app/Public-keys.pub
会提示输入TG绑定手机号和验证码,登录完毕后可以输入名令 quit
或 safe_quit
退出。
3.通过cron设置定时发送信息
如果上步测试登陆没有问题,就可以使用命令发送信息了
比如按照这个格式执行发送内容
bash /app/msg.sh 昵称或@用户名 内容
例如 给一位昵称 VAY
,用户名为 VAY1314
,发送内容为 test
的消息,那命令如下
bash /app/msg.sh VAY或@VAY1314 test
(注:如昵称中含有空格请用_符号替换,如V A需写成V_A)
定时执行就可以使用crontabs计划任务,
在上步进入的终端机中,输入下方命令,进入crontabs文件,编写计划任务
(注:
进入编辑模式:打开crontabs后,按 i
进入编辑模式。
退出并保存:先按 esc
退出编辑模式,再输入 :wq
保存编写的cron。)
crontab -e
比如在crontabs写入命令,就是在 每天上午10点30分
给VAY发送“/help”消息。
30 10 * * * bash /app/msg.sh VAY /help
更多的cron表达式写法也可参照我写的CRON表达式白话版简要说明
原创文章,作者:VAY冬冬,如若转载,请注明出处:https://blog.vay1314.top/archives/158
支持,不错 冬佬晚上好滴!学生卡!打卡时间:上午12:25:49,请上车的乘客系好安全带~
大佬好
冬佬,这个如果我群晖强制不走代理,能否自动提交tg?
需要代理啊,不代理你TG怎么连的上服务器
谢谢大佬~~学习了~
另外有个小错误
```
bash /app/msg.sh VAY /help
```
用户名`vay`前面要加`@`
应该改成
bash /app/msg.sh @VAY /help
滴!学生卡!打卡时间:上午12:55:58,请上车的乘客系好安全带~
我测试不加@也行,我稍后修改下文章备注上
那可能是可以选择`昵称`或者`@用户名`
因为机器人的昵称有空格,所以我用@用户名才发送成功
是的,昵称有空格用_代替,我一直用的昵称。
冬佬,这个教程第一部分crontabs到底是什么格式文件?如何建立?不懂啊,一直卡在这里,能否更新详细点教程,还有如何映射等问题。
不需要映射crontab了,在ssh内部编辑吧
没有给登录账户赋予权限 只能root账户 输入命令
没有给登录账户赋予权限 只能root账户 输入命令
抱歉 搞错了。。。。麻烦博主删掉吧OωO
冬佬,可以一次发送多条消息吗?
冬佬,可以一次发送多条消息吗?
应该可以,编辑sh中的发送命令,自行测试下。
谢谢,弄了一下终于成功了~不过有个地方要注意:手机号码前面要加一个+86,比如号码是13333333333的,输入号码应该是+86 13333333333,注意86和号码之间有空格,最后的命令应该是crontab -e,没有s哈,十分感谢
手机号输入86手机号就可以,那个步骤截图我修改下。感谢反馈cron书写错误
冬佬,消息内容有空格怎么处理?jd助力码里面有空格,如果有空格,空格后面的内容都没发出去
msh.sh我定义的变量就两个,所以你多个空格后会被认为都是变量,但程序就只认前两个所以后面的发不出去。你可以直接修改sh文件,直接在sh中写死发送内容,然后在cron直接调用sh即可。
冬佬,cron可以设置具体到秒吗?我怎么进去crontab -e设置上边说明只到分
5位的cron就到分,如果只是简单的加上秒可以使用sleep延迟下。
测试时总是出现这个> FAIL: 38: can not parse arg #1
然后退出
测试时总是出现这个> FAIL: 38: can not parse arg #1
然后退出
确认昵称或@用户名无误,昵称中空格必须用下划线_代替。
bash /app/msg.sh @TuringLabbot test,应该不错啊,直接从tg复制的
先测试下不用脚本,/usr/local/share/tg/bin/telegram-cli -k /app/Public-keys.pub登陆后使用msg @ 用户名 发送的消息 测试下
用博主刚发的命令不停的在刷新消息,就是没有向指定联系人发送测试消息。加入-e的参数就会很快跳出报错FAIL: 38: can not parse arg #1
/usr/local/share/tg/bin/telegram-cli -k /app/Public-keys.pub这个命令是登录命令,登录后如果你TG里消息很多是会刷新。登录后使用msg @ 用户名 发送的消息 测试
root@89ac88f3cfcf:/app# /usr/local/share/tg/bin/telegram-cli -k /app/Public-keys.pub -
W -e msg Turing_Lab_Bot test
change_user_group: can't find the user telegramd to switch to
Telegram-cli version 1.4.1, Copyright (C) 2013-2015 Vitaly Valtman
Telegram-cli comes with ABSOLUTELY NO WARRANTY; for details type `show_license'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show_license' for details.
Telegram-cli uses libtgl version 2.1.0
Telegram-cli includes software developed by the OpenSSL Project
for use in the OpenSSL Toolkit. (http://www.openssl.org/)
I: config dir=[/root/.telegram-cli]
这是不是就可以自动提交互助码了🌝🌝🌝
原理可以,但cli其实有些大,有研究的精神可以看下telethon
[secret] 这个占用挺大的,同时telethon 会导致失败
[/secret]
大佬 ,你第二张图片 直接生成 crontab文件怎么弄的,我的需要进入容器才能修改很麻烦
当时我映射出来了,但发现直接修改容易有权限问题,在博文就没说了
FAIL: 38: can not parse arg #1
大佬,这段时间报错38是什么原因啊
之前正常吗?检查收信人的昵称或用户名是不是有错的
应该不错啊,前段时间刚弄好的时候可以的,现在的话运行同样的发送助力码脚本大部分错误38,只有一两个可以发送
那就不清楚了,我只有碰上用户名错误时是这个提示,我稍后会更新python的Telethon的使用博文,那个也可以发送TG消息,你可以关注下
那个是用数字id发送消息的吧,之前看过就是不会用,请问博主出的是docker下的教程吗
不是,就是简单的使用用户名发送消息。是py程序,可放在任何有PY环境的地方运行
哦,就是和藏经阁现在发的监控脚本差不多的吗
类似,实现的只是给指定用户发送TG消息
感谢大佬解答
不支持6位cron吗?
秒不支持啊,现在上车要精确到秒了
cron不支持6位,可以自行增加延时或者自己写sh判断时间
冬佬,为啥我登录的时候没有提示输入手机号呢?直接到到命令行界面了,可以输入help查看命令,但是不能发消息之类的。应该是没有登录的,进去的时候都没提示输入手机号,试了很多次都不行……
网络是否有代理,检查下容器是否能过墙
有代理的,测试curl -I http://www.google.com有正常返回
宿主机和docker都配置了http代理,可以正常翻墙的,curl -I http://www.google.com返回状态码200,就是执行命令的不给telegram的登录提示
那不应该啊,你curl下tg的网址呢。
测试时总是出现这个> FAIL: 38: can not parse arg #1
然后退出
我发信息的时候也是这个提示,什么问题冬佬
登陆没问题
cli是有这个问题,排除代理或者发送信息过长,你也可以使用py模块更稳定发送也更快。我也写了个简单教程https://blog.vay1314.top/archives/211.html
找到解决办法了
第一次登录到 telegram-cli 后,直接给某个对象发送消息会提示:error FAIL: 38: can not parse arg #1,但是我的用户名写的是没问题的。这时候需要首先执行一下 dialog_list 会输出当前登录账户的会话列表,可以看到每个会话的对象名称,这时候就可以正常通过使用对象名称或者 @username 来发送消息了。
建议执行时加上 -W参数以加载 dialog 列表,否则可能出现报警:error FAIL: 38: can not parse arg #1:
telegram-cli -W -e "msg @username message"
新的问题,定时任务设置好了,但是好像不按定时时间执行。
是cron没有运行还是cron执行错误?装个rsyslog ,查看下cron log
我去,不能定时的问题都是群晖docker版本低,要官网下载最新的docker安装,群晖不推送新版
是吗?我之前测试时cron无问题啊。
问题就出在那个高权限命令,--privileged=true,不加这个发信息都正常,定时任务不执行,谷歌发现是真root权限问题,加了直接所有容器一重启就api错误,最后把docker套件都玩崩了。群晖默认docker版本太老,最后死马当活马医,发现官网有新docker套件,更新后所有问题全解决了。
另外error FAIL: 38: can not parse arg #1,的问题配置好后用手机端先发个信息给相应的用户就可以解决
冬佬,我想随机时间发TG信息可以吗?有的鸡场开始判断机器人签到了,我怀疑是根据时间判断,想随机。有办法实现吗?麻烦了
可以啊,在sh中增加sleep延迟,用$RANDOM获取随机数
能举个例子吗?
30 8 * * * * sleep $[RANDOM\%90]m ; bash /app/msg.sh 昵称或@用户名 内容,90分钟内随机的意思?
可我试了实际没随机啊
不在cron内写,在sh中写入命令
随机任务搞定,多谢
hi 请问用手机号登录 不论是 +861234567 还是 +86 1243253253 还是 +86 124 2435 3432 都报错:
*** 1638937561.735690 Notification API_64BIT_LOGIN_APP_OUTDATED_61: You are using an outdated app that is no longer supported. To access your messages, please update your app to the latest version. If you don’t know how to update your app, go to https://telegram.org/dl
*** 1638937561.735976 error for query 'send code' #7039183224485282816: #400 UPDATE_APP_TO_LOGIN
*** 1638937561.736023 Incorrect phone number
有人遇到不? 怎么解决呢
这个是Telegram-cli 问题,先更换其他程序使用吧
有其他的telegram cli工具推荐吗.. 网上找了很久都是这一个.
我目前使用的Telethon,是python的一个库。https://blog.vay1314.top/archives/211.html