Discord.py机器人命令如何传入包含空格的内容参数?
原因
Discord.py 的默认命令解析器以空格作为参数分割依据,你当前代码里定义的data: str参数只会匹配到第一个空格前的文本片段,因此带空格的输入内容只会保留第一个单词。
解决方案
方案1:修改参数定义自动捕获剩余内容(推荐)
仅需要在最后一个参数前添加*分隔符,Discord.py 会自动把该参数之后的所有输入内容(包含全部空格)整体作为单个字符串传入,无需用户调整输入习惯:
async def new_file(ctx, filename: str, *, data: str): # 推荐使用with上下文管理器自动处理文件关闭,避免资源泄露 with open(f'{filename}.txt', 'a+', encoding='utf-8') as newfile: newfile.write(data)
修改后直接输入[bot-prefix]new_file testfile This has spaces in it即可正常写入全部内容。
方案2:用户输入时用引号包裹带空格的内容
如果不想调整代码,也可以告知用户在输入带空格的参数时,用双引号/单引号把对应内容包裹起来:[bot-prefix]new_file testfile "This has spaces in it"
默认解析器会识别到引号包裹的内容是完整的单个参数,无需修改代码即可正常获取全部内容,但需要用户配合调整输入方式。
补充优化建议
原代码手动调用open和close的写法,在程序出现异常时可能出现文件未正常关闭的资源泄露问题,推荐统一改用with上下文管理器操作文件,同时指定encoding='utf-8'避免写入中文或特殊字符时出现乱码。
内容的提问来源于stack exchange,提问作者user13518719
相关产品推荐
相关产品推荐

