利用vps+python自动签到telegram机器人拿积分

在新的 Debian VPS 上:

更新系统

apt update && apt upgrade -y

安装 Python3、pip、虚拟环境

apt install -y python3 python3-pip python3-venv

2️⃣ 创建 Python 虚拟环境

创建虚拟环境

python3 -m venv ~/tg_env

激活虚拟环境

source ~/tg_env/bin/activate

安装 Telethon

pip install telethon

===============================================================================================
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
注意::::::有些 VPS 或系统环境允许直接安装 Python 和 pip,全局使用,无需虚拟环境。
1️⃣ 全局安装 Python 和 Telethon

在 Debian/Ubuntu 系统上:

更新系统

apt update && apt upgrade -y

安装 Python3 和 pip

apt install -y python3 python3-pip

安装 Telethon

pip3 install telethon

注意:如果系统启用了 PEP 668(Debian/Ubuntu 未来版本默认开启),你可能需要加 --break-system-packages 才能用 pip3 安装:

pip3 install --break-system-packages telethon

2️⃣ 使用 Python 脚本生成 session

你可以直接在全局 Python 下运行脚本:

python3 generate_session.py

session 文件会在当前目录生成

不需要激活虚拟环境

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&

3️⃣ 准备 session 文件
https://my.telegram.org/auth?to=apps
需要家宽申请tg的api
得到api_id = 123456
api_hash = "159e5sdfdsfsfsdfsafs" 保存好以后有用

vps上建个login_xxx.py文件

from telethon import TelegramClient

api_id = 123456
api_hash = "159e5sdfdsfsfsdfsafs"
phone = "+号码"

client = TelegramClient(f"session_{phone}", api_id, api_hash)
client.start(phone)  # 输入验证码(发到官方 Telegram 客户端)
print(f"{phone} ✅ 登录成功")
client.disconnect()

4️⃣ 创建签到脚本 multi_checkin.py

路径建议:/root/multi_checkin.py

运行

python ~/login_xxx.py

手机端或电脑端接受登录码,也就是是用py脚本登陆
生成session_xxxxxxx.session 文件,保存好,下次登陆无需登录码,换个vps也可用

import asyncio
from telethon import TelegramClient
from datetime import datetime
import os

# 账号配置示例
accounts = [
    {
        "session": "./tg_sessions/session_+1111111111",
        "api_id": 123456,
        "api_hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    },
    {
        "session": "./tg_sessions/session_+2222222222",
        "api_id": 234567,
        "api_hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    }
]
# 机器人和对应签到命令示例
bots_to_checkin = {
    "ExampleBot1": "/checkin",
    "ExampleBot2": "/sign"
}

log_file = "./checkin.log"

def write_log(msg: str):
    with open(log_file, "a", encoding="utf-8") as f:
        f.write(f"{datetime.now().strftime('%Y-%m-%d %H:%M:%S')} - {msg}\n")

async def checkin_all(client):
    for bot, cmd in bots_to_checkin.items():
        try:
            await client.send_message(bot, cmd)
            await asyncio.sleep(3)  # 等机器人回复
            messages = await client.get_messages(bot, limit=1)
            if messages:
                msg = f"{client.session.filename} 对 {bot} 签到结果: {messages[0].text}"
                print(f"✅ {msg}")
                write_log(msg)
            else:
                msg = f"{client.session.filename} 对 {bot} 未收到签到回复"
                print(f"❌ {msg}")
                write_log(msg)
        except Exception as e:
            msg = f"{client.session.filename} 对 {bot} 签到失败: {e}"
            print(f"❌ {msg}")
            write_log(msg)
        await asyncio.sleep(3)  # 每个机器人间隔 3 秒

async def main():
    for acc in accounts:
        client = TelegramClient(acc["session"], acc["api_id"], acc["api_hash"])
        await client.start()
        if await client.is_user_authorized():
            await checkin_all(client)
            print("⏳ 等待120秒后签到下一个账号…")
            await asyncio.sleep(120)  # 账号间隔 120 秒
        else:
            msg = f"{acc['session']} 未登录,需要重新生成 session"
            print(f"⚠️ {msg}")
            write_log(msg)
        await client.disconnect()

if __name__ == "__main__":
    os.makedirs(os.path.dirname(log_file), exist_ok=True)
    asyncio.run(main())

5️⃣ 测试运行

source ~/tg_env/bin/activate
python ~/multi_checkin.py

检查是否顺利签到所有账号和机器人

查看日志:

tail -f /root/checkin.log

6️⃣ 配置 Cron 定时任务
crontab -e

添加每天 22:43 自动签到:

43 22 * * * bash -c "source /root/tg_env/bin/activate && python /root/multi_checkin.py >> /root/checkin_cron.log 2>&1"

日志会写入 /root/checkin_cron.log

脚本内账号或机器人更新,无需修改 cron。

7️⃣ 注意事项

Session 文件:每个账号必须有对应 session,否则需要重新生成

机器人名字:字典键不需要 @,值是签到命令

日志:签到结果和异常都会记录到 checkin.log

间隔:账号间隔 120 秒,机器人间隔 3 秒

扩展:增加机器人只需在 bots_to_checkin 添加键值对