如何让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
相关产品推荐
相关产品推荐

