Esp*_*azi 3 python discord discord.py
我想创建一个给出服务器ID的脚本,它应该返回该discord服务器的所有成员.并且给定用户验证令牌,它应该检查他是否是该服务器的成员.
我一直在寻找如何做到这一点,但徒劳无功!我已经尝试了这3个问题,但他们没有给我任何关于我想做什么的信息.
以下是我根据文档和入门教程尝试的内容:
import discord
import asyncio
import os
client = discord.Client()
email = os.getenv('Email')
password = os.getenv('Password')
server = discord.Server(id='416940353564704768')
@client.event
async def on_ready():
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
print('get all channel a client belong to ')
if server.members:
for member in server.members:
print('name{}'.format(member.user.name) )
else:
print('any')
client.run(email, password)
Run Code Online (Sandbox Code Playgroud)
但它总是打印任何.任何帮助将不胜感激,看起来我错过了一些关于不和谐的东西.
有几点需要指出:
您需要从客户端获取服务器.你不能这样做discord.Server(id="111111")
.而是使用get_server方法.client.get_server(id="11111")
.
把get_server
方法放在on_ready
事件中.这可确保client
连接到discord并已收到其服务器列表和所有其他数据.
甲Member
对象只是一个子类User
; 因此,你不能这样做,Member.user.name
因为既没有Member
也User
没有user
财产.你只需要做Member.name
.
最后,我不建议你使用自我机器人.也就是说,使用您自己的不和谐帐户就好像它是机器人一样.您应该使用带有令牌的实际僵尸账户.
最终,您的代码应如下所示.
import discord
import asyncio
import os
client = discord.Client()
email = os.getenv('Email')
password = os.getenv('Password')
@client.event
async def on_ready():
server = client.get_server(id="416940353564704768")
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
print('get all channel a client belong to ')
if server:
for member in server.members:
print('name: {}'.format(member.name) )
else:
print('any')
client.run(email, password)
Run Code Online (Sandbox Code Playgroud)
关于你的第二个问题,我不确定你的意思是"给定一个用户身份验证令牌,它应该检查他是否是该服务器的成员." .如果您获得了他们的登录令牌,我不知道您是如何使用它来检查他们是否在服务器中而没有登录该帐户.如果你不上登录到帐户计划,我相信你需要做的是,在一个单独的脚本.但是,您可以轻松检查登录的客户端是否在服务器中:
@client.event
async def on_ready():
server = discord.utils.get(client.servers, id="416940353564704768")
print('Logged in as')
print(client.user.name)
print(client.user.id)
print('------')
if server:
print("Client is a member of: {}".format(server.name))
else:
print("Client is not a member")
Run Code Online (Sandbox Code Playgroud)