我想创建一个给定服务器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)
但它始终打印任何。 任何帮助将不胜感激,看起来我错过了一些关于不和谐的事情。
答案 0 :(得分:8)
有几点要指出:
您需要从客户端获取服务器。你不能只做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)
关于你的第二个问题,我不确定&#34;你的意思是给定一个用户身份验证令牌,它应该检查他是否是该服务器的成员。&#34; < / strong>即可。如果您获得了登录令牌,我就不知道您是如何使用它来检查他们是否在没有登录该帐户的情况下进入服务器。如果您做计划登录该帐户,我相信您需要在单独的脚本中执行此操作。但是,您可以轻松检查登录的客户端是否在服务器中:
@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")