在測試的時候,因為註冊命令需要時間,有時,註冊的名稱有做修改時,
還會在整合看到舊的名稱,
所以在 @event 加入了 on_connect() 使用 client.sync_commands(),
雖然還是會需要等待一些時間,
但是整合那邊會比較同步。
from discord.ext import commands
client = commands.Bot(command_prefix='$', intents=intents)
@client.event
async def on_connect():
if client.auto_sync_commands:
await client.sync_commands()
print(f"{client.user.name} connected.")
成員指令,指根據成員而註冊的指令,並由頭像或成員資訊右鍵選單觸發,以下為官方縮圖。
而user_command 也是依賴上篇所說的py-cord 套件
@Bot.user_command(name="加入伺服器時間" )
async def ctx_reset_user(ctx, member:discord.Member):
await ctx.respond(f'用戶命令觸發: {member.joined_at}')
因為是針對成員下指令的,
所以回傳為目標成員資訊。
參考閱讀: discord.Member
@Bot.user_command(name="加入伺服器時間", description="計算加入伺服器的時間" )
async def count_user_joinDays(ctx, member: discord.Member):
# await ctx.respond(f'用戶命令觸發: {member.joined_at}')
today = dt.datetime.utcnow()
joinDay = member.joined_at.replace(tzinfo=None)
countDays = (today - joinDay).days
countSecs = (today - joinDay).seconds
countMins = countSecs // 60
countHours = countMins // 60
embed = discord.Embed(color=0x34495E)
embed.set_author(name=member.display_name, icon_url=member.display_avatar)
embed.title = f"已加入伺服器 {f'{countDays}天' if countDays else (f'{countHours}時' if countHours else f'{countMins}分')} "
await ctx.send_response(embed=embed)