使用interactions.py开发Discord Bot遇'str'无'kwargs'属性错误
问题描述
使用interactions.py开发Discord机器人时,调用whitelist_add函数触发AttributeError: 'str' object has no attribute 'kwargs'错误,代码中未显式使用kwargs,推测和ctx相关但无法理解原因。
相关代码
whitelist_add函数
async def whitelist_add(mc_username, cmd_author): result = await fetch_player(mc_username) check_success = result[0] if not check_success: return False, "Could not whitelist. Check your username input" mc_username, uuid, _, = result whitelist, _ = await whitelist_get() whitelist['mc_users'].append(mc_username) whitelist['mc_uuids'].append(uuid) whitelist['discord_ids'].append(cmd_author) await quick_dump(whitelist) response = await send_rcon(f"whitelist add {mc_username}") return True, f"Success: {response}"
调用该函数的admin_add函数
async def admin_add(ctx: SlashContext, minecraft_username: str, discord_id: str = ""): #if the user is an admin, they can whitelist other users response1 = await whitelist_add("Test", 0) if not response1[0]: print(response1) await ctx.send("Error")
报错栈信息
Ignoring exception in cmd `/whitelist administrator-add`: Traceback (most recent call last): File "C:\Users\name\OneDrive\Python\Mc_discord_bot\venv\Lib\site-packages\interactions\client\client.py", line 1897, in __dispatch_interaction response = await callback ^^^^^^^^^^^^^^ File "C:\Users\name\OneDrive\Python\Mc_discord_bot\venv\Lib\site-packages\interactions\client\client.py", line 1768, in _run_slash_command return await command(ctx, **ctx.kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\name\OneDrive\Python\Mc_discord_bot\venv\Lib\site-packages\interactions\models\internal\command.py", line 132, in __call__ await self.call_callback(self.callback, context) File "C:\Users\name\OneDrive\Python\Mc_discord_bot\venv\Lib\site-packages\interactions\models\internal\application_commands.py", line 833, in call_callback return await self.call_with_binding(callback, ctx, *new_args, **new_kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\name\OneDrive\Python\Mc_discord_bot\venv\Lib\site-packages\interactions\models\internal\callback.py", line 43, in call_with_binding return await callback(*args, **kwargs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\name\OneDrive\Python\Mc_discord_bot\main.py", line 307, in admin_add response1 = await whitelist_add("Test", 0) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\name\OneDrive\Python\Mc_discord_bot\venv\Lib\site-packages\interactions\models\internal\command.py", line 132, in __call__ await self.call_callback(self.callback, context) File "C:\Users\name\OneDrive\Python\Mc_discord_bot\venv\Lib\site-packages\interactions\models\internal\application_commands.py", line 804, in call_callback kwargs_copy = ctx.kwargs.copy() ^^^^^^^^^^ AttributeError: 'str' object has no attribute 'kwargs'
问题原因与解决方法
原因分析
报错栈显示调用whitelist_add时,interactions.py框架把它当成了命令回调函数处理,而非普通异步函数。框架尝试传入上下文对象,但你调用时传入的第一个参数是字符串"Test",框架误将这个字符串当成了ctx(上下文对象),而字符串没有kwargs属性,因此触发错误。
这种情况通常是因为你不小心给whitelist_add函数添加了interactions.py的命令装饰器(比如@slash_command),导致框架将其注册为一个命令,而非普通函数。
解决方法
- 检查并移除错误的装饰器:查看
whitelist_add函数定义上方,是否存在@slash_command或其他interactions.py的命令装饰器,如有直接删除。 - 确保调用方式正确:确认
whitelist_add是普通异步函数,调用时直接传入所需参数即可,无需框架介入。
只要移除whitelist_add上可能存在的命令装饰器,问题即可解决。
内容的提问来源于stack exchange,提问作者spirledaxis
相关产品推荐
相关产品推荐

