Similization
@Similization
В прострации

Пытаюсь добавить в слэш-команду дискорд бота возможность генерации текста (балабола)?

Написал простенького бота на питоне (пока только вникаю, так что много не знаю). Сам бот и его команды работают отлично, так же нашел код для запуска балабобы от Яндекса, тоже работает. Но вот попытка вызова функции балабобы из слэш-команды успехами не увенчалась. Подскажите, что я делаю не так и что стоило бы почитать?
Вот balaboba_integration.py
from aiobalaboba import Balaboba
from typing import Literal


async def generate_text(text: str, language: Literal["en", "ru"]):
    bb = Balaboba()

    # Get text types
    intros = await bb.intros(language=language)

    # Get the first text type
    intro = next(intros)

    # Print Balaboba's response to the "Hello" query
    response = await bb.balaboba(text, intro=intro.number)
    print(response)
    return response


Вот код бота (без остальных команд)
import discord
from discord import app_commands

import balabola_integration as bi
from typing import Literal

intents = discord.Intents.default()
client = discord.Client(intents=intents)
tree = app_commands.CommandTree(client)


@tree.command(name="balaboba", description="Uses balaboba to generate you a random text")
async def generate_text_command(interaction, text: str, language: Literal["en", "ru"] = "ru"):
    response = await bi.generate_text(text, language)
    await interaction.response.send_message(f"{client.user.mention} your generated text is:\n{response}")


@client.event
async def on_ready():
    await tree.sync()
    print("Ready!")


client.run("token")


Данный код выдает такую ошибку (запустил слэш-команду и ввел "привет котикам"). Это то, что вывелось в терминал:
привет котикам, в общем, я сейчас сижу и читаю эту статью и пытаюсь понять, как это работает.
И вроде бы все ясно, но в голове у меня все равно каша.
Что такое «составные части»?
Чем они отличаются от «рецепторных частей»?
Как они связаны?
В общем, пока я не понимаю.
А это ведь только начало.
Я уже представляю, что еще будет дальше.
Надеюсь, ты не против, если я продолжу читать.
Ты же не против?
Хорошо.
Итак, я в курсе, что у любого живого организма есть ДНК, РНК и белки.
Но что такое белки?
[2022-10-16 15:09:13] [ERROR   ] discord.app_commands.tree: Ignoring exception in command 'balaboba'
Traceback (most recent call last):
  File "/Users/similization/Programming/python/discordBot/lib/python3.9/site-packages/discord/app_commands/commands.py", line 851, in _do_call
    return await self._callback(interaction, **params)  # type: ignore
  File "/Users/similization/Programming/python/discordBot/example_bot.py", line 75, in generate_text_command
    await interaction.response.send_message(f"{client.user.mention} your generated text is:\n{response}")
  File "/Users/similization/Programming/python/discordBot/lib/python3.9/site-packages/discord/interactions.py", line 718, in send_message
    await adapter.create_interaction_response(
  File "/Users/similization/Programming/python/discordBot/lib/python3.9/site-packages/discord/webhook/async_.py", line 219, in request
    raise NotFound(response, data)
discord.errors.NotFound: 404 Not Found (error code: 10062): Unknown interaction

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/similization/Programming/python/discordBot/lib/python3.9/site-packages/discord/app_commands/tree.py", line 1240, in _call
    await command._invoke_with_namespace(interaction, namespace)
  File "/Users/similization/Programming/python/discordBot/lib/python3.9/site-packages/discord/app_commands/commands.py", line 876, in _invoke_with_namespace
    return await self._do_call(interaction, transformed_values)
  File "/Users/similization/Programming/python/discordBot/lib/python3.9/site-packages/discord/app_commands/commands.py", line 869, in _do_call
    raise CommandInvokeError(self, e) from e
discord.app_commands.errors.CommandInvokeError: Command 'balaboba' raised an exception: NotFound: 404 Not Found (error code: 10062): Unknown interaction
  • Вопрос задан
  • 189 просмотров
Решения вопроса 1
AlexNest
@AlexNest
Работаю с Python/Django
У слеш-команд ограничение 3 секунды на получение ответа. Поскольку ответ балабола генерирует дольше - команда падает с ошибкой.
Чтобы обойти это можно сразу после реагирования на команду отправлять сообщение заглушку, потом запрашивать текст у балаболы, а когда текст получен - менять заглушку на полученный текст.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы