iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
自我挑戰組

Python Discord Bot(DC機器人)系列 第 10

Python Discord Bot#10 - User Commands 成員指令

  • 分享至 

  • xImage
  •  

同步commmands 註冊

在測試的時候,因為註冊命令需要時間,有時,註冊的名稱有做修改時,
還會在整合看到舊的名稱,
所以在 @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 Commands

成員指令,指根據成員而註冊的指令,並由頭像或成員資訊右鍵選單觸發,以下為官方縮圖。
https://ithelp.ithome.com.tw/upload/images/20230908/20106071O7krbBolki.png

註冊方式

user_command 也是依賴上篇所說的py-cord 套件

@Bot.user_command(name="加入伺服器時間" )
async def ctx_reset_user(ctx, member:discord.Member):
	await ctx.respond(f'用戶命令觸發: {member.joined_at}')

https://ithelp.ithome.com.tw/upload/images/20230909/20106071xt1wIoae6Z.png

因為是針對成員下指令的,
所以回傳為目標成員資訊。
參考閱讀: 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)

https://ithelp.ithome.com.tw/upload/images/20230909/20106071ESv4x2BLSw.png

範例code
TAG: it_#10


上一篇
Python Discord Bot#9 - Commands 命令
下一篇
Python Discord Bot#11 - Message Commands 訊息指令
系列文
Python Discord Bot(DC機器人)31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言