如何防止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")
运行测试
- 把代码保存成
joke_bot.py - 在终端运行
python joke_bot.py - 把机器人邀请到你的Discord服务器,在聊天框输入
!joke就能触发讲笑话,多次输入直到用完一轮,会看到重置提示,之后又能循环之前的笑话,但绝对不会连续重复同一个。
小优化建议
- 可以把笑话存在单独的
jokes.txt文件里,每行一个笑话,用代码读取,这样不用改代码就能更新笑话库 - 可以调整
MAX_USED_JOKES的数值,比如设为初始列表长度的一半,不用等全部用完就重置,避免长时间重复同一批笑话 - 可以加个
!addjoke命令,让服务器里的用户自己添加新笑话到列表里
内容的提问来源于stack exchange,提问作者Sandman1X
相关产品推荐
相关产品推荐

