mirror of
https://github.com/danbulant/flying-squid
synced 2026-06-19 22:41:52 +00:00
166 lines
4.9 KiB
JavaScript
166 lines
4.9 KiB
JavaScript
const permissions = require("./permissions").permissions();
|
|
|
|
module.exports.server = function (serv) {
|
|
serv.broadcast = (message, { whitelist = serv.players, blacklist = [], system = false } = {}) => {
|
|
if (whitelist.type === 'player') whitelist = [whitelist]
|
|
|
|
if (typeof message === 'string') message = serv.parseClassic(message)
|
|
|
|
whitelist.filter(w => blacklist.indexOf(w) === -1).forEach(player => {
|
|
if (!system) player.chat(message)
|
|
else player.system(message)
|
|
})
|
|
}
|
|
|
|
serv.color = {
|
|
'black': '&0',
|
|
'dark_blue': '&1',
|
|
'dark_green': '&2',
|
|
'dark_cyan': '&3',
|
|
'dark_red': '&4',
|
|
'purple': '&5',
|
|
'dark_purple': '&5',
|
|
'gold': '&6',
|
|
'gray': '&7',
|
|
'grey': '&7',
|
|
'dark_gray': '&8',
|
|
'dark_grey': '&8',
|
|
'blue': '&9',
|
|
'green': '&a',
|
|
'aqua': '&b',
|
|
'cyan': '&b',
|
|
'red': '&c',
|
|
'pink': '&d',
|
|
'light_purple': '&d',
|
|
'yellow': '&e',
|
|
'white': '&f',
|
|
'random': '&k',
|
|
'obfuscated': '&k',
|
|
'bold': '&l',
|
|
'strikethrough': '&m',
|
|
'underlined': '&n',
|
|
'underline': '&n',
|
|
'italic': '&o',
|
|
'italics': '&o',
|
|
'reset': '&r'
|
|
}
|
|
|
|
serv.parseClassic = (message) => {
|
|
if (typeof message === 'object') return message
|
|
const messageList = []
|
|
let text = ''
|
|
let nextChanged = false
|
|
let color = 'white'
|
|
let bold = false
|
|
let italic = false
|
|
let underlined = false
|
|
let strikethrough = false
|
|
let random = false
|
|
const colors = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f', 'k', 'l', 'm', 'n', 'o', 'r', '&']
|
|
const convertColor = ['black', 'dark_blue', 'dark_green', 'dark_cyan', 'dark_red', 'dark_purple', 'gold',
|
|
'gray', 'dark_gray', 'blue', 'green', 'aqua', 'red', 'light_purple', 'yellow', 'white',
|
|
'random', 'bold', 'strikethrough', 'underlined', 'italic', 'reset', '&']
|
|
|
|
function createJSON () {
|
|
if (!text.trim()) return
|
|
messageList.push({
|
|
text: text,
|
|
color: color,
|
|
bold: bold,
|
|
italic: italic,
|
|
underlined: underlined,
|
|
strikethrough: strikethrough,
|
|
obfuscated: random
|
|
})
|
|
text = ''
|
|
}
|
|
|
|
while (message !== '') {
|
|
const currChar = message[0]
|
|
if (nextChanged) {
|
|
const newColor = convertColor[colors.indexOf(currChar)]
|
|
if (newColor) {
|
|
if (newColor === 'bold') bold = true
|
|
else if (newColor === 'strikethrough') strikethrough = true
|
|
else if (newColor === 'underlined') underlined = true
|
|
else if (newColor === 'italic') italic = true
|
|
else if (newColor === 'random') random = true
|
|
else if (newColor === '&') text += '&'
|
|
else if (newColor === 'reset') {
|
|
strikethrough = false
|
|
bold = false
|
|
underlined = false
|
|
random = false
|
|
italic = false
|
|
color = 'white'
|
|
} else color = newColor
|
|
}
|
|
nextChanged = false
|
|
} else if (currChar === '&') {
|
|
if (nextChanged) {
|
|
text += '&'
|
|
nextChanged = false
|
|
} else {
|
|
nextChanged = true
|
|
createJSON()
|
|
}
|
|
} else {
|
|
text += currChar
|
|
}
|
|
|
|
message = message.slice(1, message.length)
|
|
}
|
|
createJSON()
|
|
|
|
if (messageList.length > 0) {
|
|
return {
|
|
text: '',
|
|
extra: messageList
|
|
}
|
|
} else return { text: '' }
|
|
}
|
|
}
|
|
|
|
module.exports.player = function (player, serv) {
|
|
player._client.on('chat', ({ message } = {}) => {
|
|
if (message[0] === '/') {
|
|
if(!permissions.hasPermission(player.username, "commands.use"))return player.chat("You don't have permission to use commands");
|
|
|
|
player.behavior('command', { command: message.slice(1) }, ({ command }) => player.handleCommand(command))
|
|
} else {
|
|
if(!permissions.hasPermission(player.username, "chat.send"))return player.chat("You don't have permission to use chat");
|
|
|
|
player.behavior('chat', {
|
|
message: message,
|
|
prefix: permissions.getPrefix(player.username) + player.username + permissions.getSuffix(player.username) + permissions.getSeparator(),
|
|
text: message,
|
|
whitelist: serv.players,
|
|
blacklist: []
|
|
}, ({ prefix, text, whitelist, blacklist }) => {
|
|
const obj = serv.parseClassic(prefix)
|
|
if (!obj.extra) obj.extra = []
|
|
obj.extra.push(serv.parseClassic(text))
|
|
serv.broadcast(obj, {
|
|
whitelist: whitelist,
|
|
blacklist: blacklist
|
|
})
|
|
})
|
|
}
|
|
})
|
|
|
|
player.chat = message => {
|
|
if (typeof message === 'string') message = serv.parseClassic(message)
|
|
player._client.write('chat', { message: JSON.stringify(message), position: 0 })
|
|
}
|
|
|
|
player.emptyChat = (count = 1) => {
|
|
for (let i = 0; i < count; i++) {
|
|
player.chat('')
|
|
}
|
|
}
|
|
|
|
player.system = message => {
|
|
if (typeof message === 'string') message = serv.parseClassic(message)
|
|
player._client.write('chat', { message: JSON.stringify(message), position: 2 })
|
|
}
|
|
}
|