iT邦幫忙

2023 iThome 鐵人賽

DAY 9
0

昨天使用了MemberCinverter,那今天要來寫用來查看Guild資訊的GuildConverter。

1.commands.GuildConverter

commands.GuildConverter 是 Discord.py 中的一個參數轉換器(Converter),它可以用來將文字轉換成 Guild (伺服器)物件
查找伺服器的順序如下(順序由上至下):

  1. 通過ID進行查找。
  2. 通過名稱進行查找。
    參數:
  • id:伺服器的ID。
  • name:伺服器的名稱。
    引發的錯誤:
  • BadArgument:未傳遞參數或找不到伺服器。
  • HTTPException:獲取伺服器失敗。

2.程式碼

from discord.ext import commands 
import discord

intents = discord.Intents.all()

@bot.command()
async def serverinfo(ctx, guild: commands.GuildConverter = None):
    if guild is None:
        guild = ctx.guild
    await ctx.send(f'{guild.id} ')

bot.run(‘token’)

3.程式碼說明

  1. 使用@bot.command()創建一個serverinfo命令
  2. 檢查 guild 是否為 None:
    • 如果是 None,表示呼叫時沒有提供伺服器資訊。
    • 這時將 guild 設定為當前上下文的伺服器 ctx.guild。
    • 使用commands.GuildConverter將命令參數轉換為guild物件
  3. 透過guild物件的屬性取得使用者相關資訊 id為伺服器ID
  4. 使用ctx.send()傳送獲取的資訊給使用者

4.執行結果

https://ithelp.ithome.com.tw/upload/images/20230916/20161116Hnzgv12mvq.png

5.差異

GuildConverter與MemberConverter有個巨大的差異,MemberConverter會自動預設值但GuildConverter。自動預設值的意思是如果在呼叫命令時沒有輸入使用者 ID 或其他資訊,它會自動將值預設為這個命令中指定的使用者,像是
!userinfo @apple
MemberConverter就會自動預設為apple;但GuildConverter無法做到,像是
@bot.command()
async def getguild(ctx):
await ctx.send(f'guild id: {ctx.guild.id}')
就無法執行,一定要有guild: commands.GuildConverter = None


上一篇
[Day8]查看username、id、加入時間及身份組(下)
下一篇
[Day10]用ctx來查看username、id及Guild資訊
系列文
使用discord.py開發自己的機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言