Discord.py отправить сообщение на указанный c канал - PullRequest
0 голосов
/ 09 июля 2020

Я хотел бы отправить сообщение в специальном текстовом канале c независимо от сервера, поэтому я не могу жестко запрограммировать идентификатор своего канала.

Эта часть кода работает:

    @client.event
async def on_guild_join(guild):
    general = find(lambda x: x.name == 'general',  guild.text_channels)
    if general and general.permissions_for(guild.me).send_messages:
        await general.send('Hello {}!'.format(guild.name))

Но моя проблема в том, что эта часть ведьмы находится в Cog:

import discord, httplib2, random, string
from discord.ext import commands
from datetime import datetime
from discord.ext.commands import cooldown
from discord.utils import find
class Cog01(commands.Cog):

    def __int__(self, client):
        self.client = client



    @commands.Cog.listener()
    async def on_ready(self):
        print('Cog01 is loaded')

        fff = find(lambda x: x.name == 'general',  guild.text_channels)


def setup(client):
    client.add_cog(Cog01(client))

Я получил эту ошибку:

NameError: name 'guild' is not defined

Я много чего пробовал, иногда ошибка пропадала, но все равно не работала.

Я уверен, что это возможно, я потерял старую версию своего кода, которая работала.

Я искал решение в течение нескольких часов, но решение может быть действительно простым, я новичок в программировании.

1 Ответ

0 голосов
/ 10 июля 2020

commands.Bot имеет атрибут guilds, который возвращает список каждой гильдии, к которой подключен клиент.
Затем каждые Guild объект имеет атрибут system_channel. Именно на этом канале отправляются сообщения типа Пользователь присоединился .

Например, если вы хотите отправить сообщение по этим каналам, когда ваш бот будет готов, вы можете сделать это следующим образом путь:

from discord.ext import commands

class Cog01(commands.Cog):
    def __int__(self, client):
        self.client = client

    @commands.Cog.listener()
    async def on_ready(self):
        for guild in self.client.guilds:
            await guild.system_channel.send("I'm ready to go!")

def setup(client):
    client.add_cog(Cog01(client))
...