Как отправить сообщение вне команды в дискорд боте?(python)

Вот положим есть такой код:

from discord.ext import commands

settings = {
    # ...
}
 
bot = commands.Bot(command_prefix = settings['prefix'])

@bot.command()
async def hello(ctx):
    await ctx.send('Hello')
 
bot.run(settings['token'])

Как вне команды послать сообщение?


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

Автор решения: denisnumb
  1. Импортируем asyncio

  2. Создаем асинхронную функцию для отправки сообщения. Например - send_message()

  3. Вызываем функцию через asyncio, передавая нужные аргументы:

    asyncio.run_coroutine_threadsafe(send_message(762470056040330836, 'test'), bot.loop)

В данном случае 760470076070690836 - id текстового канала, а 'test' - сообщение.

Используя эту строку можно в любой момент вызвать функцию для отправки сообщения.

Пример кода:


import discord
from discord.ext import commands
import asyncio

bot = commands.Bot(command_prefix = settings['prefix'])

async def send_message(channel_id: int, msg):
    channel = bot.get_channel(channel_id)
    await channel.send(msg)

@bot.event
async def on_ready():
    asyncio.run_coroutine_threadsafe(send_message(760470076070690836, 'test'), bot.loop)

bot.run(settings['token'])

Как только бот будет готов к работе (функция on_ready()), в канал будет отправлено сообщение 'test'

→ Ссылка