Дискорд бот не может отправить сообщение

Есть такой код:

class f_Ds:

    #warious
    prefix = None
    client = commands.Bot(command_prefix=prefix,intents=(discord.Intents.all()))
    command = []

    #id
    guild_id = -
    support_id = -
    commands_id = -
    chat_id = -

    #texts
    ticket_text = None

    def set_prefix(prefix):
        f_Ds.prefix = prefix

    async def send_message(msg,channel_id):
        await f_Ds.client.get_channel(channel_id).send(msg)

  



    def start(token):
        f_Ds.client.run(token) 


f_Ds.send_message("QQ",f_Ds.chat_id)
f_Ds.start("-")

Однако при вызове функции f_Ds.send_message() ничего не происходит.

Как я могу починить свой код?


Ответы (1 шт):

Автор решения: AnnaBazueva

А чего Вы ожидали:

  • используя асинхронный метод без await,
  • вне асинхронной функции
  • и ещё до запуска бота!?

Пример как это должно выглядеть:

import discord
from discord.ext import commands

class f_Ds:
    prefix = None
    client = commands.Bot(command_prefix=prefix, intents=discord.Intents.all())
    chat_id = None

    @classmethod
    def set_prefix(cls, prefix):
        cls.prefix = prefix
        cls.client = commands.Bot(command_prefix=cls.prefix, intents=discord.Intents.all())

    @classmethod
    async def send_message(cls, msg, channel_id):
        channel = cls.client.get_channel(channel_id)
        if channel is not None:
            await channel.send(msg)
        else:
            print(f"Канал с ID {channel_id} не найден.")

    @classmethod
    async def on_ready(cls):
        print(f'Бот {cls.client.user} запущен.')
        await cls.send_message("QQ", cls.chat_id)  # Отправляем сообщение после запуска

    @classmethod
    def start(cls, token):
        cls.client.add_listener(cls.on_ready)
        cls.client.run(token)

# Убедитесь, что chat_id и token инициализированы
f_Ds.chat_id = 123456789012345678 
f_Ds.start("TOKEN")

Эта строчка f_Ds.send_message() перенесена в метод on_ready.

→ Ссылка