使用 telethon 来定时发送消息

今天介绍一个 python 库 —— telethon,使用它我们可以在 Linux 服务器上登录 telegram,可以获取群消息、联系人,以及今天要重点介绍的自动发送消息。

更多的内容可以查看官方文档:https://docs.telethon.dev/en/latest/

1、安装

首先需要有 python 环境,我这里在 Ubuntu 服务器上面演示的,我用的是 python3

pip3 install telethon

安装成功后可以通过执行下面这个来检查

python3 -c "import telethon; print(telethon.__version__)"

我目前装的版本是 1.21.1

2、

之后来到浏览器,需要申请 API

https://my.telegram.org/auth?to=apps

2021-06-02_22-00-41

填写自己的手机号,前面的 + 我是有填的,不知道不填行不行。点击 next 按钮后我们的 telegram 客户端就会收到一条验证消息,验证码是英文字母,还挺长的。

之后需要创建一个 application ,要填的就是 App title 和 Short name 这两个而已,主要只能 英文字母和数字 ,不可以用下划线,并且要在 5-32 个字符之间。可以参考这么填。

App title: firstApp
Short name: 12345

完成后可以看到 api_id、api_hash 这两个,把它们保存下来。需要将它们填写到下面的脚本里。

3、

from telethon import TelegramClient

# Use your own values from my.telegram.org
api_id = 12345
api_hash = '0123456789abcdef0123456789abcdef'

# The first parameter is the .session file name (absolute paths allowed)
with TelegramClient('anon', api_id, api_hash) as client:
client.loop.run_until_complete(client.send_message('me', 'Hello, myself!'))

完成后保存,例如我这里保存为 tele-test.py ,然后通过 python3 tele-test.py 来执行这个脚本。它会让我们输入手机号码,因为这是我们第一次在陌生的设备上登录,之后在 telegram 客户端里我们会收到一个验证码,输入后就可以登录了。(此处手机号前面的 + 我就没填了)

Please enter your phone (or bot token): 123456789
Please enter the code you received: 11631
Signed in successfully as powersee

那么这样我们在服务器上面登录了,并且此时也已经成功地发送了一条消息。就是给 me 这个用户发送 Hello, myself! 这条消息。其实就是将这句话,保存到 “保存的消息”里面而已。如果你想发送给其他人,以及修改内容,就修改一下脚本的内容就行。

里面的 anon 是缓存的密钥,第一次执行脚本后,我们输出手机号和验证码,完成后脚本所在文件夹就会出现一个 anon.session 文件,下次再执行这个脚本就不用输入手机号验证了。你可以将它移动到其它地方,但是记得也修改一下脚本里的内容,如将 acon 改为 /opt/acon

4、

然后想要实现定时执行的话,需要用到 crontab ,可以轻松实现每天定时发送消息给某个用户。

如果想让发送时间有些变化的话,可以在 python 里面加入 time 和 random

import time
import random
time.sleep(random.randint(5,200))

这样会随机暂停 5 到 200 秒,因此每次发送消息的时间就不同了。