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

Discord开发:如何获取指定服务器内成员的加入时间与用户名

问题描述

针对我的需求我最初使用了pip库discum,若有其他实现方案也欢迎大家给出建议。
我需要获取指定Discord服务器内用户的加入时间,目前已经可以拉取到群组内所有用户ID,但discum的文档非常不完善,我无法从中找到获取username和加入datetime的方法,理论上该功能应该可以实现,但我暂时没有找到正确的调用方式。

我当前获取成员ID的代码如下:

import discum

bot = discum.Client(token="token")

def close_after_fetching(resp, guild_id):
    if bot.gateway.finishedMemberFetching(guild_id):
        lenmembersfetched = len(bot.gateway.session.guild(guild_id).members)
        print(str(lenmembersfetched)+' members fetched')
        bot.gateway.removeCommand({'function': close_after_fetching, 'params' :{'guild_id': guild_id}})
        bot.gateway.close()

def get_members(guild_id, channel_id):
    bot.gateway.fetchMembers(guild_id, channel_id, wait=1)
    bot.gateway.command({'function': close_after_fetching, 'params': {'guild_id': guild_id}})
    bot.gateway.run()
    bot.gateway.resetSession()
    return bot.gateway.session.guild(guild_id).members

members = get_members('guild_id', 'channel_id')
membersList = []

for memberID in members:
    membersList.append(memberID)
    print(memberID)

目前我只能得到成员ID列表,无法获取更多信息,同时我怀疑拉取到的成员列表并不完整,是否存在这种情况?我知道discum的受众不广,所以任何帮助尤其是其他实现方案都不胜感激。

解决方案

我最终选择通过Discord机器人来实现该需求,这种方法更简单且文档更完善。我仍然使用Python开发,但切换到了discord库,access_token为我的Discord机器人令牌,查询结果会写入.txt文件,避免内容过长无法在Discord消息中发送。

import discord
import os
from io import BytesIO
import datetime

access_token= os.environ["ACCESS_TOKEN"]

intents = discord.Intents.default()
intents.members = True
client = discord.Client(intents=intents)


@client.event
async def on_ready():
  print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
  if message.author == client.user:
    return

  if message.content.startswith('!members'):
    userrole = message.author.top_role.name
    if userrole == "Admin" or userrole == "Moderators":
      memberList = ""
      username = ''
      dateJoined = ''
      guilds = client.guilds
      for guild in guilds:
        members = guild.members
        for member in members:
          if member.bot == False:
            username = member.name
            dateJoined = member.joined_at.strftime("%d-%m-%Y %H:%M:%S")                  
            memberList = memberList + username + "," + dateJoined + "\n"

      as_bytes = map(str.encode, memberList)
      content = b"".join(as_bytes)
      await message.reply("Member List", file=discord.File(BytesIO(content), "members.txt"))         

client.run(access_token)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 05:54:01