discord, py: ошибка атрибута: объект ‘Context’ не имеет атрибута ‘reference’

#python #python-3.x #discord.py

#python #python-3.x #discord.py

Вопрос:

(Вставить приветствие)

Я хотел заставить бота discord ответить на сообщение, на которое был дан ответ в командном сообщении, ниже приведен код:

 @bot.command(brief="Iri? Bilang Bos!", description="Iri? Bilang Bos!")
async def iri(ctx):
    ref = ctx.reference
    x=['https://i.imgur.com/8mfw6Nv.jpg', 'https://tenor.com/view/iri-bilang-bos-spell-power-up-skill-gif-17176211', 'https://i.imgur.com/hOvruLZ.jpg']
    await ctx.delete()
    await ctx.send(random.choice(x), reference=ref)
 

Это вызывает исключение AttributeError: объект ‘Context’ не имеет атрибута ‘reference’

Как мне это решить? Спасибо.

Комментарии:

1. также мне нужно знать, как удалить командное сообщение, код вызывает исключение: AttributeError: объект ‘Context’ не имеет атрибута ‘delete’

2. возможно, сначала проверьте документацию — или используйте print( dir(ctx) ) , чтобы увидеть все доступные свойства и функции в объекте ctx

Ответ №1:

У вас правильная идея, но вы недостаточно изучили документацию. Обычно, если вы не знаете, какой атрибут вам нужно использовать, полезно выполнить поиск в документации.

  1. Context не имеет атрибута reference . Это потому reference , что это наш атрибут message . К счастью для нас context ( ctx ) имеет message атрибут: ctx.message . Мы используем это для получения message объекта, который затем используем для получения reference атрибута : ctx.message.reference .
  2. То же самое относится и к delete методу. Context у объекта нет delete метода, поэтому сначала нам нужно получить message объект: ctx.message а затем использовать delete метод message объекта: await ctx.message.delete() (Мы должны использовать await, потому delete что метод асинхронный)

Обычно рекомендуется давать вашим переменным значимые имена. Это улучшает читаемость вашего кода. Вот почему я изменил вашу x переменную на choices

Таким образом, конечный результат должен быть примерно таким:

 @bot.command(brief="Iri? Bilang Bos!", description="Iri? Bilang Bos!")
async def iri(ctx):
    ref = ctx.message.reference
    choices = ['https://i.imgur.com/8mfw6Nv.jpg', 'https://tenor.com/view/iri-bilang-bos-spell-power-up-skill-gif-17176211', 'https://i.imgur.com/hOvruLZ.jpg']
    await ctx.message.delete()
    await ctx.send(random.choice(choices), reference = ref)
 

Надеюсь, это ответ на ваш вопрос 🙂

Комментарии:

1. спасибо, чувак, хорошо поработал. Я действительно проверил документацию, нашел объект message в ctx, а затем попробовал просто message.reference и message. удалить, но это не сработало, поэтому я и спросил здесь. также оцените примечание, оно напоминает мне о том, насколько я ленив, хе-хе. приветствия!