Как подсчитывать кол-во участников, эмодзи и каналов со всех серверов на которых состоит бот? (discord.py)

Как это реализовать, так чтобы оно ещё и обновлялось при добавлении эмодзи, людей, и каналов?


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

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

Получаем список всех серверов, где есть бот: bot.guilds

Получаем список участников конкретного сервера: guild.members

Получаем список эмоджи сервера: guild.emojis

Получаем список каналов сервера: guild.channels


Проверить, голосовой канал или текстовый можно через его атрибут type.

Текстовый канал - discord.ChannelType.text, Голосовой - discord.ChannelType.voice


Получить информацию о создании нового канала можно при помощи события on_guild_channel_create(channel)

Получить информацию о подключении нового участника можно при помощи события on_member_join(member)

Получить информацию о создании нового emoji вроде бы как нельзя...


Далее выводим список нужно инфы через цикл for

import discord
from discord.ext import commands

bot = commands.Bot(command_prefix='!', intents = discord.Intents.all())

@bot.event
async def on_ready():
    number = 0
    for guild in bot.guilds:
        number += 1
        print(f'{number}. {guild.name}')
        
        print('Участники:')
        for member in guild.members:
            print(f'    {member.name}')

        print('Каналы:')
        voice = []; text = []
        for channel in guild.channels:
            if channel.type != discord.ChannelType.category:
                if channel.type == discord.ChannelType.text: text.append(channel)
                if channel.type == discord.ChannelType.voice: voice.append(channel)
        print(' Текстовые:')
        for channel in text:
            print(f'        {channel}')
        print(' Голосовые:')
        for channel in voice:
            print(f'        {channel}')

        print('Эмоджи:')
        for emoji in guild.emojis:
            print(f'    {emoji.name}')
        
        print(f'\n{"="*60}\n')


@bot.event
async def on_guild_channel_create(channel):
    print(f'На сервере {channel.guild} создали новый канал: {channel.name}')

@bot.event
async def on_member_join(member):
    print(f'На сервер {member.guild} зашел новый пользователь: {member.name}')

bot.run(TOKEN)

Не забудьте указать токен!

→ Ссылка