iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
Software Development

使用discord.py開發自己的機器人系列 第 10

[Day10]用ctx來查看username、id及Guild資訊

  • 分享至 

  • xImage
  •  

1.ctx

Ctx全名context(上下文),上下文的意思是幫你輸入
上文:hello
下文:hello world!
在上文的部分會包含了使用者的name、id、伺服器id等等的屬性,那bot就可以透過上文來知道他要在哪個伺服器的哪個頻道回覆使用者下文,因此我們可以不用Converter就能獲得資訊

2.程式碼

Guild資訊:

from discord.ext import commands 
import discord

intents = discord.Intents.all()

bot = commands.Bot(command_prefix='!',intents=intents)
@bot.command()
async def getguild(ctx):
    await ctx.send(f'guild id: {ctx.guild.id}')

bot.run(‘token’)

user資訊:

from discord.ext import commands 
import discord

intents = discord.Intents.all()
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)
  

    await ctx.send(f"User name: {user.name}, ID: {user.id}")


bot.run(’token’)

3.程式碼說明

Guild資訊:

  1. 使用@bot.command()創建一個getguild命令
  2. 在命令中,使用ctx.guild可以獲取當前上下文的guild對象(即當前所在的伺服器)
  3. 通過guild.id獲取伺服器ID
  4. 使用ctx.send()將server ID發送給使用者

User資訊:

  1. 導入需要的模塊re: 正則表達式
  2. 使用@bot.command()創建一個userinfo命令
  3. 從傳入的參數user_mention(標記的人)中用正則表達式提取出用戶ID
  4. 將提取出的用戶ID傳入bot.fetch_user()獲取對應的User對象
  5. 通過User取用name和id屬性獲取用戶資料
  6. 使用ctx.send()將獲取的資料傳送出去

bot.fetch_user()

4.正則表達式(re.search)

r'\d+' 是一個正則表達式,用於匹配字符串中的數字:
r表示後面的字符串為原始字符串,這樣可以避免反斜槓被解釋為轉義字符。
\d匹配任意數字,加上+號表示匹配多個連續的數字。
所以r'\d+'整體的意思是匹配一個或多個連續的數字。
在這個案例中,我們用它來從mention字符串中提取出用戶ID,因為ID就是一個由多個數字組成的字符串。
r'\d+'匹配字符串中的數字部分,然後用.group()取出匹配的結果,就可以得到提到的用戶的ID。
.group是正則表達式中一個暫存區就是暫存提取出來的東西

提取:
在mention背後有很多資訊包含:

  • 使用者ID
  • 顯示名稱
  • 服務器內的身份組等等
    因此要用提取這個詞

在這段程式中簡單來解釋正則表達式就是,user_mention背後會有很多使用者的資訊然後re.search從中找出user id。

5.執行結果

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


上一篇
[Day9]查看伺服器(Guild)資訊
下一篇
[Day11]Day9的問題與討論
系列文
使用discord.py開發自己的機器人30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言