You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Discord.py-rewrite:如何实现机器人在语音频道中自我静音或自我Deaf?

在Discord.py-Rewrite中实现机器人自我静音/Deaf功能

其实这个需求的实现比你想象的简单——核心就是修改机器人自身在服务器中的语音状态,用Guild.me.edit()方法就能搞定,完全不需要复杂的API调用。

先给你直接上可运行的代码示例,包含加入频道、静音/取消静音、Deaf/取消Deaf的命令:

from discord.ext import commands

# 初始化机器人,前缀设为!
bot = commands.Bot(command_prefix='!')

@bot.command(name="join")
async def join_voice(ctx):
    # 先检查调用命令的用户是否在语音频道里
    if not ctx.author.voice:
        await ctx.send("你得先进入一个语音频道我才能跟着进去呀!")
        return
    
    # 加入用户所在的语音频道
    voice_channel = ctx.author.voice.channel
    await voice_channel.connect()
    
    # 加入后直接自我静音(可以根据需求注释掉这行)
    await ctx.guild.me.edit(mute=True)
    await ctx.send("成功加入频道并开启自我静音!")

@bot.command(name="mute")
async def self_mute(ctx):
    # 先确认机器人已经在语音频道里
    if not ctx.guild.voice_client:
        await ctx.send("我还没进任何语音频道呢,没法静音!")
        return
    
    # 设置自我静音
    await ctx.guild.me.edit(mute=True)
    await ctx.send("已开启自我静音🔇")

@bot.command(name="unmute")
async def self_unmute(ctx):
    if not ctx.guild.voice_client:
        await ctx.send("我不在语音频道里,不需要取消静音呀!")
        return
    
    await ctx.guild.me.edit(mute=False)
    await ctx.send("已解除自我静音🔊")

@bot.command(name="deaf")
async def self_deaf(ctx):
    if not ctx.guild.voice_client:
        await ctx.send("我还没进语音频道,没法开启Deaf!")
        return
    
    await ctx.guild.me.edit(deaf=True)
    await ctx.send("已开启自我Deaf🤫")

@bot.command(name="undeaf")
async def self_undeaf(ctx):
    if not ctx.guild.voice_client:
        await ctx.send("我不在语音频道里,不需要取消Deaf呀!")
        return
    
    await ctx.guild.me.edit(deaf=False)
    await ctx.send("已解除自我Deaf👂")

# 替换成你的机器人Token
bot.run("YOUR_BOT_TOKEN_HERE")

关键知识点解释:

  • ctx.guild.me:这个对象代表机器人在当前服务器中的身份(Member实例),通过它的edit()方法可以直接修改自身的语音状态
  • mute=True/False:控制机器人的自我静音状态——这是机器人主动设置的,和服务器强制静音完全是两回事
  • deaf=True/False:同理,控制机器人的自我Deaf状态,也是主动操作

注意事项:

  1. 不需要额外权限:修改自身的静音/Deaf状态不需要机器人拥有管理员或其他特殊权限,只要它已经加入了目标语音频道就行
  2. 非上下文场景的调用:如果你的逻辑不在命令上下文(比如后台任务)里,可以通过服务器ID获取机器人实例,比如:
    guild = bot.get_guild(你的服务器ID)
    await guild.me.edit(mute=True)
    

内容的提问来源于stack exchange,提问作者BluePigeon

火山引擎 最新活动