如何使用discord.py rewrite创建类似MEE6的Urban Dictionary命令?
实现Discord.py Rewrite的Urban Dictionary命令
嘿,别发愁!我来帮你搞定这个类似MEE6的Urban Dictionary命令开发——其实有个公开可用的Urban Dictionary API,不需要申请密钥就能直接用,完美适配discord.py rewrite版本。下面是详细的实现步骤:
1. 先装必要依赖
确保你已经安装了discord.py(rewrite分支)和requests库,前者用来开发机器人,后者用来调用API:
pip install discord.py requests
2. 核心命令代码实现
这里是完整的可运行代码,已经帮你处理了API请求、结果解析和Discord消息展示,风格和MEE6的UD命令很像:
import discord from discord.ext import commands import requests # 初始化机器人,前缀可以改成你喜欢的,比如'!'或者'/' intents = discord.Intents.default() intents.message_content = True # 必须开启,否则收不到命令内容 bot = commands.Bot(command_prefix='!', intents=intents) @bot.command(name='ud', help='查询Urban Dictionary上的词条定义,用法:!ud [要查的词]') async def urban_dictionary(ctx, *, term: str): # 调用Urban Dictionary API获取数据 api_response = requests.get(f"https://api.urbandictionary.com/v0/define", params={'term': term}) data = api_response.json() # 检查有没有匹配的定义 if not data['list']: await ctx.send(f"找不到关于`{term}`的定义哦😅") return # 取第一个结果(通常是点赞最多的热门定义) top_def = data['list'][0] # 用Embed构建消息,模仿MEE6的展示样式 ud_embed = discord.Embed(title=f"📚 {term}", color=discord.Color.blurple()) # 截断过长内容,避免超过Discord的字符限制(Embed字段最多1024字符) ud_embed.add_field(name="定义", value=top_def['definition'][:1024], inline=False) # 处理空例句的情况 example_text = top_def['example'][:1024] if top_def['example'] else "暂无例句" ud_embed.add_field(name="例句", value=example_text, inline=False) ud_embed.set_footer(text=f"👍 {top_def['thumbs_up']} | 👎 {top_def['thumbs_down']}") await ctx.send(embed=ud_embed) # 替换成你的机器人令牌,从Discord开发者后台获取 bot.run('YOUR_BOT_TOKEN_HERE')
3. 关键细节说明
- API调用逻辑:这个API的
define端点接受term参数,返回的JSON里list字段包含所有相关定义,我们取第一个是因为它通常是最受欢迎的(点赞最多)。 - 内容长度限制:Discord的Embed每个字段最多支持1024字符,所以用
[:1024]截断过长的定义和例句,防止发送失败。 - 无结果处理:如果API返回的
list是空数组,就给用户发送提示,避免机器人沉默。 - 意图设置:一定要开启
message_content意图,不然机器人接收不到用户输入的命令内容,这个需要在代码里设置,同时在Discord开发者后台的机器人页面开启。
4. 扩展功能建议
如果想让命令更像MEE6,你还可以加这些功能:
- 支持用户指定查看第N个定义,比如
!ud python 2来查看第二个结果 - 添加随机词条命令,调用
https://api.urbandictionary.com/v0/random端点就能获取随机定义 - 给过长的定义添加截断提示,引导用户了解完整内容
内容的提问来源于stack exchange,提问作者sanguine




