discord.py制作支持小数、带错误提示的随机数生成命令方法
修改后的完整可运行代码
# 以下两个导入请放在代码顶部,不要写在命令函数内部 import random from datetime import datetime import discord from discord.ext import commands # 此处替换为你自己的client初始化逻辑 # client = commands.Bot(command_prefix="你的命令前缀", intents=discord.Intents.all()) @client.command() async def random(ctx, arg1=None, arg2=None): # 校验参数数量 if arg1 is None or arg2 is None: await ctx.send("请输入两个参数,一个数字和一个更大的数字。") return try: # 转换参数为浮点型 num1 = float(arg1) num2 = float(arg2) # 校验数值大小关系 if num2 <= num1: await ctx.send("请输入两个参数,一个数字和一个更大的数字。") return # 匹配输入类型生成对应随机数,和示例效果一致 if arg1.isdigit() and arg2.isdigit(): res = random.randint(int(num1), int(num2)) else: res = round(random.uniform(num1, num2), 1) # 捕获输入非数字的异常 except ValueError: await ctx.send("请输入两个参数,一个数字和一个更大的数字。") return # 构造返回消息 embed = discord.Embed( title = "Random Number", description = f"Here is your random number : {res}", color = discord.Color.red() ) now = datetime.now() current_time = now.strftime("%H:%M") embed.set_footer(text=f"Requested by {ctx.author} at {current_time}") await ctx.send(embed=embed)
主要修改点
- 给参数添加默认值
None,解决参数不足时直接抛出系统错误的问题,参数缺失时自动返回指定提示 - 将
random、datetime的导入移到代码顶部,避免重复导入带来的性能损耗 - 替换仅支持整数的
random.randrange,新增适配整数的random.randint和适配浮点数的random.uniform,根据输入参数类型自动匹配输出类型,完全符合示例效果 - 新增异常捕获逻辑,处理输入内容不是合法数字的场景,统一返回指定错误提示
- 新增数值大小合法性校验,第二个数字小于等于第一个时自动返回错误提示
- 修复原代码
try...else逻辑写反的问题,异常流程和正常返回流程拆分清晰
内容的提问来源于stack exchange,提问作者OffableGamer870
相关产品推荐
相关产品推荐

