Pycord-Development/pycord

string returned for slash commands when using `Option/input_type`

ReenigneArcher opened this issue · 1 comments

Summary

string returned for slash commands when using Option/input_type

Reproduction Steps

Create slash command with Option and input_type fields.

Minimal Reproducible Code

import discord
from discord.commands import Option

@bot.slash_command(name="working")
async def test_member1(ctx: discord.ApplicationContext, member: Option(discord.Member, "Choose a member")):
    await ctx.respond(f"Member: {member.mention}")


@bot.slash_command(name="not_working")
async def test_member2(ctx: discord.ApplicationContext, member: Option(input_type=discord.Member, description="Choose a member")):
    await ctx.respond(f"Member: {member.mention}")

Expected Results

Get a discord.Member object when using input_type in the Option constructor.

Actual Results

Got a string value.

Ignoring exception in command not_working:
Traceback (most recent call last):
  File "C:\Users\ReenigneArcher\Documents\GitHub\LizardByte\support-bot\venv\Lib\site-packages\discord\commands\core.py", line 131, in wrapped
    ret = await coro(arg)
          ^^^^^^^^^^^^^^^
  File "C:\Users\ReenigneArcher\Documents\GitHub\LizardByte\support-bot\venv\Lib\site-packages\discord\commands\core.py", line 1013, in _invoke
    await self.callback(ctx, **kwargs)
  File "C:\Users\ReenigneArcher\Documents\GitHub\LizardByte\support-bot\src\discord_bot.py", line 192, in test_member2
    await ctx.respond(f"Member: {member.mention}")
                                 ^^^^^^^^^^^^^^
AttributeError: 'str' object has no attribute 'mention'

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\ReenigneArcher\Documents\GitHub\LizardByte\support-bot\venv\Lib\site-packages\discord\bot.py", line 1130, in invoke_application_command
    await ctx.command.invoke(ctx)
  File "C:\Users\ReenigneArcher\Documents\GitHub\LizardByte\support-bot\venv\Lib\site-packages\discord\commands\core.py", line 376, in invoke
    await injected(ctx)
  File "C:\Users\ReenigneArcher\Documents\GitHub\LizardByte\support-bot\venv\Lib\site-packages\discord\commands\core.py", line 139, in wrapped
    raise ApplicationCommandInvokeError(exc) from exc
discord.errors.ApplicationCommandInvokeError: Application Command raised an exception: AttributeError: 'str' object has no attribute 'mention'

Intents

discord.Intents.all()

System Information

python -m discord -v
C:\Users...\support-bot\venv\Lib\site-packages\discord_main_.py:33: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
import pkg_resources

  • Python v3.11.0-final
  • py-cord v2.5.None-final
  • aiohttp v3.8.6
  • system info: Windows 10 10.0.22621

Checklist

  • I have searched the open issues for duplicates.
  • I have shown the entire traceback, if possible.
  • I have removed my token from display, if visible.

Additional Context

No response

This is, strictly speaking, intentional; Option is defined as such

    def __init__(self, input_type: InputType = str, /, description: str | None = None, **kwargs)

The slash / in the args forces input_type to be positional only - you cannot use it as a kwarg, as it can only be the first argument of Option, if you choose to specify it.