Tim_1527
@Tim_1527
Горе программист

Как сказать что-то от имени бота в Discord?

Префикс -"!"
async def say( ctx, arg ):
await ctx.send(arg)
Вот пример функции.
1) Если мы напишем в чат "!say Text1 Text2", бот напишет только "Text1" как сделать, чтобы в аргумент вводилось предложение полностью а не только слово до первого пробела.
2) Я хочу писать от имени бота;
есть приватный текстовый канал "admin" в него я отправляю "!say "ИМЯ КАНАЛА"Text1, Text2"
В свою очередь бот отправляет сообщение "Text1, Text2" в канал с названием "ИМЯ КАНАЛА"
  • Вопрос задан
  • 486 просмотров
Решения вопроса 2
Allan-BlackWell
@Allan-BlackWell
Ничтожество :D
Функция channel_conv ищет в первом слове канал, если не находит - отправляет None, которое создает при попытке отправки исключение, приводящее к отправке в текущий канал

ctx, *, text - звездочка означает, что в text будут записываться все идущее после ctx

split - разбивает строку в список
isdigit - проверят, является ли строка числом
replace - заменяет фрагмент в строке на другой данный (В данном случае канал заменяется на пустое место, чтобы в случае отправки в другой канал его не отправляло вместе с текстом)

async def say(ctx, *, text):
    def channel_conv(text):
        value  = text.split(" ")
        string = value[0]

        if string.isdigit():
            return (
                client.get_channel(int(string)),
                text.replace(string, "")
            )
        elif string.startswith("<#"):
            return (
                client.get_channel(int(string[2:20])),
                text.replace(string, "")
            )
        else:
            return (
                None,
                text
            )

    try:
        channel = channel_conv(text)
        await channel[0].send(channel[1])
    except:
        await ctx.send(text)


Так же можно использовать конвертер из оригинальной библиотеки:
from discord.ext.commands import TextChannelConverter


Код:
async def say(ctx, *, text):
    v = text.split(" ")

    try:
        channel = await TextChannelConverter().convert(ctx = ctx, argument = v[0])
        await channel.send(text.replace(v[0], ""))
    except:
        await ctx.send(text)
Ответ написан
@dreameddd
async def say(ctx, *, arg)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы