Added 4th & 5th questions to quick setup
This commit is contained in:
+126
-5
@@ -4,6 +4,60 @@ import ansis from "ansis"
|
|||||||
import * as discord from "discord.js"
|
import * as discord from "discord.js"
|
||||||
import {renderHeader} from "./cli"
|
import {renderHeader} from "./cli"
|
||||||
|
|
||||||
|
interface ODQuickSetupVariables {
|
||||||
|
client?:api.ODClientManager,
|
||||||
|
guild?:discord.Guild,
|
||||||
|
globalAdmins?:string[],
|
||||||
|
mainColor?:discord.ColorResolvable
|
||||||
|
}
|
||||||
|
const quickSetupStorage: ODQuickSetupVariables = {}
|
||||||
|
const autoCompleteMenuOpts: Terminal.SingleLineMenuOptions = {
|
||||||
|
style:terminal.white,
|
||||||
|
selectedStyle:terminal.bgBlue.white
|
||||||
|
}
|
||||||
|
const presetColors = new Map<string,number>([
|
||||||
|
["dark red",discord.Colors.DarkRed],
|
||||||
|
["red",0xff0000],
|
||||||
|
["light red",0xf06c6c],
|
||||||
|
["dark orange",0xed510e],
|
||||||
|
["orange",0xed6f0e],
|
||||||
|
["light orange",0xf0b06c],
|
||||||
|
["openticket",0xf8ba00],
|
||||||
|
["dark yellow",0xdeb100],
|
||||||
|
["yellow",0xffff00],
|
||||||
|
["light yellow",0xffff8c],
|
||||||
|
["banana",0xffe896],
|
||||||
|
["lime",0xa8e312],
|
||||||
|
["dark green",0x009600],
|
||||||
|
["green",0x00ff00],
|
||||||
|
["light green",0x76f266],
|
||||||
|
["dark cyan",0x00abab],
|
||||||
|
["cyan",0x00ffff],
|
||||||
|
["light cyan",0x63ffff],
|
||||||
|
["aquamarine",0x7fffd4],
|
||||||
|
["dark skyblue",0x006bc9],
|
||||||
|
["skyblue",0x0095ff],
|
||||||
|
["light skyblue",0x40bfff],
|
||||||
|
["dark blue",0x00006e],
|
||||||
|
["blue",0x0000ff],
|
||||||
|
["light blue",0x5353fc],
|
||||||
|
["blurple",0x5865F2],
|
||||||
|
["dark purple",0x3f009e],
|
||||||
|
["purple",0x8000ff],
|
||||||
|
["light purple",0x9257eb],
|
||||||
|
["dark pink",0xb82ab0],
|
||||||
|
["pink",0xff6bf8],
|
||||||
|
["light pink",0xff9cfa],
|
||||||
|
["magenta",0xff00ff],
|
||||||
|
["black",0x000000],
|
||||||
|
["brown",0x806050],
|
||||||
|
["dark gray",0x4f4f4f],
|
||||||
|
["gray",0x808080],
|
||||||
|
["light gray",0xb3b3b3],
|
||||||
|
["white",0xffffff],
|
||||||
|
["invisible",0x393A41]
|
||||||
|
])
|
||||||
|
|
||||||
export async function renderQuickSetup(backFn:() => api.ODPromiseVoid){
|
export async function renderQuickSetup(backFn:() => api.ODPromiseVoid){
|
||||||
if (quickSetupRequiresReset()) await renderQuickSetupWarning(backFn)
|
if (quickSetupRequiresReset()) await renderQuickSetupWarning(backFn)
|
||||||
else await renderQuickSetupWelcome(backFn)
|
else await renderQuickSetupWelcome(backFn)
|
||||||
@@ -173,12 +227,16 @@ async function renderQuickSetupBotToken(backFn:() => api.ODPromiseVoid){
|
|||||||
terminal.gray("Your bot should be online with the status 'Configuring Open Ticket...'.")
|
terminal.gray("Your bot should be online with the status 'Configuring Open Ticket...'.")
|
||||||
await utilities.timer(3000)
|
await utilities.timer(3000)
|
||||||
//continue
|
//continue
|
||||||
await renderQuickSetupServer(result,async () => {await renderQuickSetupBotToken(backFn)})
|
quickSetupStorage.client = result
|
||||||
|
await renderQuickSetupServer(async () => {await renderQuickSetupBotToken(backFn)})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function renderQuickSetupServer(client:api.ODClientManager,backFn:() => api.ODPromiseVoid){
|
async function renderQuickSetupServer(backFn:() => api.ODPromiseVoid){
|
||||||
|
const {client} = quickSetupStorage
|
||||||
|
if (!client) return
|
||||||
|
|
||||||
renderHeader("⏱️ Open Ticket Quick Setup: Discord Server")
|
renderHeader("⏱️ Open Ticket Quick Setup: Discord Server")
|
||||||
|
|
||||||
terminal.bold.blue("(Step 3) Please select a Discord Server to use.\n")
|
terminal.bold.blue("(Step 3) Please select a Discord Server to use.\n")
|
||||||
@@ -199,15 +257,78 @@ async function renderQuickSetupServer(client:api.ODClientManager,backFn:() => ap
|
|||||||
}).promise
|
}).promise
|
||||||
|
|
||||||
if (answer.canceled) return backFn()
|
if (answer.canceled) return backFn()
|
||||||
if (answer.selectedIndex == 0) return await renderQuickSetupServer(client,backFn)
|
if (answer.selectedIndex == 0) return await renderQuickSetupServer(backFn)
|
||||||
const server = guilds[answer.selectedIndex-1]
|
const server = guilds[answer.selectedIndex-1]
|
||||||
await renderQuickSetupAdminRoles(client,server,[],async () => {await renderQuickSetupServer(client,backFn)})
|
quickSetupStorage.guild = server
|
||||||
|
await renderQuickSetupAdminRoles([],async () => {await renderQuickSetupServer(backFn)})
|
||||||
}
|
}
|
||||||
|
|
||||||
async function renderQuickSetupAdminRoles(client:api.ODClientManager,guild:discord.Guild,selectedAdmins:string[],backFn:() => api.ODPromiseVoid){
|
async function renderQuickSetupAdminRoles(selectedAdmins:string[],backFn:() => api.ODPromiseVoid,cachedRoles?:discord.Role[]){
|
||||||
|
const {client,guild} = quickSetupStorage
|
||||||
|
if (!client || !guild) return
|
||||||
|
|
||||||
renderHeader("⏱️ Open Ticket Quick Setup: Admin Roles")
|
renderHeader("⏱️ Open Ticket Quick Setup: Admin Roles")
|
||||||
|
|
||||||
terminal.bold.blue("(Step 4) Please select all 'Global Admins' roles to use.\n")
|
terminal.bold.blue("(Step 4) Please select all 'Global Admins' roles to use.\n")
|
||||||
terminal.gray("Users with one of these roles will be able to access & interact with all tickets.\n\n")
|
terminal.gray("Users with one of these roles will be able to access & interact with all tickets.\n\n")
|
||||||
|
|
||||||
|
const roles = cachedRoles ?? (await guild.roles.fetch()).toJSON().sort((a,b) => b.position-a.position)
|
||||||
|
const nameList = roles.map((r) => r.name)
|
||||||
|
const longestName = utilities.getLongestLength(nameList)
|
||||||
|
const roleList = roles.map((r) => selectedAdmins.includes(r.id) ? ansis.green("(✅) "+r.name.padEnd(longestName+5," ")+ansis.gray(" ("+r.id+")")) : r.name.padEnd(longestName+5," ")+ansis.gray(" ("+r.id+")"))
|
||||||
|
|
||||||
|
const answer = await terminal.singleColumnMenu([ansis.green("🔄 <Refresh List>"),ansis.green("🆗 <Continue>"),...roleList],{
|
||||||
|
leftPadding:"> ",
|
||||||
|
style:terminal.cyan,
|
||||||
|
selectedStyle:terminal.bgDefaultColor.bold,
|
||||||
|
submittedStyle:terminal.bgBlue,
|
||||||
|
extraLines:2,
|
||||||
|
cancelable:true
|
||||||
|
}).promise
|
||||||
|
|
||||||
|
if (answer.canceled) return backFn()
|
||||||
|
if (answer.selectedIndex == 0) return await renderQuickSetupAdminRoles(selectedAdmins,backFn)
|
||||||
|
if (answer.selectedIndex == 1){
|
||||||
|
quickSetupStorage.globalAdmins = selectedAdmins
|
||||||
|
return await renderQuickSetupColorPicker(backFn)
|
||||||
|
}
|
||||||
|
const adminRole = roles[answer.selectedIndex-2]
|
||||||
|
const index = selectedAdmins.findIndex((r) => r == adminRole.id)
|
||||||
|
if (index > -1) selectedAdmins.splice(index,1)
|
||||||
|
else selectedAdmins.push(adminRole.id)
|
||||||
|
return await renderQuickSetupAdminRoles(selectedAdmins,backFn,roles)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function renderQuickSetupColorPicker(backFn:() => api.ODPromiseVoid,tryAgain?:boolean){
|
||||||
|
const {client,guild,globalAdmins} = quickSetupStorage
|
||||||
|
if (!client || !guild || !globalAdmins) return
|
||||||
|
|
||||||
|
renderHeader("⏱️ Open Ticket Quick Setup: Main Color")
|
||||||
|
|
||||||
|
terminal.bold.blue("(Step 5) Please insert a valid hex-color to use in all embeds.\n")
|
||||||
|
terminal.gray("You can also choose from existing presets. (e.g. red, green, blue, ...)\n\n")
|
||||||
|
terminal.gray(tryAgain ? ansis.bold.red("Invalid color, please try again!\n")+ansis.gray("> ") : "> ")
|
||||||
|
|
||||||
|
const answer = await terminal.inputField({
|
||||||
|
style:terminal.white,
|
||||||
|
hintStyle:terminal.gray,
|
||||||
|
cancelable:true,
|
||||||
|
autoComplete:Array.from(presetColors.keys()),
|
||||||
|
autoCompleteHint:true,
|
||||||
|
autoCompleteMenu:autoCompleteMenuOpts as Terminal.Autocompletion
|
||||||
|
}).promise
|
||||||
|
|
||||||
|
if (typeof answer != "string") return await backFn()
|
||||||
|
else{
|
||||||
|
if (!Array.from(presetColors.keys()).includes(answer) && !/^#[0-9a-f]{6}$/.test(answer)) return await renderQuickSetupColorPicker(backFn,true)
|
||||||
|
let color: discord.ColorResolvable
|
||||||
|
if (Array.from(presetColors.keys()).includes(answer)){
|
||||||
|
color = presetColors.get(answer) as number
|
||||||
|
}else{
|
||||||
|
color = answer as `#${string}`
|
||||||
|
}
|
||||||
|
quickSetupStorage.mainColor = color
|
||||||
|
//CONTINUE TO NEXT QUESTION
|
||||||
|
console.log(color)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user