Как подставить прошлое сообщение бота к новой команде ? Discord.py
Всем ку подскажите пожалуйста, как мне из отправленного сообщение бота достать текст ?
async def add(ctx, *, message, msg_id: int = None, channel: discord.TextChannel = None):
if not msg_id:
channel = bot.get_channel() # the message's channel
msg_id = # the message's id
elif not channel:
channel = ctx.channel
msg = await channel.fetch_message(msg_id)
hch = (msg,message)
await ctx.send(hch)
Для примера я хотел сделать так, условно прошлое сообщение бота "Я хочу пиццу" + моё сообщение из команды "Всем ку!" = сообщение от бота "Я хочу пиццу Всем ку"
На практики выходит так (<Message id=1069413274027831396 channel= type=<MessageType.default: 0> author=<Member id=1061292038726877344 name='Кладовщик' discriminator='3401' bot=True nick=None guild=> flags=>, 'Всем ку')
Как исправить, чтобы бот писал текст прошлого сообщение, а не его значения ?
Ответы (1 шт):
Во-первых, стоит сказать, что у Вас полная неразбериха в коде.
- Вы ставите знак
*в самом начале, что делает код просто не понятным. Ставить*необходимо тогда, когда Вы хотите записывать весь введенный текст пользователем в переменную после него, в Вашем случае в*, message. Изменяем Вашу строку:
async def add(ctx, msg_id: int = None, channel: discord.TextChannel = None, *, message):
- Так же у Ваших переменных
msg_idиchannelпервоначальное значениеNone, что будет некорректно работать. Меняем:
async def add(ctx, msg_id: int, channel: discord.TextChannel, *, message):
Во-вторых множество ненужных проверок. Всё что нам нужно, это получить текст сообщения которое мы получим по указанному ID:
msg = await channel.fetch_message(msg_id)
Далее достаточно отправить сообщение:
await ctx.send(f"{msg.content} \n{message}")
{msg.content}- получаем текст сообщения которое мы получили по ID:\n- следующей строкой..{message}- отправляем текст который мы указали и записали в переменнуюmessage.
Полный код:
async def add(ctx, msg_id: int, channel: discord.TextChannel, *, message):
msg = await channel.fetch_message(msg_id)
await ctx.send(f"{msg.content} \n{message}")
Что мы получаем:
