как выполнить событие только на сервере, с которого происходит событие discord.py? - PullRequest
0 голосов
/ 06 мая 2020

У меня есть бот на 2 серверах, и как только я хочу подсчитать всех участников с 1 сервера, он считает с обоих серверов. Допустим, у сервера 1 2 члена, а у сервера 2 3 члена, результат будет 5 вместо 2 (если я хочу увидеть, сколько членов у меня на сервере 1)

@client.event
async def on_message(message):
    if message.content.startswith('!count'):
        pom=0
        for guild in client.guilds:
            for member in guild.members:
                pom = pom + 1
        await message.channel.send("Number of people on server: " + str(pom))

Ответы [ 2 ]

0 голосов
/ 06 мая 2020

Поскольку вы находитесь в событии on_message, вы можете использовать message.guild.

@client.event
async def on_message(message):
    if message.content.startswith('!count'):
        pom = len(message.guild.members)
        await message.channel.send("Number of people on server: " + str(pom))
0 голосов
/ 06 мая 2020

Я предполагаю, что вы получаете либо общее количество участников с помощью bot.users, либо сумму всех членов для каждой гильдии в списке bot.guilds. Это, конечно, даст вам общую сумму участников, которую может видеть бот. Вместо этого вам нужно:

  1. Выберите один объект гильдии, скажем ctx.guild (гильдия, в которой использовалась команда)

  2. Используйте его атрибут member_count, который будет общим количеством членов в этой гильдии.

У вас останется строка ctx.guild.member_count , и если вы состоите в гильдии, состоящей из трех членов, их будет 3.

...