搭建一个简单的TG机器人;python

55gY 766 0

准备环境

目的:发送不能转发的链接到TG机器人,服务端自动下载并上载到指定频道

## 1、linux服务器
## 2、服务器需有python3.10以上环境
pip3 install python-telegram-bot

高亮代码格式有问题,用文本模式看

python机器人后台tgbot.py

高亮代码格式有问题,用文本模式看

from enum import Enum
import os,subprocess,sys,time
 
from telegram import Update   # 获取消息队列的
from telegram.ext import filters, MessageHandler, ApplicationBuilder, CommandHandler,  ContextTypes
# bot_token是什么自己谷哥
bot_token = "19011110:AAH9111111uwVelu8gKjgDOH24I1M"
 
# 回复固定内容  
# async def start(update: Update, context: ContextTypes.DEFAULT_TYPE):  
#     # 定义一些行为
 
#     # 向发来 /start 的用户发送消息
#     await context.bot.send_message(chat_id=update.effective_chat.id,  
#                                    text=f"这是一个转存机器人")  

async def transfer(update: Update, context: ContextTypes.DEFAULT_TYPE):  
    # 定义一些行为
    # 接收到的文本信息
    msg=update.message['text']
    if(msg.find("https://t.me/")==-1):
        # await context.bot.send_message(chat_id=update.effective_chat.id,text=r"请发送无法转发的链接")
        time.sleep(3)
        await context.bot.delete_message(chat_id=update.effective_chat.id,message_id=update.message['message_id'])
    else:    
    #回复信息
        await context.bot.send_message(chat_id=update.effective_chat.id,text=r"◎开始下载")
        process = subprocess.Popen('/root/tdl.sh '+msg, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, shell=True)
        with process.stdout:
            for line in iter(process.stdout.readline, b''):
                # print(line.decode().strip())
                if(str(line.decode().strip()).find("◎")!=-1):
                    await context.bot.send_message(chat_id=update.effective_chat.id,text=line.decode().strip())
                    
        exitcode = process.wait()
 
if __name__ == '__main__': 
    application = ApplicationBuilder().token(bot_token).build() 
    transfer_handler = MessageHandler((~filters.COMMAND), transfer)  
    application.add_handler(transfer_handler)  
    application.run_polling(allowed_updates=Update.ALL_TYPES)

tdl.sh额外插件

用于下载无法转发的文件,并上载到频道
高亮代码格式有问题,用文本模式看

