#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:
У вас правильная идея, но вы недостаточно изучили документацию. Обычно, если вы не знаете, какой атрибут вам нужно использовать, полезно выполнить поиск в документации.
Context
не имеет атрибутаreference
. Это потомуreference
, что это наш атрибутmessage
. К счастью для нас context (ctx
) имеетmessage
атрибут:ctx.message
. Мы используем это для полученияmessage
объекта, который затем используем для полученияreference
атрибута :ctx.message.reference
.- То же самое относится и к
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. удалить, но это не сработало, поэтому я и спросил здесь. также оцените примечание, оно напоминает мне о том, насколько я ленив, хе-хе. приветствия!