重构产生问题和回答的方式 电报防广告机器人 telegram antispam bot

上一期我们实现了防广告机器人的基本框架

如果我们想实现丰富的 问题-答案 生成方式, 怎么做呢?

看一下目前的代码.
是生成了 问题-答案 后, 保存起来, 然后新成员再回答问题, 并检查答案.

那么, 我们来做这样一件事.
在一个python文件 main.py 的目录下, 有一个 pset 目录. 
pset 目录下有多份 .py 文件. 
这些 .py 文件中, 都至少包含1个函数. buildQA
buildQA 返回2个字符串, 一个是 question, 一个是 correct_answer
我要在 main.py 中随机调用 pset 目录下的一个 .py 文件中的 buildQA 函数
把这段文字丢给 M$ copilot (或者你手边的任意一个GPT), 很容易就得到答案.

把修改方案应用到项目中.
主 py 文件中. 增加这样一个函数
def get_random_module():
    # 找出 pset 目录下的所有 .py 文件(排除 __init__.py)
    files = [
        f[:-3] for f in os.listdir("pset")
        if f.endswith(".py") and f != "__init__.py"
    ]
    # 随机选择一个
    chosen = random.choice(files)
    # 动态导入
    module = importlib.import_module(f"pset.{chosen}")
    return module
再把原来生成 问题-答案的地方改成这样
# 生成验证问题和答案
mod = get_random_module()
question, correct_answer = mod.buildQA()
然后在 pset 目录下, 新建一个 add.py 文件. 内容如下:
import random

def buildQA():
    num1 = random.randint(1, 10)
    num2 = random.randint(1, 10)
    question = f"{num1} + {num2}"
    correct_answer = num1 + num2
    
    return question, correct_answer
你看, 是不是很简单? 修改的代码量 才 25行(含注释和空行)

同样的方式, pset 目录下多建几个文件, 实现不同的 问题-答案.
如, youtube.py
def buildQA():
  question = '我的Youtube频道url是什么?'
  correct_answer = 'https://www.youtube.com/@crazypeace'
  
  return question, correct_answer

最后, 调试的过程中, 解决一些上一个版本中的, 比如 HTML 格式改成 Markdown 格式, 整数转换为字符串之类的小问题.

最终效果

Github
* 考虑到后续还会有几期更新. 所以本期的代码也复制了一份 tg-join-group-exam-bot2.py 在项目里.

部署方法见项目 readme

目前项目的好处是, 使用者如果看不懂200多行的主程序文件, 也没关系, 可以通过一个简单的4行 .py 文件 定义适合自己的 问题-答案.

现在除了算术问题, 其它 问题-答案 还比较死板. 后续我们再想一些灵活的方案.

欢迎关注我的博客

评论

The Hot3 in Last 30 Days

Debian10 apt update问题 更新软件源 2025-8-11

Mihomo (Clash-meta) 择优录取 url-test 自动选择能用的端口和协议

不换行空格NBSP造成Linux执行命令时出错