登录

精华Telegram 群抽奖机器人,开源了!

38649
  • 楼主博主

    Telegram 群抽奖机器人,这个是我接触 AI 后折腾的第一个 "项目"。在 Telegram 群组里,经常参与各个主办方搞的一些抽奖活动,感觉到 Telegram 抽奖机器人的功能还是非常的实用,便想着自己也搞一搞,但是奈何自己的水平有限且也没有使用刚需这个想法也就一直搁浅。把老张博客搬到酷鸭数据之后,和酷鸭数据的商家也经常的聊天,发现酷鸭没有 Telegram 群,便自告奋勇的创建了所谓的酷鸭数据官方 Telegram 群。为能想让 Telegram 群更为活跃,但想到了 Telegram 抽奖机器人。

    在 Github 上也找了一些开源的 Telegram 抽奖机器人的源码,但是使用起来一些功能不是自己想要的。那段时间也正好买了年付的 minimax 的套餐,便开始了自己的折腾。对于一个门外汉想让 AI 帮自己做好一个项目,那最开始的 "项目方案" 必须要详细,方案里必须要把你的项目思路、项目后期功能等方方面面详细的罗列出来。当然了,你的初步方案出来之后,还可以和 AI 一起交流,对方案进行一些修改。我的这个 Telegram 抽奖机器人所谓的方案就是反反复复的修改了两三天时间。

    第一次让 AI 做项目,没有经验,花了大量的时间和精力。连续两个星期都坐在电脑前,结果把自己的老病腰椎间盘突出又搞犯了。不过还好,前前后后花了三个多星期还是把这个 Telegram 抽奖机器人给搞了出来。

    除了一般抽奖机器人常用功能外,我还增加了 "自动发奖" 的功能。抽奖结束之后,机器人可以将奖品如优惠卷、口令红包等直接分奖次等级私聊发给中奖者,省去了手动发奖的步骤。

    有兴趣的请移步到我的 Github 仓库自取:https://github.com/laozhangge/telegram-lottery-bot

    功能特性

    ✅ 单项奖抽奖 – 单个奖品抽奖
    ✅ 多等奖抽奖 – 支持一等奖、二等奖、三等奖等
    ✅ 定时开奖 – 到时间自动开奖
    ✅ 手动提前开奖 – 管理员可随时提前开奖
    ✅ 参与验证 – 验证群组成员身份 + 频道关注
    ✅ 防重复参与 – 数据库唯一约束
    ✅ 私聊通知 – 参与成功、开奖结果、取消通知全部私聊
    ✅ 群组通知 – 发布、开奖、取消群组通知
    ✅ 历史记录 – 查看历史抽奖、中奖者
    ✅ 管理员同步 – 自动从 TG API 同步群管理员
    ✅ 自动重启恢复 – 服务器重启后自动恢复定时任务

    快速开始

    1. 安装依赖

    pip install -r requirements.txt
    

    2. 配置机器人

    编辑 config.yaml,填入以下信息:

    telegram:
      bot_token: "你的BotToken"    # 从 @BotFather 获取
    
    group:
      chat_id: -1001234567890     # 群组ID
    
    channel:
      channel_id: -1001987654321  # 频道ID
      required: true               # 是否强制关注频道
    

    3. 添加机器人为管理员

    将机器人加入群组和频道,并设为管理员(否则无法读取成员列表和发送消息)。

    4. 运行

    # 初始化数据库
    python scripts/init_db.py
    
    # 启动机器人
    python bot.py
    

    5. systemd 守护进程(推荐)

    # 复制 service 文件
    sudo cp telegram-lottery-bot.service /etc/systemd/system/
    
    # 重新加载
    sudo systemctl daemon-reload
    
    # 启动
    sudo systemctl start telegram-lottery-bot
    
    # 开机自启
    sudo systemctl enable telegram-lottery-bot
    

    管理员命令

    在群组内使用:

    命令说明
    /create_single创建单项奖抽奖
    /create_multi创建多等奖抽奖
    /active查看进行中的抽奖
    /participants查看参与人列表
    /draw手动提前开奖
    /cancel取消抽奖
    /history查看历史记录
    /sync_admins同步群组管理员

    成员命令

    命令说明
    /start打开主页
    /lottery查看进行中的抽奖
    /my_history我的参与记录
    /help使用帮助
    收藏 1支持 2反对打赏 1
1 人打赏,共 1 饼 crazypeace 1

49 条回复

  • #41

    这个可以用一下,感谢老张分享。

  • #42

    虽然用不到,还是感谢

  • #43

    支持老张

  • #44

    原创真厉害

  • #45

    @grok 分析这个项目 https://github.com/laozhangge/telegram-lottery-bot
    关注各个 发起抽奖,用户 参与,进行抽奖,发布结果 的过程中,信息公开透明程度的分析?
    作为没有系统操作权限的第三方,有没有办法监视整个过程的公开透明性?

    个性签名

    希望我分享的实践过程能让你也成为创造者, 自己动手解决问题.

    :

    结论先说:按帖子里的说明,这个机器人是「群里看得见公告和结果」,不是「外人能复核开奖是否公平」。没有服务器权限的第三方,监视不了抽奖过程本身,只能看运营者愿意公开展示的那一层。

    公开程度按环节看:

    发起。 管理员用 /create_single、/create_multi 建抽奖,群里会发通知。外人若在群里,能看到奖品、开奖时间、是否要关注频道这些文字。规则存在运营者自己的数据库里,帖子没写公告会不会被改、改了有没有留痕。第三方对不上「当时存进去的规则」和「后来拿来开奖的规则」。

    参与。 机器人用 Telegram 接口查是不是群成员、有没有关注频道,并用数据库唯一约束防重复。参与成功只私聊本人。/participants 写在管理员命令里,普通成员和群外的人开奖前看不到完整名单。所以你能确认自己报上了名,不能确认名单没有被删、被加,也不能确认别人是否被同样的条件放行。

    开奖。 到点自动开,管理员也可以 /draw 随时提前开。帖子和给出的功能列表都没有公开随机源、开奖前锁定名单、公开种子或可复算过程。随机和名单都在跑机器人的那台机器上。运营者改数据库、换一批参与者再开、不满意再开一次,群里最终都只看到一条结果通知。开源仓库只能说明作者打算怎么写,不能证明正在跑的程序和数据就是仓库里那一份。

    公布与发奖。 群通知、私聊、/history、/my_history 能看到机器人声称的中奖者。自动发奖是机器人按奖级私聊发券或口令。中奖者能核对自己收到没有,其他人核对不了「这份奖是不是按事先公布的规则、从当时那份名单里抽出来的」。历史记录同样是机器人自己的账。

    没有系统权限的第三方,实际只能做这些:待在群里看发布、开奖、取消消息;核对自己的私聊;若命令对成员开放,再看历史。不能看到开奖瞬间的名单快照,不能重算随机结果,也不能发现静默改库。和本站抽奖用公开随机数、公布名单、页面上可复算不是一类东西。

    真要让外人监得住,至少得:开奖前在群里公布不可更改的参与名单(或名单哈希),用事后才出现、谁都能查到的公开随机数开奖,并公开算法让人自己重算。以现在帖子里写的设计,做不到。

    #46
    楼主:

    这个当时确实没有考虑,后期会加进去,保证公开、透明。

    #47亮了 1
    共 2 条回复
  • #48

    自动发奖确实省事

    个性签名

    我是joker,你好

  • #49

    这个牛逼啊

    个性签名

    Google voice靓号见个人资料介绍页!

发表回复