前言

最近加入了一个TG群,群内有个机器人可以每天签到累计积分,想使用自动化签到省时省心,但签到时机器人会返回算数验证。在谷歌搜索了下找到一篇文章,参考文章《telegram-自动签到》,使用作者的部分代码,感谢原作者。

源码

一.运行环境

1.python-telegram库

pip install python-telegram

2.TDLib环境

python-telegram作者提供了他构建的TDLib文件,下载地址:libtdjson.so

如果使用上面的TDLib不正常,可以自行构建,使用TDLib 构建指令生成器,按自己的系统环境选择,创建构建的命令。

二.撸代码

#coding=UTF-8
from telegram.client import Telegram
import re,time

tg = Telegram(
    api_id='xxx',
    api_hash='xxx',
    phone='xxx',
    database_encryption_key='xxx',
    library_path='xxx', #此处指向TDLib环境文件
    #tdlib_verbosity=4,
)
tg.login()

def send_verification_code(update):
    # 监听所需会话
    if xxx == update['message']['chat_id']:#此处xxx是机器人的id
        # 提取问题并且计算
        question = update['message']['content']['text']['text']
        print(question)
        a = re.findall(r"\s\s(.+?)\+", question, re.M)
        b = re.findall(r"\+(.+?)=", question, re.M)
        if a and b:
            print(a, b)
            c = int(a[-1].strip()) + int(b[-1].strip())
            answers = update['message']['reply_markup']['rows'][0]
            print(f'{a} + {b} = {c}')
            # 用答案和内联键盘值做匹配,一旦匹配执行按钮点击效果
            for answer in answers:
                print(f'答案项:{answer["text"]}')
                if int(answer['text']) == c:
                    payload = {
                        '@type': 'callbackQueryPayloadData',
                        'data': answer['type']['data'],  ##每一个内联键盘都带有data数据
                    }
                    # 发送答案(点击内联键盘)
                    result = tg.call_method(method_name='getCallbackQueryAnswer',
                                            params={'chat_id': update['message']['chat_id'],
                                                    'message_id': update['message']['id'], 'payload': payload})
                    result.wait()
                    if result.error:
                        print(f'getCallbackQueryAnswer error: {result.error_info}')
                    else:
                        print(f'getCallbackQueryAnswer: {result.update}')

tg.add_update_handler('updateNewMessage', send_verification_code)

result = tg.send_message(
    chat_id=xxx, #此处xxx是机器人的id
    text="/checkin",
)

result.wait()
print(f'等待接收签到验证信息')
time.sleep(15)
tg.stop()

效果如下image-20220226154659406

Last modification:March 5th, 2022 at 04:23 pm
如果觉得我的文章对你有用,请随意赞赏