以下文章已於 2021/09/16 轉移至 微笑之家
對於discord.js更新,或是有其他問題,都歡迎到以下網址查看喔
本站
本主題
本文章
今天想教怎麼讓機器人安靜/啟動
這樣才能說之後想教的東西
機器人需要有個控制是否啟動的開關
可設定在該群組 or 頻道是否可以接收指令
因為我們的機器人會有多組系統(文字回答&音樂系統)
會希望再額外設定可以在指定的群組 or 頻道是否可以接收特定系統的指令
首先請先幫我新建一個JSON檔案,叫做shup.json…或是你喜歡的名字xD
記得JSON檔案都要放在JSONHome喔
type
型態,代表這一筆JSONObject是甚麼類型
目前還用不到,都設1就好
GroupID
群組ID,主要給後續判定的部份
GroupName
群組名稱,用處不大、主要給使用者好分辨的
Power
代表不可使用的權限,後面會一邊寫一邊解說
禁言指令,顧名思義、希望機器人是否被禁言的開關
這開關需要放在所有指令之前,這樣才可以判斷出內容是否需要被禁止
老樣子,我們要先引入json
放在message事件的上方,當判斷權限為false,就停止後續行為
接著我們實作IsShut
IsShut根據shup.json,先判斷訊息群組&訊息有沒有資料,再來判斷資料中存不存在tempPrefix,存在的話就要禁用功能,因為默認不存在時文檔中不會有資料,自然就不該設限
//禁言系統判斷
function IsShut(msg, tempPrefix) {
//群組id
const guildID = msg.guild.id;
//頻道id
const channelID = msg.channel.id;
//當前狀態
let status = true;
//先判斷群組,群組判斷完判斷頻道(頻道權限優先於群組)
const guildIF = shup.Group.find(element => {
if (element.GroupID == guildID) {
return element.Power.indexOf(tempPrefix) !== -1;
}
return false;
})
//找到資料 = 此群組存在Group中且Power存在此次指令代碼
if (guildIF !== undefined) {
status = false;
}
//頻道
const channelIF = shup.Channel.find(element => {
if (element.ChannelID == channelID) {
return true;
}
return false;
})
//找到資料 = 此頻道存在Channel中
if (channelIF !== undefined) {
//Power有此資料=>禁用功能 無資料=>不設限
if (channelIF.Power.indexOf(tempPrefix) !== -1) {
status = false;
} else {
status = true;
}
}
return status;
}
接著我們將資料實際key入shup.json看看
不知道同學有沒有看出Power的判斷依據了?
沒錯,就是依據prefix時設置的各系統代表ID
我們試著跑看看
另一個頻道
大成功~
這樣就做到各頻道各功能權限設置了
不過存在一些問題
例如放在預設(default)的資料庫文字比對功能要怎麼判,應該是預設的-1吧
如果是-1要怎麼判斷呢?
以及目前這樣的做法只做到判斷禁言功能的實作,還沒有辦法在前台讓使用者手動新增
這部份筆者先賣個關子,各位可以嘗試寫看看,明天我們繼續做別的功能,之後再繞回來