You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何防止Discord机器人重复讲相同的笑话?Python新手求助

制作不重复讲笑话的Discord机器人

准备工作

  • 先安装依赖库:在终端运行 pip install discord.py
  • 去Discord开发者平台创建机器人应用,开启机器人权限,复制你的机器人Token(注意别泄露给别人)

核心逻辑与代码实现

我们用两个列表分别存未使用和已使用的笑话,当已使用列表存满(达到设定的最大容量),就把里面的笑话移回未使用列表,实现循环不重复的效果。

完整代码+逐段解释

# 导入需要的库:discord.py用来创建机器人,random用来随机选笑话
import discord
from discord.ext import commands
import random

# 初始化机器人:设置命令前缀为!,开启所有权限(确保能接收消息和命令)
bot = commands.Bot(command_prefix='!', intents=discord.Intents.all())

# 初始未使用的笑话列表,你可以自己添加更多
unused_jokes = [
    "为什么程序员总是分不清万圣节和圣诞节?因为 Oct 31 = Dec 25",
    "我问Siri有没有灵魂,它说:'我没有,但你问这个问题的样子像有两个'",
    "什么东西有四个轮子还能飞?垃圾车——因为它装满了trash(垃圾/废话),冷到结冰的笑话",
    "程序员的电脑永远不会感冒——因为它有好多窗口(windows)"
]

# 已使用过的笑话列表,初始为空
used_jokes = []

# 已使用列表的最大容量,这里设为和初始未使用列表长度一致,用完一轮就重置
MAX_USED_JOKES = len(unused_jokes)

# 定义!joke命令,用户输入这个命令就触发讲笑话
@bot.command(name='joke')
async def tell_joke(ctx):
    # 声明要修改全局的两个笑话列表
    global unused_jokes, used_jokes
    
    # 检查未使用列表是否为空(也就是所有笑话都用过一轮了)
    if not unused_jokes:
        # 把已使用的笑话全部移回未使用列表
        unused_jokes.extend(used_jokes)
        # 清空已使用列表
        used_jokes.clear()
        # 给用户发个重置提示
        await ctx.send("笑话库重置完成!又能循环讲之前的笑话啦~")
    
    # 从未使用列表里随机挑一个笑话
    selected_joke = random.choice(unused_jokes)
    # 把选中的笑话从未使用列表移除,加到已使用列表里
    unused_jokes.remove(selected_joke)
    used_jokes.append(selected_joke)
    
    # 把笑话发送到当前频道
    await ctx.send(selected_joke)

# 替换成你自己的机器人Token,然后运行代码
bot.run("你的机器人Token")

运行测试

  1. 把代码保存成joke_bot.py
  2. 在终端运行 python joke_bot.py
  3. 把机器人邀请到你的Discord服务器,在聊天框输入!joke就能触发讲笑话,多次输入直到用完一轮,会看到重置提示,之后又能循环之前的笑话,但绝对不会连续重复同一个。

小优化建议

  • 可以把笑话存在单独的jokes.txt文件里,每行一个笑话,用代码读取,这样不用改代码就能更新笑话库
  • 可以调整MAX_USED_JOKES的数值,比如设为初始列表长度的一半,不用等全部用完就重置,避免长时间重复同一批笑话
  • 可以加个!addjoke命令,让服务器里的用户自己添加新笑话到列表里

内容的提问来源于stack exchange,提问作者Sandman1X

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 01:02:34