iT邦幫忙

2023 iThome 鐵人賽

DAY 21
0
自我挑戰組

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

Python Discord Bot#21 - 做中學-指令限定

  • 分享至 

  • xImage
  •  

伺服器專用(私訊不可以!)

在私人的訊息中,機器人仍然可以觸發user_command 的應用程式,
但為了控制錯誤訊息等,還是能去控制回覆或處理方式

加入:

@commands.guild_only() # 伺服器專用

->

    @Bot.user_command(name="簽到資訊", description="顯示該成員的簽到資訊")
    @commands.has_permissions(administrator=True)
    @commands.is_owner() # 管理員才能用
    @commands.guild_only() # 伺服器專用
    async def get_member_info(ctx, member: discord.Member):
      await ctx.send_response("功能處理", ephemeral=True)

而錯誤訊息為 commands.NoPrivateMessage

    # 使用上方宣告的user_command 的function name 宣告屬性 @[functionName].error
    @get_member_info.error
    async def get_member_info_error(ctx, error):
      print(error)
      if isinstance(error, commands.NoPrivateMessage):
        await ctx.send_response("這個只能在伺服器裡才能用", ephemeral=True)
      else:
        await ctx.send_response("你沒有權限喔www不可以偷偷來", ephemeral=True)

https://ithelp.ithome.com.tw/upload/images/20230920/20106071KWUBn2V9vL.png

其他還能控制的內容

還能檢查的參數那下面會挑幾個來寫

@commands.check(predicate位置參數)

檢查方式,並代入function

def check_if_it_is_me(ctx):
    return ctx.message.author.id == 85309593344815104

@bot.command()
@commands.check(check_if_it_is_me)
async def only_for_me(ctx):
    await ctx.send('I know you!')

另一個寫法

def is_me():
    def predicate(ctx):
        return ctx.message.author.id == 85309593344815104
    return commands.check(predicate)

@bot.command()
@is_me()
async def only_me(ctx):
    await ctx.send('Only you!')

@commands.check_any(checks檢查)

可以一次性的檢查所有下的條件,例如前面的is_onwer、guild_only、也可以包含@commnads.check本身

@commands.has_permissions (perms權限) 、has_guild_permissions

一個是根據頻道權限不分在私人還是伺服器/ 一個是指伺服器的成員權限,像是 是否有管理權限?是否有踢人權限,詳細可以參考權限表
權限劃分很多,所以主要如果有疑慮,還是可以直接就 administrator(管理員) 跟不分就可以,剩下可以在DC 伺服器設定去調整。
※伺服器設定 > 整合 > 機器人和應用程式 > 指令點下去 > 新增身分組

@commands.guild_only()

只能在伺服器使用,不需代入任何內容。

@commands.dm_only()

只能在私人消息、頻道使用,不需代入任何內容。

@commands.is_onwer()

機器人所有者


上一篇
Python Discord Bot#20 - 做中學-管理員限定!
下一篇
Python Discord Bot#22 - 做中學-建立頻道
系列文
Python Discord Bot(DC機器人)31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言