aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorame <[email protected]>2023-09-26 23:12:35 -0500
committerame <[email protected]>2023-09-26 23:12:35 -0500
commit99779de823e1751c3da13e0b7b0f639ddecca7da (patch)
treef7e35fc92adbadbf573be47f2ddde159d223687f /src
init
Diffstat (limited to 'src')
-rw-r--r--src/db.js69
-rw-r--r--src/settings.js17
-rw-r--r--src/util.js104
-rw-r--r--src/webui.js40
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}`));