Ctx全名context(上下文),上下文的意思是幫你輸入
上文:hello
下文:hello world!
在上文的部分會包含了使用者的name、id、伺服器id等等的屬性,那bot就可以透過上文來知道他要在哪個伺服器的哪個頻道回覆使用者下文,因此我們可以不用Converter就能獲得資訊
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’)
Guild資訊:
User資訊:
bot.fetch_user()
r'\d+' 是一個正則表達式,用於匹配字符串中的數字:
r表示後面的字符串為原始字符串,這樣可以避免反斜槓被解釋為轉義字符。
\d匹配任意數字,加上+號表示匹配多個連續的數字。
所以r'\d+'整體的意思是匹配一個或多個連續的數字。
在這個案例中,我們用它來從mention字符串中提取出用戶ID,因為ID就是一個由多個數字組成的字符串。
r'\d+'匹配字符串中的數字部分,然後用.group()取出匹配的結果,就可以得到提到的用戶的ID。
.group是正則表達式中一個暫存區就是暫存提取出來的東西
提取:
在mention背後有很多資訊包含:
在這段程式中簡單來解釋正則表達式就是,user_mention背後會有很多使用者的資訊然後re.search從中找出user id。