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

使用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),导致框架将其注册为一个命令,而非普通函数。

解决方法

  1. 检查并移除错误的装饰器:查看whitelist_add函数定义上方,是否存在@slash_command或其他interactions.py的命令装饰器,如有直接删除。
  2. 确保调用方式正确:确认whitelist_add是普通异步函数,调用时直接传入所需参数即可,无需框架介入。

只要移除whitelist_add上可能存在的命令装饰器,问题即可解决。

内容的提问来源于stack exchange,提问作者spirledaxis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:44:53