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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 15:09:03