Discord.py commands.when_упомянутый не работает с пользовательским префиксом

Что я пытаюсь сделать: если кто-то не знает префикс, он может упомянуть бота и вместо этого использовать упоминание. После некоторых исследований я нашел Как отправлять команды боту по имени? Это заставило меня попробовать использовать функции commands.when_mentioned или commands.when_mentioned_or вместе с моим пользовательским префиксом.

Моя проблема: Бот либо реагирует только на упоминание (при этом выкидывая мне ошибки), либо вообще не реагирует.

Вот код пользовательского префикса, который я использую: Как получить настраиваемый префикс discord.py

Вот определение клиента с command_prefix:

intents = discord.Intents.all()
client = commands.Bot(
    command_prefix= (get_prefix),
    description='A bot who wants your toes',
    owner_id=(394506589350002688),
    case_insensitive=True,
    intents=intents
    )

Ниже я перечислил то, что пробовал. Я не уверен, что попробовать дальше, поэтому я буду благодарен за любую оказанную помощь.

Испытание 1:

command_prefix= commands.when_mentioned_or((get_prefix))

Результат:

TypeError: Iterable command_prefix or list returned from get_prefix must contain only strings, not function

Испытание 2:

command_prefix= commands.when_mentioned or (get_prefix)

Результат: ошибки нет, но бот больше не реагирует на пользовательский префикс, как показано ниже.

Испытание 3:

command_prefix= commands.when_mentioned and (get_prefix)

Результат: ошибки нет, но бот больше не реагирует на упоминание, как показано ниже.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
2 738
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

when_mentioned_or должен быть передан список префиксов, а не функция для получения этого списка. Однако его достаточно легко изменить:

def when_mentioned_or_function(func):
    def inner(bot, message):
        r = func(bot, message)
        r = commands.when_mentioned(bot, msg) + r
        return r
    return inner

поэтому command_prefix = when_упомянутая_или_функция (get_prefix)? или когда_упомянутая_или_функция(команды.когда_упомянутая_или(get_pr‌​исправление))

StatTrakDiamondSword 06.09.2021 08:10

@StatTrakDiamondSword первый

Patrick Haugh 06.09.2021 21:49

Я проверил пример на readthedocs, и на самом деле он очень прост. В функции get_prefix вы возвращаете commands.when_mentioned_or(prefix)(bot, message)

StatTrakDiamondSword 08.09.2021 05:35

Другие вопросы по теме