<p>正如Parasol Kirby所说,您需要使用<code>global</code>关键字。为了适应您的情况,我们需要做一些更改</p>
<p>要使<code>voicebot</code>变量成为全局变量,只需在命令顶部添加<code>global voicebot</code>。这样,您就可以从每个函数中使用这个变量</p>
<p>然后,为了检查bot是否已经连接到语音通道,我们不需要使用<code>voicebot</code>变量。如果bot位于如下语音通道中,则可以创建一个返回<code>True</code>的函数:</p>
<pre class="lang-py prettyprint-override"><code>def is_connected(ctx):
voice_client = discord.utils.get(ctx.bot.voice_clients, guild=ctx.guild)
return voice_client and voice_client.is_connected()
</code></pre>
<p>现在,要检查bot是否没有从命令中连接到语音通道,只需使用<code>is_connected</code>函数并在上下文中“传入”</p>
<pre class="lang-py prettyprint-override"><code>if not is_connected(ctx):
</code></pre>
<p>因此,完整代码如下所示:</p>
<pre class="lang-py prettyprint-override"><code>def is_connected(ctx):
voice_client = discord.utils.get(ctx.bot.voice_clients, guild=ctx.guild)
return voice_client and voice_client.is_connected()
@bot.command(name='join', help='Joins the voice channel you are in')
async def JoinVoiceofAuthor(ctx):
global voicebot
vchannel = ctx.message.author.voice
if vchannel != None:
if not is_connected(ctx):
voicebot = await vchannel.channel.connect()
await ctx.send('Joining you, '+str(ctx.message.author.mention)+', in voice channel "'+str(vchannel.channel)+'"')
</code></pre>