如何访问discord.py中的哪个语音通道用户写入命令?

Posted

技术标签:

【中文标题】如何访问discord.py中的哪个语音通道用户写入命令?【英文标题】:How to access which voice channel user writing command is in discord.py? 【发布时间】:2021-05-10 19:37:22 【问题描述】:

我开始用 discord.py 制作一个不和谐的音乐机器人。我已经学会了如何在用户编写命令时将机器人连接到语音通道:dj/play。但是,我希望机器人加入编写命令的用户所在的语音频道。有没有办法做到这一点?

这是我的代码:

 #imports
import discord
from discord.ext import commands
from random import randint
import aiohttp
from youtube_dl import YoutubeDL
import os

# dotenv.load_dotenv()

#setup
audio_downloder = YoutubeDL('format':'bestaudio')
client = commands.Bot(command_prefix=commands.when_mentioned_or("dj/"))

#commands
class MyCog(commands.Cog):
    def __init__(self, bot):
        self.bot = bot

    @commands.command()
    async def flip(self, ctx):
        num = randint(0,2)
        if num == 0:
            await ctx.send("It's heads")
        elif num == 1:
            await ctx.send("No")
        else:
            await ctx.send("It's tails")
    
    @commands.command()
    async def play(self, ctx, *args):
        voice_channel = discord.utils.get(ctx.guild.voice_channels, name="Dev Train")
        voice = discord.utils.get(client.voice_clients, guild=ctx.guild)
        await voice_channel.connect()


async def on_message(message):
    if message.author == client.user:
        return

    print(f"message.guild - message.channel - message.author <message.author.id>: message.content")



client.add_listener(on_message)

client.add_cog(MyCog(client))
client.run("TOKEN")

【问题讨论】:

感谢从我的帖子中删除令牌的人!我是新手,完全忘记了你不应该在网上发帖 不用担心,我建议您重新生成令牌,因为您仍然可以在 revisions 选项卡中看到令牌 【参考方案1】:

有一个东西叫做Converters(你可以阅读更多关于它们的信息here)。您可以使用特殊的VoiceChannelConverter,它只需在命令中键入参数即可工作

@commands.command()
async def play(self, ctx, voice_channel: discord.VoiceChannel):
    print(type(voice_channel)) # -> discord.channel.VoiceChannel
    await voice_channel.connect()

调用

prefixplay #channel        | channel mention
prefixplay 716389123897123 | channel ID
prefixplay general         | channel name

获取当前用户语音频道

@command.command()
async def play(self, ctx):
    if ctx.author.voice is None:
        return await ctx.send("You are not in a voice channel")

    voice_channel = ctx.author.voice.channel
    await voice_channel.connect()

【讨论】:

好的,如果有帮助,请务必接受答案【参考方案2】:

这应该可行:

# join command
@commands.command(description="joins a voice channel")
    async def join(self, ctx):
        if ctx.author.voice is None or ctx.author.voice.channel is None:
            return await ctx.send('You need to be in a voice channel to use this command!')

        voice_channel = ctx.author.voice.channel
        if ctx.voice_client is None:
            vc = await voice_channel.connect()
        else:
            await ctx.voice_client.move_to(voice_channel)
            vc = ctx.voice_client

# leave command
@commands.command(description="stops and disconnects the bot from voice")
    async def leave(self, ctx):
        await ctx.voice_client.disconnect()

【讨论】:

谢谢,我会试一试 太棒了!如果对你有用,请接受我的回答! 断开机器人的命令是什么? 我已经编辑了答案并添加了离开命令。

以上是关于如何访问discord.py中的哪个语音通道用户写入命令?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 discord.py 机器人加入语音通道之间添加暂停?

获取一个类别Channel的权限并设置为语音通道discord.py

如何查看特定用户在语音频道上花费的时间?[Discord.py]

检查语音频道中的人是不是打开了视频(discord.py)[关闭]

如何从 discord.py 中的文本通道获取所有消息的数组?

检查用户是不是在语音频道 discord.py