diff options
| author | ame <[email protected]> | 2023-09-26 23:12:35 -0500 |
|---|---|---|
| committer | ame <[email protected]> | 2023-09-26 23:12:35 -0500 |
| commit | 99779de823e1751c3da13e0b7b0f639ddecca7da (patch) | |
| tree | f7e35fc92adbadbf573be47f2ddde159d223687f /src | |
init
Diffstat (limited to 'src')
| -rw-r--r-- | src/db.js | 69 | ||||
| -rw-r--r-- | src/settings.js | 17 | ||||
| -rw-r--r-- | src/util.js | 104 | ||||
| -rw-r--r-- | src/webui.js | 40 |
4 files changed, 230 insertions, 0 deletions
diff --git a/src/db.js b/src/db.js new file mode 100644 index 0000000..aba84f0 --- /dev/null +++ b/src/db.js @@ -0,0 +1,69 @@ +const path = require('path'); +const { Sequelize, DataTypes } = require('sequelize'); + +const _db_raw = new Sequelize({ + dialect: 'sqlite', + storage: path.join(__dirname, '../db/db.sqlite'), + logging:false +}); +let db = {_raw:_db_raw} + +db.Tickets = _db_raw.define('Tickets', { + ticket: DataTypes.TEXT, + message: DataTypes.TEXT, + status: DataTypes.TEXT, + author: DataTypes.TEXT, + name: DataTypes.TEXT, + created: DataTypes.TEXT, + messages: DataTypes.STRING, + attachments: DataTypes.STRING, + pfp: DataTypes.STRING, +}, { +}); + +db.Sticky = _db_raw.define('Sticky', { + embed: DataTypes.BOOLEAN, + embed_color: DataTypes.TEXT, + channel: DataTypes.TEXT, + message: DataTypes.TEXT, + last_message: DataTypes.TEXT, +}, { +}); + +db.Auto_React = _db_raw.define('Auto_React', { + channel: DataTypes.TEXT, + emote: DataTypes.TEXT, +}, { +}); + +db.Timed_Message = _db_raw.define('Timed_Message', { + embed: DataTypes.BOOLEAN, + embed_color: DataTypes.TEXT, + guild: DataTypes.TEXT, + channel: DataTypes.TEXT, + message: DataTypes.TEXT, + last_message: DataTypes.TEXT, + last_message_time: DataTypes.TEXT, + delay: DataTypes.TEXT, +}, { +}); + +db.BattleShip = _db_raw.define('BattleShip', { + turn: DataTypes.INTEGER, + p1_id: DataTypes.TEXT, + p2_id: DataTypes.TEXT, + p1_board: DataTypes.TEXT, + p2_board: DataTypes.TEXT, +}, { +}); + +try { + db._raw.authenticate(); + console.log('db connected'); +} catch (error) { + console.error('Unable to connect to the database:', error); +} + +_db_raw.sync() + +module.exports = db
\ No newline at end of file diff --git a/src/settings.js b/src/settings.js new file mode 100644 index 0000000..87ba87b --- /dev/null +++ b/src/settings.js @@ -0,0 +1,17 @@ +let debug = 0; +let server = debug?"545076257369358336":"486957006628847626"; +let admin_c = debug?"545076257369358338":"753145819820982282"; +module.exports = { + "defaultColor": [43,45,49], + "allowed-servers":["486957006628847626","545076257369358336"], + "preloads": { + [server]: { + [admin_c]:{ + name: "admin-chan", + }, + "748790869938929737":{ + name: "logging", + } + } + } +}
\ No newline at end of file diff --git a/src/util.js b/src/util.js new file mode 100644 index 0000000..ef1cf50 --- /dev/null +++ b/src/util.js @@ -0,0 +1,104 @@ +const rem_emp = function (e) {return e !== "";} + +module.exports = { + upload_limit(guild){ + //https://stackoverflow.com/questions/66396146/get-channels-filesize-limit + switch (guild.premiumTier) { + case 'TIER_3': return 100 + case 'TIER_2': return 50 + default: return 8 + } + }, + limit_exp(exp,length){ + exp = exp.split('e') + for(let i = 0; i!=length; i++) + exp[0]+="0" + exp[0] = exp[0].substring(0,length+2) + return exp.join('e') + }, + rem_emp, + parse_inp(str){ + let open = false; + let out = [] + let cur = "" + for(let c of str){ + if(c=='"'){ + if(open){ + out.push(cur) + cur="" + } + open=!open; + } + else { + if(!open){ + if(c==' '){ + out.push(cur) + cur="" + } else { + cur+=c + } + } else { + cur+=c + } + + } + } + out.push(cur) + return out.filter(rem_emp) + }, + similarity(s1, s2) { + //https://stackoverflow.com/questions/10473745/compare-strings-javascript-return-of-likely + function editDistance(s1, s2) { + s1 = s1.toLowerCase(); + s2 = s2.toLowerCase(); + + var costs = new Array(); + for (var i = 0; i <= s1.length; i++) { + var lastValue = i; + for (var j = 0; j <= s2.length; j++) { + if (i == 0) + costs[j] = j; + else { + if (j > 0) { + var newValue = costs[j - 1]; + if (s1.charAt(i - 1) != s2.charAt(j - 1)) + newValue = Math.min(Math.min(newValue, lastValue), + costs[j]) + 1; + costs[j - 1] = lastValue; + lastValue = newValue; + } + } + } + if (i > 0) + costs[s2.length] = lastValue; + } + return costs[s2.length]; + } + var longer = s1; + var shorter = s2; + if (s1.length < s2.length) { + longer = s2; + shorter = s1; + } + var longerLength = longer.length; + if (longerLength == 0) { + return 1.0; + } + return (longerLength - editDistance(longer, shorter)) / parseFloat(longerLength); + }, + + deepCopy(src) { + //https://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-deep-clone-an-object-in-javascript/49497485 + let target = Array.isArray(src) ? [] : {}; + for (let prop in src) { + let value = src[prop]; + if(value && typeof value === 'object') { + target[prop] = deepCopy(value); + } else { + target[prop] = value; + } + } + return target; + } + +}
\ No newline at end of file diff --git a/src/webui.js b/src/webui.js new file mode 100644 index 0000000..8a9fa56 --- /dev/null +++ b/src/webui.js @@ -0,0 +1,40 @@ + +const key = process.env.WEBUI_KEY +const bodyParser = require("body-parser"); +const express = require('express'); +let db = require("../src/db"); +const path = require("path") +const Tickets = db.Tickets + +const app = express(); +app.use(bodyParser.urlencoded({ extended: false })); +app.use(bodyParser.json()); +const port = 7001; +app.get('/tickets', async (req, res) => { + res.sendFile(path.join(__dirname+'/../html/tickets.html')) +}) +app.post('/tickets/data', async (req, res) => { + if(req.body.key == key) + res.send(await Tickets.findAll()) + else + res.send('failed') +}) +app.post('/tickets/edit', async (req, res) => { + if(req.body.key == key){ + console.log('pass') + res.send('pass') + } + else + res.send('failed') +}) + +app.get('/settings', async (req, res) => { + res.sendFile(path.join(__dirname+'/../html/settings.html')) +}) +app.post('/settings/data', async (req, res) => { + if(req.body.key == key) + res.send('todo:P') + else + res.send('failed') +}) +app.listen(port, () => console.log(`listening at http://localhost:${port}`)); |
