Widziałem wiele wielu stron, ale nie mogę wymyślić składni dla programu, aby uzyskać wszystkich identyfikatorów użytkowników po podłączeniu do określonego kanału głosowego. Np. Pls No COGS, a także wszystkie w identyfikatorze No Imię, jestem w porządku z IDS

Kod:

import discord
import json
from discord.ext import commands
from time import sleep
import asyncio
from discord.utils import get

bot = commands.Bot(command_prefix = "|")

@bot.event
async def on_ready():
    print(f'bots up')
    print(bot)
    bot.loop.create_task(status())
#@bot.command()
async def status():
    role_id=831148974789623859
    role = discord.guild.get_role(role_id)
    while True:
        voice_channel = bot.get_channel(798812392677965824)
        member_ids = voice_channel.voice_states.keys()
        memids = []
        for member in member_ids:
            member. add_role(role)
        await asyncio.sleep(1)
    
        
bot.run('token')
-1
thinker 010 13 kwiecień 2021, 09:59

1 odpowiedź

Najlepsza odpowiedź

Musimy użyć innego event dla tego i zreformować czek w celu użycia kodu dla większej liczby zdarzeń / ról.

Możesz użyć On_voice_state_update Funkcja W celu sprawdzenia W którym kanale jest członek i na podstawie tego dodania lub usuwania roli.

@bot.event
async def on_voice_state_update(member, before, after):
    channel = before.channel or after.channel

    if channel.id == ChannelID: # Pass your channel ID
        if before.channel is None and after.channel is not None: # Member joins the defined channel
            role = discord.utils.get(member.guild.roles, id=RoleID) # Inser RoleID
            await member.add_roles(role) # Role is given
        elif before.channel is not None and after.channel is None:
            role = discord.utils.get(member.guild.roles, id=RoleID)
            await member.remove_roles(role) # Role removed because he left the channel

Co robi kod?

before.channel is None = sprawdza, czy użytkownik jest / nie był w kanale.

after.channel is not None = sprawdza kanał, który użytkownik połączył, a następnie dodaje rolę do użytkownika.

before.channel is not None and after.channel is None = użytkownik nie jest już w kanale głosowym.

0
Dominik 13 kwiecień 2021, 11:09