You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Discord Bot离开无法获取ID的服务器?

解决Bot离开无权限访问服务器的问题

嘿,我来帮你搞定这个问题!先看看你现在的代码:

my_server = client.get_server('server id') 
@client.event 
async def on_ready(): 
    for server in client.servers: 
        if server != my_server: 
            await client.leave_server(server) 
@client.event 
async def on_server_join(server): 
    if server != my_server: 
        await client.leave_server(server) 

你遇到的问题是:填了目标服务器ID后,Bot能离开其他服务器,但有些服务器你没权限访问拿不到ID,不知道怎么让Bot离开这些服务器对吧?

其实思路可以换一下——不用管那些你没权限的服务器,我们只让Bot留在你指定的服务器里,其他全部自动离开,不管你能不能访问那些服务器的详情。

具体修改方法如下:

  • 先把你想要Bot保留的服务器ID存到一个列表里(可以放多个,如果你需要Bot留在多个服务器的话)
  • 遍历Bot加入的所有服务器时,检查当前服务器的ID是否在这个允许列表里,不在的话就执行离开操作

修改后的代码示例:

# 这里填入你想要Bot保留的服务器ID,多个的话用逗号分隔
allowed_server_ids = ["你的目标服务器ID"]

@client.event 
async def on_ready(): 
    # 遍历Bot加入的所有服务器
    for server in client.servers:
        # 把服务器ID转成字符串,和列表里的ID匹配
        if str(server.id) not in allowed_server_ids:
            try:
                await client.leave_server(server)
                print(f"成功离开服务器: {server.name}")
            except Exception as e:
                print(f"离开服务器 {server.name} 失败: {str(e)}")

@client.event 
async def on_server_join(server): 
    if str(server.id) not in allowed_server_ids:
        try:
            await client.leave_server(server)
            print(f"自动离开新加入的服务器: {server.name}")
        except Exception as e:
            print(f"自动离开服务器 {server.name} 失败: {str(e)}")

为什么这样能行?因为哪怕你没有权限访问某个服务器的内容,Bot本身是在这个服务器中的,所以client.servers里依然会有这个服务器的对象,你可以直接获取它的id来判断是否需要保留,然后调用离开方法。

另外加上try-except块是为了处理可能的错误(比如Bot没有离开该服务器的权限),这样不会导致程序崩溃,还能打印日志帮你排查问题。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:44:32