#!/usr/bin/env bash
export PATH=~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/sbin:/bin
tdl_dir="/root/tdl"
#检查ROOT权限
check_root() {
    [[ $EUID != 0 ]] && echo -e "${Error} 当前非ROOT账号(或没有ROOT权限),无法继续操作,请更换ROOT账号或使用 ${Green_background_prefix}sudo su${Font_color_suffix} 命令获取临时ROOT权限(执行后可能会提示输入当前账号的密码)。" && exit 1
}
#检查系统版本
check_sys() {
    if [[ -f /etc/redhat-release ]]; then
        release="centos"
    elif cat /etc/issue | grep -q -E -i "debian"; then
        release="debian"
    elif cat /etc/issue | grep -q -E -i "ubuntu"; then
        release="ubuntu"
    elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then
        release="centos"
    elif cat /proc/version | grep -q -E -i "debian"; then
        release="debian"
    elif cat /proc/version | grep -q -E -i "ubuntu"; then
        release="ubuntu"
    elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then
        release="centos"
    fi
    ARCH=$(uname -m)
    [ $(command -v dpkg) ] && dpkgARCH=$(dpkg --print-architecture | awk -F- '{ print $NF }')
}
#安装依赖
Installation_dependency() {
    if [[ ${release} = "centos" ]]; then
        yum update
        yum install -y wget curl nano ca-certificates findutils jq tar gzip dpkg
    else
        apt-get update
        apt-get install -y wget curl nano ca-certificates findutils jq tar gzip dpkg
    fi
    if [[ ! -s /etc/ssl/certs/ca-certificates.crt ]]; then
        wget -qO- git.io/ca-certificates.sh | bash
    fi
}
#获取最新版本
check_new_ver() {
    tdl_new_ver=$(
        {
            wget -t2 -T3 -qO- "https://api.github.com/repos/iyear/tdl/releases/latest" ||
                wget -t2 -T3 -qO- "https://gh-api.p3terx.com/repos/iyear/tdl/releases/latest"
        } | grep -o '"tag_name": ".*"' | head -n 1 | cut -d'"' -f4
    )
    if [[ -z ${tdl_new_ver} ]]; then
        echo -e "${Error} 最新版本获取失败,请手动获取最新版本号[ https://github.com/iyear/tdl/releases ]"
        read -e -p "请输入版本号:" tdl_new_ver
        [[ -z "${tdl_new_ver}" ]] && echo "取消..." && exit 1
    fi
}
#下载
Download_tdl() {
    update_dl=$1
    if [[ $ARCH == i*86 || $dpkgARCH == i*86 ]]; then
        ARCH="i386"
    elif [[ $ARCH == "x86_64" || $dpkgARCH == "amd64" ]]; then
        ARCH="amd64"
    elif [[ $ARCH == "aarch64" || $dpkgARCH == "arm64" ]]; then
        ARCH="arm64"
    elif [[ $ARCH == "armv7l" || $dpkgARCH == "armhf" ]]; then
        ARCH="armhf"
    else
        echo -e "${Error} 不支持此 CPU 架构。"
        exit 1
    fi
    while [[ $(which tdl_dir) ]]; do
        echo -e "${Info} 删除旧版 二进制文件..."
        rm -vf $(which tdl_dir)
    done
    [[ ${update_dl} = "update" ]] && rm -f "${tdl_dir}"
    DOWNLOAD_URL="https://github.com/iyear/tdl/releases/download/${tdl_new_ver}/tdl_Linux_${ARCH}.tar.gz"
    {
        wget -t2 -T3 -O- "${DOWNLOAD_URL}" ||
            wget -t2 -T3 -O- "https://gh-acc.p3terx.com/${DOWNLOAD_URL}"
    } | tar -zx
    
    
    [[ ! -e ${tdl_dir} ]] && echo -e "${Error} 主程序安装失败!" && exit 1
    chmod -R 777 ${tdl_dir}
    echo -e "${Info} 主程序安装完成!"
    
}


run_tdl() {
    str=${1}
    if [[ $str = "" ]];then
        echo "请输入需下载TG文件的链接,多个连接使用空格分隔"
        echo
        read -e str
    fi
    
    for element in $str;
    do
        link+=" -u $element"
    done
    #下载
    ${tdl_dir} dl -n a t 8 -l 10 -d /root/tdl_down${link}
    # echo ${tdl_dir} dl -n a t 8 -l 4 -d /root/tdl_down${link}
    echo -e "◎下载完成,开始上传"
    #上传到的频道
    ${tdl_dir} up -n a t 8 -l 10 -p "/root/tdl_down" -c https://t.me/xxx  --rm 
    echo -e "◎上传完成"
    echo -e "已删除上传完成的文件"
    exit 1
}

Install_tdl() {
    if [[ ${1} = "" ]];then
        echo "更新tdl,否则直接运行 ? (y/N)"
        echo
        read -e -p "(默认: n):" unyn
        [[ -z ${unyn} ]] && unyn="n"
        if [[ ${unyn} == [Yy] ]]; then
            check_root
            check_sys
            echo -e "${Info} 开始安装/配置 依赖..."
            Installation_dependency
            echo -e "${Info} 开始下载/安装 主程序..."
            check_new_ver
            Download_tdl "update"
        
        else
            echo && echo "运行tdl..." && echo
        fi
    fi
    run_tdl ${1}
}
Install_tdl ${1}

添加服务,挂后台

vi /lib/systemd/system/tgbot.service
[Unit]
Description=tgbot
 
[Service]
Type=simple
User=root
Restart=always
ExecStart=/usr/bin/python3.10 /root/tgbot.py
#路径有空格需要用引号框起来
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
 
[Install]
WantedBy=multi-user.target
 
systemctl enable tgbot.service
systemctl start tgbot.service

本站资源来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!

发表评论 取消回复
表情 图片 链接 代码