Возврат значения по умолчанию из конвертера discord.py - PullRequest
0 голосов
/ 19 января 2020

Я делаю конвертер канала разногласий

class Channel(commands.Converter):
    async def convert(self, ctx, argument):

        # Do converter stuff to get a channel
        # This may fail meaning that the result is not a TextChannel 

        if not isinstance(result, discord.TextChannel):
            return ctx.channel
        else:
            return result

Как вы можете видеть, я возвращаю ctx.channel (канал, к которому был вызван), если я не смог получить канал. Проблема в том, что если я делаю что-то вроде этого ...

    @commands.command(name='invite', aliases=['inv'])
    @commands.guild_only()
    @commands.cooldown(1, 30, commands.BucketType.user)
    async def invite(self, ctx, channel: converters.Channel, member: discord.User):
        # Command stuff here

Если участник запускает команду с g/invite #channel @member, она работает нормально, но если они запускают команду с g/invite @member, то текущий канал используется как канал, но член полностью игнорируется. Есть ли способ предотвратить это? (Так что канал будет текущим каналом, но элемент будет тем участником, которого они упомянули)

1 Ответ

1 голос
/ 19 января 2020

Я думаю, что самый простой способ - использовать Optional конвертер , а затем заменить None на ctx.channel в теле вашего обратного вызова

from discord import TextChannel, User
from typing import Optional

@commands.command(name='invite', aliases=['inv'])
@commands.guild_only()
@commands.cooldown(1, 30, commands.BucketType.user)
async def invite(self, ctx, channel: Optional[TextChannel], member: User):
    channel = channel or ctx.channel
    # Command stuff here
...