discord.py Bot Voice Channels beitreten / verlassen?
Ich versuche einen discord.py bot zu machen, der hier dem VC beitreten soll, in dem der Nutzer, welcher den Command schreibt, ist. Bei join tritt der Bot dem VC bei, jedoch wird die darauf folgende Nachricht ("Joined vc.") nicht gesendet. Der Bot ist aber nicht eingefroren, da andere Commands noch funktionieren. Bei leave sendet der Bot die Nachricht ("Left vc."), verlässt den VC aber nicht. Woran liegt das und wie behebt man es? (Discord.py ist richtig installiert.)
Code:
import discord
from discord.ext import commands
intents = discord.Intents.all()
intents.members = True
client = commands.Bot(command_prefix = '!', intents = intents)
@client.command(pass_context = True)
async def join(ctx):
if(ctx.author.voice):
channel = ctx.message.author.voice.channel
await channel.connect()
ctx.send("Joined vc.")
else:
await ctx.send("You are not in a vc.")
@client.command(pass_context = True)
async def leave(ctx):
if(ctx.voice_client):
await ctx.guild.voice_client.disconnect()
await ctx.send("Left vc.")
else:
await ctx.send("I am not in a vc.")
client.run('Token zensiert')
1 Antwort
Wenn ich das richtig sehe, wird
await channel.connect()
nie "erfüllt", sodass die nächste Zeile mit der Nachricht nicht ausgegeben wird. Auch die Nachricht im Else wird natürlich nicht gesendet, da die if-Abfrage ja true war.
Der Bot ist nicht eingefroren, da deine Funktionen (wie bei einem Discord Bot üblich) asynchron geschrieben sind.
Schau einfach mal in den Docs, was dir channel.connect() liefert, vielleicht ist es ein falscher Aufruf. Ansonsten würde ich ggf. als Workaround einfach mit einem Delay arbeiten.
Hoffe das hilft.
Gruß
Ich habe mal kurz in die Docs geschaut und
is_connected()
gefunden.
Wenn du dir mehr dazu durchlesen willst, schau gerne selbst mal in die Docs.
Versuchs doch mal damit.
ctx.voice_client.is_connected() ist false, auch wenn der Bot in einem VC ist
channel.connect() gibt ein VoiceProtocol aus, jedoch bringt mir dieses nichts, da ich ja nur dem Channel beitreten will. Außerdem, warum funktioniert leave(ctx) dann nicht?