昨天原本我也打算用身份組及join time但兩者都遇到了一點問題,後來發現是思路上的問題,我把問題想得太複雜了
一開始我以為可以用取得ID一樣的方式用fetch_member,後來我查了一些資料,如果要取得身份組就一定要先取得伺服器ID(Guild ID),後來嘗試了幾次也問過GPT但是GPT都給我怪怪得解法且無法解決,後來我想到可以用跟取得User ID一樣的思路,先取得伺服器ID再透過伺服器ID取得伺服器成員然後再取的成員資訊,這樣就可以取得成員的身份組
程式碼
from discord.ext import commands
import discord
intents = discord.Intents.all()
bot = commands.Bot(command_prefix='!',intents=intents)
import re
@bot.command()
async def userinfo(ctx, user_mention):
user_id = re.search(r'\d+', user_mention).group()
user = await bot.fetch_user(user_id)
guild = ctx.guild
member = await guild.fetch_member(user_id)
roles = member.roles
roles = roles[1:]
await ctx.send(f"User name: {user.name}\n, ID: {user.id}\n, 身份組:{[r.name for r in roles]}")
bot.run(‘token’)
程式碼說明
執行結果
錯誤寫法
@bot.command()
async def userinfo(ctx, user_mention):
role_names = re.findall(r'\| (\w+)', user_mention)
await ctx.send(f"Roles: {', '.join(role_names)}")
這個事GPT給我的解法她會遇到的問題是印不出身份組,如下圖
原本不取得join_time是因為我以為如果要用join_time就一定要用到guild在輸入指令時一定要輸入guild ID,這就需要使用者先知道guild ID
後來我發現可以用跟查看身份組一樣的寫法來解決
程式碼
from discord.ext import commands
import discord
import re
intents = discord.Intents.all()
bot = commands.Bot(command_prefix='!',intents=intents)
@bot.command()
async def userinfo(ctx, user_mention):
user_id = re.search(r'\d+', user_mention).group()
user = await bot.fetch_user(user_id)
guild = ctx.guild
member = await guild.fetch_member(user_id)
roles = member.roles
roles = roles[1:]
joined_at = member.joined_at
await ctx.send(f"User name: {user.name}\n, ID: {user.id}\n, 身份組:{[r.name for r in roles]}\n, Join time{joined_at}")
bot.run(‘token’)
程式碼解釋
跟身份組的是一樣的,只是多了取用join time
執行結果