所以我正在尝试使用python中的discord.py库为我的raiding discord编写一个raiding bot。这个脚本应该在语音通道中形成一个成员列表以进行突袭。出于某种原因,此脚本无法正常工作。每当打印出memid时,它只会打印一个空列表。
如果有人熟悉discord.py并且可以告诉我为什么这不起作用,请这样做。这真让我烦恼,我已经尝试了所有知识来修复它。
#find raiding
voice_channel = discord.utils.get(ctx.message.server.channels, id = '440014722587426816')
#finds the members
members = voice_channel.voice_members
memids = []
for member in members:
memids.append(member.id)
print(memids)
答案 0 :(得分:1)
你的问题没有太多可以继续下去。我相信您的问题是您提供给id
的{{1}}不是语音频道的正确ID。这可能就是为什么你总是得到一个空列表的原因。
此语音中当前的
utils.get(...)
列表 渠道。如果Members
不是type
,那么这总是空的 阵列强>
如果您不完全确定语音频道的实际ChannelType.voice
,我建议您按名称和类型(id
)进行搜索:
discord.ChannelType.voice
答案 1 :(得分:1)
如果您知道频道的ID,则可以通过这种方式进行。对我有用:D
channel = client.get_channel(1234567890) #gets the channel you want to get the list from
members = channel.members #finds members connected to the channel
memids = [] #(list)
for member in members:
memids.append(member.id)
print(memids) #print info
答案 2 :(得分:1)
我遇到了同样的问题。 voice_channel.members
有时会返回空列表或不完整列表。
文档说:
voice_states
返回在此通道中具有语音状态的成员ID的映射。 注意:当成员高速缓存不可用时,此函数是低级别的,用于替换members
。 https://discordpy.readthedocs.io/en/latest/api.html#voicechannel
我猜想members
不能可靠地一致地返回准确的连接成员列表。
我用以下代码解决了这个问题:
member_ids = voice_channel.voice_states.keys()
答案 3 :(得分:1)
您需要启用“ SERVER MEMBERS INTENT: 如果您的漫游器跟踪服务器成员或下载整个成员列表,则可能需要服务器成员意图接收成员事件和成员列表。”。
答案 4 :(得分:0)
我知道频道ID,建议使用
voice_channel = client.get_channel(channel_id)
代替(documentation here)。如果您使用的是discord.py-rewrite,则还可以使用:
voice_client = ctx.guild.get_channel(channel_id)
如果您要查找的频道在上下文公会(documentation here)中。