Je crée mon bot pour Discord, je veux le faire, lorsqu'un utilisateur clique sur un certain canal vocal, un nouveau canal vocal est créé pour lui, qui est supprimé à la sortie. Voici le code :

import discord
from discord.ext import commands
from discord.utils import get
import asyncio

TOKEN = 'xxxx'

bot = commands.Bot(command_prefix='!')


@bot.event
async def on_voice_state_update(member, before, after):
    if after.channel != None:
        if after.channel.id == 700246237244555338:
            for guild in bot.guilds:
                maincategory = discord.utils.get(
                    guild.categories, id=700246237244555336)
                channel2 = guild.create_voice_channel(name=f'канал {member.display_name}', category=maincategory)
                await channel2.set_permissions(member, connect=True, mute_members=True, manage_channels=True)
                await member.move_to(channel2)

                def check(x, y, z):
                    return len(channel2.members) == 0
                await bot.wait_for('voice_state_update', check=check)
                await channel2.delete()


# RUN
bot.run(TOKEN)

Mais j'ai une erreur...

Ignoring exception in on_voice_state_update
Traceback (most recent call last):
  File "C:\Users\asus\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\client.py", line 333, in _run_event
    await coro(*args, **kwargs)
  File "jett.py", line 190, in on_voice_state_update
    await member.move_to(channel2)
  File "C:\Users\asus\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\member.py", line 626, in move_to
    await self.edit(voice_channel=channel, reason=reason)
  File "C:\Users\asus\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\member.py", line 592, in edit
    payload['channel_id'] = vc and vc.id
AttributeError: 'coroutine' object has no attribute 'id'
C:\Users\asus\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\Python38\site-packages\discord\client.py:340: RuntimeWarning: coroutine 'Guild.create_voice_channel' was never awaited
  pass
RuntimeWarning: Enable tracemalloc to get the object allocation traceback

Pouvez-vous m'aider à résoudre ce problème ou m'envoyer simplement un code fonctionnel pour les voix temporaires

0
3wpty 7 nov. 2020 à 20:09

1 réponse

Meilleure réponse

RuntimeWarning: Enable tracemalloc to get the object allocation traceback signifie généralement que vous avez oublié d'ajouter un mot-clé wait à une fonction asynchrone. La fonction asynchrone en question est probablement create_voice_channel, car la documentation indique qu'il s'agit d'un fonction asynchrone.

Pour résoudre ce problème, vous devez ajouter le mot-clé wait avant l'appel de fonction, comme ceci :

channel2 = await guild.create_voice_channel(name=f'канал {member.display_name}', category=maincategory)
0
Axiumin_ 8 nov. 2020 à 19:55