@lotus-tree/fg-notation 1.0.0 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +67 -0
- package/babel.config.js +6 -0
- package/dev/img/basic/1.png +0 -0
- package/dev/img/basic/12369.png +0 -0
- package/dev/img/basic/1237.png +0 -0
- package/dev/img/basic/1632143.png +0 -0
- package/dev/img/basic/2.png +0 -0
- package/dev/img/basic/21.png +0 -0
- package/dev/img/basic/214.png +0 -0
- package/dev/img/basic/21478.png +0 -0
- package/dev/img/basic/23.png +0 -0
- package/dev/img/basic/236.png +0 -0
- package/dev/img/basic/23698.png +0 -0
- package/dev/img/basic/28.png +0 -0
- package/dev/img/basic/3.png +0 -0
- package/dev/img/basic/32147.png +0 -0
- package/dev/img/basic/3219.png +0 -0
- package/dev/img/basic/341236.png +0 -0
- package/dev/img/basic/346.png +0 -0
- package/dev/img/basic/360.png +0 -0
- package/dev/img/basic/4.png +0 -0
- package/dev/img/basic/41236.png +0 -0
- package/dev/img/basic/421.png +0 -0
- package/dev/img/basic/46.png +0 -0
- package/dev/img/basic/4618346.png +0 -0
- package/dev/img/basic/47896.png +0 -0
- package/dev/img/basic/5.png +0 -0
- package/dev/img/basic/6.png +0 -0
- package/dev/img/basic/623.png +0 -0
- package/dev/img/basic/63214.png +0 -0
- package/dev/img/basic/64.png +0 -0
- package/dev/img/basic/6428.png +0 -0
- package/dev/img/basic/69874.png +0 -0
- package/dev/img/basic/7.png +0 -0
- package/dev/img/basic/7891.png +0 -0
- package/dev/img/basic/8.png +0 -0
- package/dev/img/basic/81237.png +0 -0
- package/dev/img/basic/82.png +0 -0
- package/dev/img/basic/87412.png +0 -0
- package/dev/img/basic/89632.png +0 -0
- package/dev/img/basic/9.png +0 -0
- package/dev/img/basic/[1].png +0 -0
- package/dev/img/basic/[2].png +0 -0
- package/dev/img/basic/[2]8.png +0 -0
- package/dev/img/basic/[3].png +0 -0
- package/dev/img/basic/[4].png +0 -0
- package/dev/img/basic/[6].png +0 -0
- package/dev/img/basic/[7].png +0 -0
- package/dev/img/basic/[8].png +0 -0
- package/dev/img/basic/[9].png +0 -0
- package/dev/img/basic/air.png +0 -0
- package/dev/img/basic/doubleforward.png +0 -0
- package/dev/img/credits.txt +4 -0
- package/dev/img/games/bb/a.png +0 -0
- package/dev/img/games/bb/b.png +0 -0
- package/dev/img/games/bb/c.png +0 -0
- package/dev/img/games/bb/d.png +0 -0
- package/dev/img/games/dbz/a1.png +0 -0
- package/dev/img/games/dbz/a2.png +0 -0
- package/dev/img/games/dbz/h.png +0 -0
- package/dev/img/games/dbz/l.png +0 -0
- package/dev/img/games/dbz/m.png +0 -0
- package/dev/img/games/dbz/s.png +0 -0
- package/dev/img/games/dnf/a.png +0 -0
- package/dev/img/games/dnf/as.png +0 -0
- package/dev/img/games/dnf/b.png +0 -0
- package/dev/img/games/dnf/g.png +0 -0
- package/dev/img/games/dnf/ms.png +0 -0
- package/dev/img/games/dnf/s.png +0 -0
- package/dev/img/games/gbf/g.png +0 -0
- package/dev/img/games/gbf/h.png +0 -0
- package/dev/img/games/gbf/l.png +0 -0
- package/dev/img/games/gbf/m.png +0 -0
- package/dev/img/games/gbf/s.png +0 -0
- package/dev/img/games/gg/d.png +0 -0
- package/dev/img/games/gg/hs.png +0 -0
- package/dev/img/games/gg/k.png +0 -0
- package/dev/img/games/gg/p.png +0 -0
- package/dev/img/games/gg/rc.png +0 -0
- package/dev/img/games/gg/s.png +0 -0
- package/dev/img/games/kof/a.png +0 -0
- package/dev/img/games/kof/b.png +0 -0
- package/dev/img/games/kof/c.png +0 -0
- package/dev/img/games/kof/d.png +0 -0
- package/dev/img/games/kof/max.png +0 -0
- package/dev/img/games/mk/1.png +0 -0
- package/dev/img/games/mk/2.png +0 -0
- package/dev/img/games/mk/3.png +0 -0
- package/dev/img/games/mk/4.png +0 -0
- package/dev/img/games/sc/[a].png +0 -0
- package/dev/img/games/sc/[b].png +0 -0
- package/dev/img/games/sc/[g].png +0 -0
- package/dev/img/games/sc/[k].png +0 -0
- package/dev/img/games/sc/a.png +0 -0
- package/dev/img/games/sc/b.png +0 -0
- package/dev/img/games/sc/g.png +0 -0
- package/dev/img/games/sc/k.png +0 -0
- package/dev/img/games/sf/hk.png +0 -0
- package/dev/img/games/sf/hp.png +0 -0
- package/dev/img/games/sf/j..png +0 -0
- package/dev/img/games/sf/lk.png +0 -0
- package/dev/img/games/sf/lp.png +0 -0
- package/dev/img/games/sf/max.png +0 -0
- package/dev/img/games/sf/mk.png +0 -0
- package/dev/img/games/sf/mp.png +0 -0
- package/dev/img/games/sf/tap.png +0 -0
- package/dev/img/games/sg/hk.png +0 -0
- package/dev/img/games/sg/hp.png +0 -0
- package/dev/img/games/sg/k.png +0 -0
- package/dev/img/games/sg/lk.png +0 -0
- package/dev/img/games/sg/lp.png +0 -0
- package/dev/img/games/sg/mk.png +0 -0
- package/dev/img/games/sg/mp.png +0 -0
- package/dev/img/games/sg/p.png +0 -0
- package/dev/img/games/tfh/a.png +0 -0
- package/dev/img/games/tfh/b.png +0 -0
- package/dev/img/games/tfh/c.png +0 -0
- package/dev/img/games/tfh/d.png +0 -0
- package/dev/img/games/tkn/1.png +0 -0
- package/dev/img/games/tkn/12.png +0 -0
- package/dev/img/games/tkn/1234.png +0 -0
- package/dev/img/games/tkn/13.png +0 -0
- package/dev/img/games/tkn/14.png +0 -0
- package/dev/img/games/tkn/2.png +0 -0
- package/dev/img/games/tkn/23.png +0 -0
- package/dev/img/games/tkn/24.png +0 -0
- package/dev/img/games/tkn/3.png +0 -0
- package/dev/img/games/tkn/34.png +0 -0
- package/dev/img/games/tkn/4.png +0 -0
- package/dev/img/games/tkn/b.png +0 -0
- package/dev/img/games/tkn/d-b.png +0 -0
- package/dev/img/games/tkn/d-f.png +0 -0
- package/dev/img/games/tkn/d.png +0 -0
- package/dev/img/games/tkn/f.png +0 -0
- package/dev/img/games/tkn/o.png +0 -0
- package/dev/img/games/tkn/u-b.png +0 -0
- package/dev/img/games/tkn/u-f.png +0 -0
- package/dev/img/games/tkn/u.png +0 -0
- package/dev/img/preview.png +0 -0
- package/dev/index.js +491 -0
- package/lib/img/games/gg/rc.png +0 -0
- package/lib/index.js +129 -20
- package/package.json +25 -10
- package/src/img/games/gg/rc.png +0 -0
- package/src/index.js +53 -8
package/lib/index.js
CHANGED
|
@@ -11,10 +11,10 @@ var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"))
|
|
|
11
11
|
|
|
12
12
|
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
13
13
|
|
|
14
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
15
|
-
|
|
16
14
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
|
17
15
|
|
|
16
|
+
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
17
|
+
|
|
18
18
|
var _sharp = _interopRequireDefault(require("sharp"));
|
|
19
19
|
|
|
20
20
|
var _path = _interopRequireDefault(require("path"));
|
|
@@ -23,10 +23,54 @@ var _glob = _interopRequireDefault(require("glob"));
|
|
|
23
23
|
|
|
24
24
|
var _sequelize = require("sequelize");
|
|
25
25
|
|
|
26
|
+
var _bent = _interopRequireDefault(require("bent"));
|
|
27
|
+
|
|
28
|
+
var getJSON = (0, _bent["default"])('json');
|
|
29
|
+
|
|
26
30
|
var imgPath = _path["default"].join(__dirname, 'img');
|
|
27
31
|
|
|
28
32
|
var basicInputs = new Map();
|
|
29
33
|
var gameInputs = new Map();
|
|
34
|
+
var glossary = {};
|
|
35
|
+
var terms = [];
|
|
36
|
+
getGlossary();
|
|
37
|
+
setInterval(getGlossary, 5 * 60 * 1000);
|
|
38
|
+
|
|
39
|
+
function getGlossary() {
|
|
40
|
+
return _getGlossary.apply(this, arguments);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function _getGlossary() {
|
|
44
|
+
_getGlossary = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee6() {
|
|
45
|
+
var result, tempG, tempT;
|
|
46
|
+
return _regenerator["default"].wrap(function _callee6$(_context6) {
|
|
47
|
+
while (1) {
|
|
48
|
+
switch (_context6.prev = _context6.next) {
|
|
49
|
+
case 0:
|
|
50
|
+
_context6.next = 2;
|
|
51
|
+
return getJSON('https://glossary.infil.net/json/glossary.json');
|
|
52
|
+
|
|
53
|
+
case 2:
|
|
54
|
+
result = _context6.sent;
|
|
55
|
+
tempG = {};
|
|
56
|
+
tempT = [];
|
|
57
|
+
result.forEach(function (i) {
|
|
58
|
+
var term = i.term.toLowerCase();
|
|
59
|
+
tempG[term] = i;
|
|
60
|
+
tempT.push(term);
|
|
61
|
+
});
|
|
62
|
+
glossary = tempG;
|
|
63
|
+
terms = tempT;
|
|
64
|
+
|
|
65
|
+
case 8:
|
|
66
|
+
case "end":
|
|
67
|
+
return _context6.stop();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}, _callee6);
|
|
71
|
+
}));
|
|
72
|
+
return _getGlossary.apply(this, arguments);
|
|
73
|
+
}
|
|
30
74
|
|
|
31
75
|
_glob["default"].sync(_path["default"].join(imgPath, 'basic/**'), {
|
|
32
76
|
nodir: true
|
|
@@ -64,13 +108,13 @@ function sendInput(_x, _x2, _x3, _x4) {
|
|
|
64
108
|
}
|
|
65
109
|
|
|
66
110
|
function _sendInput() {
|
|
67
|
-
_sendInput = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function
|
|
111
|
+
_sendInput = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee7(inputs, result, message, caption) {
|
|
68
112
|
var canvas;
|
|
69
|
-
return _regenerator["default"].wrap(function
|
|
113
|
+
return _regenerator["default"].wrap(function _callee7$(_context7) {
|
|
70
114
|
while (1) {
|
|
71
|
-
switch (
|
|
115
|
+
switch (_context7.prev = _context7.next) {
|
|
72
116
|
case 0:
|
|
73
|
-
|
|
117
|
+
_context7.next = 2;
|
|
74
118
|
return (0, _sharp["default"])({
|
|
75
119
|
create: {
|
|
76
120
|
width: 152 * result.length,
|
|
@@ -89,18 +133,18 @@ function _sendInput() {
|
|
|
89
133
|
})).png().toBuffer();
|
|
90
134
|
|
|
91
135
|
case 2:
|
|
92
|
-
canvas =
|
|
93
|
-
return
|
|
136
|
+
canvas = _context7.sent;
|
|
137
|
+
return _context7.abrupt("return", message.reply({
|
|
94
138
|
content: caption,
|
|
95
139
|
files: [canvas]
|
|
96
140
|
}));
|
|
97
141
|
|
|
98
142
|
case 4:
|
|
99
143
|
case "end":
|
|
100
|
-
return
|
|
144
|
+
return _context7.stop();
|
|
101
145
|
}
|
|
102
146
|
}
|
|
103
|
-
},
|
|
147
|
+
}, _callee7);
|
|
104
148
|
}));
|
|
105
149
|
return _sendInput.apply(this, arguments);
|
|
106
150
|
}
|
|
@@ -109,11 +153,15 @@ var builtin = {
|
|
|
109
153
|
37: {
|
|
110
154
|
game: 'sf',
|
|
111
155
|
caption: '***LETS GO JUSTIN!***',
|
|
112
|
-
input: '6 6 6 6 6 6 6 >> 6 6 6 6 6 6 6 >> 8 6 j. hk >> 2 mk >> 623
|
|
156
|
+
input: '6 6 6 6 6 6 6 >> 6 6 6 6 6 6 6 >> 8 6 j. hk >> 2 mk >> 623 mp >> 236 236 lk'
|
|
113
157
|
}
|
|
114
158
|
};
|
|
115
159
|
var _default = {
|
|
116
160
|
name: 'fg-notation',
|
|
161
|
+
about: {
|
|
162
|
+
name: 'FG Notation',
|
|
163
|
+
value: '[Instructions and source code](https://lotus.chitowarlock.com/fgnotation)\n[Infil\'s Fighting Game Glossary](https://glossary.infil.net)\n[MagicianStuff\'s Fighthing Game notations emotes](https://twitter.com/MagicianStuff/status/1477931054484893697)'
|
|
164
|
+
},
|
|
117
165
|
intents: ['GUILD_MESSAGES'],
|
|
118
166
|
partials: ['MESSAGE'],
|
|
119
167
|
preload: function preload(sequelize) {
|
|
@@ -197,8 +245,8 @@ var _default = {
|
|
|
197
245
|
commands: {
|
|
198
246
|
fgi: {
|
|
199
247
|
usage: 'fgi [game] [inputs]',
|
|
200
|
-
desc: '
|
|
201
|
-
example: '
|
|
248
|
+
desc: 'Converts a list of inputs into an image',
|
|
249
|
+
example: 'fgi sf 236P 214K',
|
|
202
250
|
execute: function () {
|
|
203
251
|
var _execute = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2(_ref, _ref2) {
|
|
204
252
|
var param, message, _param, game, i1, inputs, result;
|
|
@@ -250,8 +298,8 @@ var _default = {
|
|
|
250
298
|
},
|
|
251
299
|
fgsave: {
|
|
252
300
|
usage: 'fgsave [game] [name] [inputs]',
|
|
253
|
-
desc: '
|
|
254
|
-
example: '
|
|
301
|
+
desc: 'Saves a list of inputs into a command',
|
|
302
|
+
example: 'fgi sf testName 236P 214K',
|
|
255
303
|
execute: function () {
|
|
256
304
|
var _execute2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3(_ref3, _ref4) {
|
|
257
305
|
var param, sequelize, message, _param2, game, name, i1, inputs, input;
|
|
@@ -312,9 +360,9 @@ var _default = {
|
|
|
312
360
|
}()
|
|
313
361
|
},
|
|
314
362
|
fgcaption: {
|
|
315
|
-
usage: '
|
|
316
|
-
desc: '
|
|
317
|
-
example: '
|
|
363
|
+
usage: 'fgcaption [name] [caption]',
|
|
364
|
+
desc: 'Adds a caption to a saved input command',
|
|
365
|
+
example: 'fgcaption testName This is a caption',
|
|
318
366
|
execute: function () {
|
|
319
367
|
var _execute3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee4(_ref5, _ref6) {
|
|
320
368
|
var param, sequelize, message, _param3, name, i1, row;
|
|
@@ -373,10 +421,71 @@ var _default = {
|
|
|
373
421
|
return _execute3.apply(this, arguments);
|
|
374
422
|
}
|
|
375
423
|
|
|
424
|
+
return execute;
|
|
425
|
+
}()
|
|
426
|
+
},
|
|
427
|
+
fgglossary: {
|
|
428
|
+
usage: 'fgglossary [search term]',
|
|
429
|
+
desc: 'Searches for a term on Infil\'s Glossary',
|
|
430
|
+
example: 'fgglossary mexican uppercut',
|
|
431
|
+
execute: function () {
|
|
432
|
+
var _execute4 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee5(_ref7, _ref8) {
|
|
433
|
+
var param, sequelize, message, params, search, result, url;
|
|
434
|
+
return _regenerator["default"].wrap(function _callee5$(_context5) {
|
|
435
|
+
while (1) {
|
|
436
|
+
switch (_context5.prev = _context5.next) {
|
|
437
|
+
case 0:
|
|
438
|
+
param = _ref7.param, sequelize = _ref7.sequelize;
|
|
439
|
+
message = _ref8.message;
|
|
440
|
+
params = param.slice(1);
|
|
441
|
+
|
|
442
|
+
if (!(params.length === 0)) {
|
|
443
|
+
_context5.next = 5;
|
|
444
|
+
break;
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
return _context5.abrupt("return", message.reply('Missing search term. Example: >fgglossary mexican uppercut'));
|
|
448
|
+
|
|
449
|
+
case 5:
|
|
450
|
+
search = params.join(' ').toLowerCase();
|
|
451
|
+
result = terms.filter(function (i) {
|
|
452
|
+
return i.includes(search);
|
|
453
|
+
});
|
|
454
|
+
url = "https://glossary.infil.net/?t=".concat(params.join('%20').toLowerCase());
|
|
455
|
+
|
|
456
|
+
if (!(result.length === 0)) {
|
|
457
|
+
_context5.next = 10;
|
|
458
|
+
break;
|
|
459
|
+
}
|
|
460
|
+
|
|
461
|
+
return _context5.abrupt("return", message.reply("Term \"".concat(search, "\" not found")));
|
|
462
|
+
|
|
463
|
+
case 10:
|
|
464
|
+
if (!(result.length === 1)) {
|
|
465
|
+
_context5.next = 12;
|
|
466
|
+
break;
|
|
467
|
+
}
|
|
468
|
+
|
|
469
|
+
return _context5.abrupt("return", message.reply("```".concat(glossary[result[0]].def, "```Source: <").concat(url, ">")));
|
|
470
|
+
|
|
471
|
+
case 12:
|
|
472
|
+
message.reply("Multiple terms found: ".concat(url));
|
|
473
|
+
|
|
474
|
+
case 13:
|
|
475
|
+
case "end":
|
|
476
|
+
return _context5.stop();
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
}, _callee5);
|
|
480
|
+
}));
|
|
481
|
+
|
|
482
|
+
function execute(_x11, _x12) {
|
|
483
|
+
return _execute4.apply(this, arguments);
|
|
484
|
+
}
|
|
485
|
+
|
|
376
486
|
return execute;
|
|
377
487
|
}()
|
|
378
488
|
}
|
|
379
489
|
}
|
|
380
490
|
};
|
|
381
|
-
exports["default"] = _default;
|
|
382
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC5qcyJdLCJuYW1lcyI6WyJpbWdQYXRoIiwicGF0aCIsImpvaW4iLCJfX2Rpcm5hbWUiLCJiYXNpY0lucHV0cyIsIk1hcCIsImdhbWVJbnB1dHMiLCJnbG9iIiwic3luYyIsIm5vZGlyIiwiZm9yRWFjaCIsInAiLCJpbnB1dCIsInNwbGl0IiwicG9wIiwicmVwbGFjZSIsInNldCIsInBhcnNlIiwicmVsYXRpdmUiLCJkaXIiLCJuYW1lIiwiaGFzIiwiZ2V0Iiwic29sdmVJbnB1dCIsImlucHV0cyIsImkiLCJsZW5ndGgiLCJzMSIsInNsaWNlIiwiRXJyb3IiLCJzZW5kSW5wdXQiLCJyZXN1bHQiLCJtZXNzYWdlIiwiY2FwdGlvbiIsImNyZWF0ZSIsIndpZHRoIiwiaGVpZ2h0IiwiY2hhbm5lbHMiLCJiYWNrZ3JvdW5kIiwiY29tcG9zaXRlIiwibWFwIiwiaXQiLCJpbmRleCIsImxlZnQiLCJ0b3AiLCJwbmciLCJ0b0J1ZmZlciIsImNhbnZhcyIsInJlcGx5IiwiY29udGVudCIsImZpbGVzIiwiYnVpbHRpbiIsImdhbWUiLCJpbnRlbnRzIiwicGFydGlhbHMiLCJwcmVsb2FkIiwic2VxdWVsaXplIiwiZGVmaW5lIiwiZ3VpbGQiLCJ0eXBlIiwiRGF0YVR5cGVzIiwiU1RSSU5HIiwicHJpbWFyeUtleSIsImNyZWF0ZWRCeSIsImV2ZW50cyIsIm1lc3NhZ2VDcmVhdGUiLCJnbG9iYWwiLCJjbGllbnQiLCJjb25maWciLCJhdXRob3IiLCJpZCIsInVzZXIiLCJtZW1iZXIiLCJndWlsZElkIiwicHJlZml4Iiwic3RhcnRzV2l0aCIsIm1vZGVscyIsImZnaW5wdXQiLCJmaW5kT25lIiwid2hlcmUiLCJyb3ciLCJjb21tYW5kcyIsImZnaSIsInVzYWdlIiwiZGVzYyIsImV4YW1wbGUiLCJleGVjdXRlIiwicGFyYW0iLCJpMSIsIkFycmF5IiwiZnJvbSIsImtleXMiLCJ0b0xvd2VyQ2FzZSIsImZsYXQiLCJmZ3NhdmUiLCJjaGFubmVsIiwic2Vu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QixzQkFBQUEsS0FBSyxFQUFFMUIsT0FBTyxDQUFDMEIsS0FBUixDQUFjWSxFQUF2QjtBQUEyQmxELHNCQUFBQSxJQUFJLEVBQUpBO0FBQTNCO0FBRDBDLG1CQUFqQyxDQUpYOztBQUFBO0FBSUQ0RCxrQkFBQUEsR0FKQzs7QUFBQSxzQkFRRkEsR0FSRTtBQUFBO0FBQUE7QUFBQTs7QUFBQSxvREFRVWhELE9BQU8sQ0FBQ2dCLEtBQVIsYUFBa0I1QixJQUFsQixrQ0FSVjs7QUFBQTtBQVNQNEQsa0JBQUFBLEdBQUcsQ0FBQy9DLE9BQUosR0FBY3NELEtBQUssQ0FBQzNELEtBQU4sQ0FBWSxDQUFaLEVBQWUxQixJQUFmLENBQW9CLEdBQXBCLENBQWQ7QUFUTztBQUFBLHlCQVVEOEUsR0FBRyxDQUFDa0IsSUFBSixFQVZDOztBQUFBO0FBWVBsRSxrQkFBQUEsT0FBTyxDQUFDK0QsT0FBUixDQUFnQkMsSUFBaEIsMENBQXNENUUsSUFBdEQ7O0FBWk87QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsU0FBRjs7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUpFO0FBakNIO0FBOUNHLEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc2hhcnAgZnJvbSAnc2hhcnAnXHJcbmltcG9ydCBwYXRoIGZyb20gJ3BhdGgnXHJcbmltcG9ydCBnbG9iIGZyb20gJ2dsb2InXHJcbmltcG9ydCB7IERhdGFUeXBlcyB9IGZyb20gJ3NlcXVlbGl6ZSdcclxuXHJcbmNvbnN0IGltZ1BhdGggPSBwYXRoLmpvaW4oX19kaXJuYW1lLCAnaW1nJylcclxuY29uc3QgYmFzaWNJbnB1dHMgPSBuZXcgTWFwKClcclxuY29uc3QgZ2FtZUlucHV0cyA9IG5ldyBNYXAoKVxyXG5cclxuZ2xvYi5zeW5jKHBhdGguam9pbihpbWdQYXRoLCAnYmFzaWMvKionKSwgeyBub2RpcjogdHJ1ZSB9KVxyXG4gIC5mb3JFYWNoKHAgPT4ge1xyXG4gICAgY29uc3QgaW5wdXQgPSBwLnNwbGl0KCcvJykucG9wKCkucmVwbGFjZSgnLnBuZycsICcnKVxyXG4gICAgYmFzaWNJbnB1dHMuc2V0KGlucHV0LCBwKVxyXG4gIH0pXHJcblxyXG5iYXNpY0lucHV0cy5zZXQoJz4+JywgcGF0aC5qb2luKGltZ1BhdGgsICdiYXNpYy9kb3VibGVmb3J3YXJkLnBuZycpKVxyXG5cclxuZ2xvYi5zeW5jKHBhdGguam9pbihpbWdQYXRoLCAnZ2FtZXMvKionKSwgeyBub2RpcjogdHJ1ZSB9KVxyXG4gIC5mb3JFYWNoKHAgPT4ge1xyXG4gICAgY29uc3QgeyBkaXIsIG5hbWUgfSA9IHBhdGgucGFyc2UocGF0aC5yZWxhdGl2ZShwYXRoLmpvaW4oaW1nUGF0aCwgJ2dhbWVzJyksIHApKVxyXG5cclxuICAgIGlmICghZ2FtZUlucHV0cy5oYXMoZGlyKSkgZ2FtZUlucHV0cy5zZXQoZGlyLCBuZXcgTWFwKCkpXHJcbiAgICBnYW1lSW5wdXRzLmdldChkaXIpLnNldChuYW1lLCBwKVxyXG4gIH0pXHJcblxyXG5mdW5jdGlvbiBzb2x2ZUlucHV0IChpbnB1dHMsIGlucHV0KSB7XHJcbiAgaWYgKGlucHV0cy5oYXMoaW5wdXQpKSByZXR1cm4gW2lucHV0XVxyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICBjb25zdCBzMSA9IGlucHV0LnNsaWNlKDAsIDAgLSBpKVxyXG4gICAgaWYgKGlucHV0cy5oYXMoczEpKSByZXR1cm4gW3MxLCAuLi5zb2x2ZUlucHV0KGlucHV0cywgaW5wdXQuc2xpY2UoMCAtIGkpKV1cclxuICB9XHJcblxyXG4gIHRocm93IG5ldyBFcnJvcihgQ2Fubm90IGZpbmQgXCIke2lucHV0fVwiIGFzIGEgcmVjb2duaXphYmxlIGlucHV0YClcclxufVxyXG5cclxuYXN5bmMgZnVuY3Rpb24gc2VuZElucHV0IChpbnB1dHMsIHJlc3VsdCwgbWVzc2FnZSwgY2FwdGlvbikge1xyXG4gIGNvbnN0IGNhbnZhcyA9IGF3YWl0IHNoYXJwKHsgY3JlYXRlOiB7IHdpZHRoOiAxNTIgKiByZXN1bHQubGVuZ3RoLCBoZWlnaHQ6IDE1MiwgY2hhbm5lbHM6IDQsIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcgfSB9KVxyXG4gICAgLmNvbXBvc2l0ZShyZXN1bHQubWFwKChpdCwgaW5kZXgpID0+XHJcbiAgICAgICh7IGlucHV0OiBpbnB1dHMuZ2V0KGl0KSwgbGVmdDogaW5kZXggKiAxNTIsIHRvcDogMCwgd2lkdGg6IDE1MiwgaGVpZ2h0OiAxNTIgfSlcclxuICAgICkpXHJcbiAgICAucG5nKClcclxuICAgIC50b0J1ZmZlcigpXHJcblxyXG4gIHJldHVybiBtZXNzYWdlLnJlcGx5KHsgY29udGVudDogY2FwdGlvbiwgZmlsZXM6IFtjYW52YXNdIH0pXHJcbn1cclxuXHJcbmNvbnN0IGJ1aWx0aW4gPSB7XHJcbiAgMzc6IHtcclxuICAgIGdhbWU6ICdzZicsXHJcbiAgICBjYXB0aW9uOiAnKioqTEVUUyBHTyBKVVNUSU4hKioqJyxcclxuICAgIGlucHV0OiAnNiA2IDYgNiA2IDYgNiA+PiA2IDYgNiA2IDYgNiA2ID4+IDggNiBqLiBoayA+PiAyIG1rID4+IDYyMyBocCA+PiAyMzYgMjM2IGxrJ1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQge1xyXG4gIG5hbWU6ICdmZy1ub3RhdGlvbicsXHJcbiAgaW50ZW50czogWydHVUlMRF9NRVNTQUdFUyddLFxyXG4gIHBhcnRpYWxzOiBbJ01FU1NBR0UnXSxcclxuXHJcbiAgcHJlbG9hZDogc2VxdWVsaXplID0+IHtcclxuICAgIHNlcXVlbGl6ZS5kZWZpbmUoJ2ZnaW5wdXQnLCB7XHJcbiAgICAgIGd1aWxkOiB7XHJcbiAgICAgICAgdHlwZTogRGF0YVR5cGVzLlNUUklORyxcclxuICAgICAgICBwcmltYXJ5S2V5OiB0cnVlXHJcbiAgICAgIH0sXHJcbiAgICAgIG5hbWU6IHtcclxuICAgICAgICB0eXBlOiBEYXRhVHlwZXMuU1RSSU5HLFxyXG4gICAgICAgIHByaW1hcnlLZXk6IHRydWVcclxuICAgICAgfSxcclxuICAgICAgY3JlYXRlZEJ5OiBEYXRhVHlwZXMuU1RSSU5HLFxyXG4gICAgICBnYW1lOiBEYXRhVHlwZXMuU1RSSU5HLFxyXG4gICAgICBjYXB0aW9uOiBEYXRhVHlwZXMuU1RSSU5HLFxyXG4gICAgICBpbnB1dDogRGF0YVR5cGVzLlNUUklOR1xyXG4gICAgfSlcclxuICB9LFxyXG5cclxuICBldmVudHM6IHtcclxuICAgIGFzeW5jIG1lc3NhZ2VDcmVhdGUgKGdsb2JhbCwgbWVzc2FnZSkge1xyXG4gICAgICBjb25zdCB7IGNsaWVudCwgY29uZmlnLCBzZXF1ZWxpemUgfSA9IGdsb2JhbFxyXG4gICAgICBpZiAobWVzc2FnZS5hdXRob3IuaWQgPT09IGNsaWVudC51c2VyLmlkIHx8ICFtZXNzYWdlLm1lbWJlcikgcmV0dXJuXHJcblxyXG4gICAgICBjb25zdCBndWlsZElkID0gbWVzc2FnZS5ndWlsZElkXHJcbiAgICAgIGNvbnN0IHsgcHJlZml4IH0gPSBjb25maWdbZ3VpbGRJZF1cclxuXHJcbiAgICAgIGlmIChtZXNzYWdlLmNvbnRlbnQuc3RhcnRzV2l0aChwcmVmaXgpKSB7XHJcbiAgICAgICAgY29uc3QgbmFtZSA9IG1lc3NhZ2UuY29udGVudC5zcGxpdCgnICcpLnBvcCgpLnJlcGxhY2UocHJlZml4LCAnJylcclxuICAgICAgICBjb25zdCByb3cgPSBidWlsdGluW25hbWVdIHx8IChcclxuICAgICAgICAgIGF3YWl0IHNlcXVlbGl6ZS5tb2RlbHMuZmdpbnB1dC5maW5kT25lKHtcclxuICAgICAgICAgICAgd2hlcmU6IHsgZ3VpbGQ6IG1lc3NhZ2UuZ3VpbGQuaWQsIG5hbWUgfVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcblxyXG4gICAgICAgIGlmIChyb3cpIHtcclxuICAgICAgICAgIGNvbnN0IGlucHV0cyA9IG5ldyBNYXAoWy4uLmJhc2ljSW5wdXRzLCAuLi5nYW1lSW5wdXRzLmdldChyb3cuZ2FtZSldKVxyXG4gICAgICAgICAgc2VuZElucHV0KGlucHV0cywgcm93LmlucHV0LnNwbGl0KCcgJyksIG1lc3NhZ2UsIHJvdy5jYXB0aW9uKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH0sXHJcblxyXG4gIGNvbW1hbmRzOiB7XHJcbiAgICBmZ2k6IHtcclxuICAgICAgdXNhZ2U6ICdmZ2kgW2dhbWVdIFtpbnB1dHNdJyxcclxuICAgICAgZGVzYzogJ1RoaXMgY29tbWFuZCBkaXNwbGF5cyBpbmZvcm1hdGlvbiBhYm91dCBhIGNvbW1hbmQnLFxyXG4gICAgICBleGFtcGxlOiAnaGVscCBwZXJtcycsXHJcbiAgICAgIGV4ZWN1dGU6IGFzeW5jICh7IHBhcmFtIH0sIHsgbWVzc2FnZSB9KSA9PiB7XHJcbiAgICAgICAgY29uc3QgWywgZ2FtZSwgaTFdID0gcGFyYW1cclxuICAgICAgICBpZiAoIWdhbWUgfHwgIWkxKSByZXR1cm4gbWVzc2FnZS5yZXBseSgnTWlzc2luZyBhcmd1bWVudHMuIEV4YW1wbGU6ID5mZ2kgc2YgMjM2UCAyMTRLJylcclxuICAgICAgICBpZiAoIWdhbWVJbnB1dHMuaGFzKGdhbWUpKSByZXR1cm4gbWVzc2FnZS5yZXBseShgXCIke2dhbWV9XCIgaXMgbm90IGEgdmFsaWQgZ2FtZS4gQXZhaWxhYmxlIGdhbWVzOiAke0FycmF5LmZyb20oZ2FtZUlucHV0cy5rZXlzKCkpLmpvaW4oJyAnKX1gKVxyXG5cclxuICAgICAgICBjb25zdCBpbnB1dHMgPSBuZXcgTWFwKFsuLi5iYXNpY0lucHV0cywgLi4uZ2FtZUlucHV0cy5nZXQoZ2FtZSldKVxyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhcmFtLnNsaWNlKDIpLm1hcChpID0+IHNvbHZlSW5wdXQoaW5wdXRzLCBpLnRvTG93ZXJDYXNlKCkpKS5mbGF0KClcclxuXHJcbiAgICAgICAgc2VuZElucHV0KGlucHV0cywgcmVzdWx0LCBtZXNzYWdlKVxyXG4gICAgICB9XHJcbiAgICB9LFxyXG4gICAgZmdzYXZlOiB7XHJcbiAgICAgIHVzYWdlOiAnZmdzYXZlIFtnYW1lXSBbbmFtZV0gW2lucHV0c10nLFxyXG4gICAgICBkZXNjOiAnVGhpcyBjb21tYW5kIGRpc3BsYXlzIGluZm9ybWF0aW9uIGFib3V0IGEgY29tbWFuZCcsXHJcbiAgICAgIGV4YW1wbGU6ICdoZWxwIHBlcm1zJyxcclxuICAgICAgZXhlY3V0ZTogYXN5bmMgKHsgcGFyYW0sIHNlcXVlbGl6ZSB9LCB7IG1lc3NhZ2UgfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IFssIGdhbWUsIG5hbWUsIGkxXSA9IHBhcmFtXHJcbiAgICAgICAgaWYgKCFnYW1lIHx8ICFuYW1lIHx8ICFpMSkgcmV0dXJuIG1lc3NhZ2UucmVwbHkoJ01pc3NpbmcgYXJndW1lbnRzLiBFeGFtcGxlOiA+ZmdpIHNmIHRlc3ROYW1lIDIzNlAgMjE0SycpXHJcbiAgICAgICAgaWYgKCFnYW1lSW5wdXRzLmhhcyhnYW1lKSkgcmV0dXJuIG1lc3NhZ2UucmVwbHkoYFwiJHtnYW1lfVwiIGlzIG5vdCBhIHZhbGlkIGdhbWUuIEF2YWlsYWJsZSBnYW1lczogJHtBcnJheS5mcm9tKGdhbWVJbnB1dHMua2V5cygpKS5qb2luKCcgJyl9YClcclxuXHJcbiAgICAgICAgY29uc3QgaW5wdXRzID0gbmV3IE1hcChbLi4uYmFzaWNJbnB1dHMsIC4uLmdhbWVJbnB1dHMuZ2V0KGdhbWUpXSlcclxuICAgICAgICBjb25zdCBpbnB1dCA9IHBhcmFtLnNsaWNlKDMpLm1hcChpID0+IHNvbHZlSW5wdXQoaW5wdXRzLCBpLnRvTG93ZXJDYXNlKCkpKS5mbGF0KCkuam9pbignICcpXHJcblxyXG4gICAgICAgIGF3YWl0IHNlcXVlbGl6ZS5tb2RlbHMuZmdpbnB1dC5jcmVhdGUoeyBndWlsZDogbWVzc2FnZS5ndWlsZC5pZCwgbmFtZSwgY3JlYXRlZEJ5OiBtZXNzYWdlLmF1dGhvci5pZCwgZ2FtZSwgaW5wdXQgfSlcclxuXHJcbiAgICAgICAgbWVzc2FnZS5jaGFubmVsLnNlbmQoYFNhdmVkIGNvbW1hbmQgXCIke2lucHV0fVwiIGFzIFwiJHtuYW1lfVwiYClcclxuICAgICAgfVxyXG4gICAgfSxcclxuICAgIGZnY2FwdGlvbjoge1xyXG4gICAgICB1c2FnZTogJ2Znc2F2ZSBbbmFtZV0gW2NhcHRpb25dJyxcclxuICAgICAgZGVzYzogJ1RoaXMgY29tbWFuZCBkaXNwbGF5cyBpbmZvcm1hdGlvbiBhYm91dCBhIGNvbW1hbmQnLFxyXG4gICAgICBleGFtcGxlOiAnaGVscCBwZXJtcycsXHJcbiAgICAgIGV4ZWN1dGU6IGFzeW5jICh7IHBhcmFtLCBzZXF1ZWxpemUgfSwgeyBtZXNzYWdlIH0pID0+IHtcclxuICAgICAgICBjb25zdCBbLCBuYW1lLCBpMV0gPSBwYXJhbVxyXG4gICAgICAgIGlmICghbmFtZSB8fCAhaTEpIHJldHVybiBtZXNzYWdlLnJlcGx5KCdNaXNzaW5nIGFyZ3VtZW50cy4gRXhhbXBsZTogPmZnaSB0ZXN0TmFtZSBUaGlzIGlzIGEgY2FwdGlvbicpXHJcblxyXG4gICAgICAgIGNvbnN0IHJvdyA9IGF3YWl0IHNlcXVlbGl6ZS5tb2RlbHMuZmdpbnB1dC5maW5kT25lKHtcclxuICAgICAgICAgIHdoZXJlOiB7IGd1aWxkOiBtZXNzYWdlLmd1aWxkLmlkLCBuYW1lIH1cclxuICAgICAgICB9KVxyXG5cclxuICAgICAgICBpZiAoIXJvdykgcmV0dXJuIG1lc3NhZ2UucmVwbHkoYFwiJHtuYW1lfVwiIGlzIG5vdCBhIHNhdmVkIGlucHV0IGxpc3RgKVxyXG4gICAgICAgIHJvdy5jYXB0aW9uID0gcGFyYW0uc2xpY2UoMikuam9pbignICcpXHJcbiAgICAgICAgYXdhaXQgcm93LnNhdmUoKVxyXG5cclxuICAgICAgICBtZXNzYWdlLmNoYW5uZWwuc2VuZChgU2F2ZWQgY2FwdGlvbiBmb3IgaW5wdXQgbGlzdCBcIiR7bmFtZX1cImApXHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcbn1cclxuIl19
|
|
491
|
+
exports["default"] = _default;
|
package/package.json
CHANGED
|
@@ -1,10 +1,25 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@lotus-tree/fg-notation",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"main": "lib/index.js",
|
|
5
|
-
"module": "src/index.js",
|
|
6
|
-
"
|
|
7
|
-
"
|
|
8
|
-
"
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
{
|
|
2
|
+
"name": "@lotus-tree/fg-notation",
|
|
3
|
+
"version": "1.1.3",
|
|
4
|
+
"main": "lib/index.js",
|
|
5
|
+
"module": "src/index.js",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"run-babel": "babel --delete-dir-on-start --copy-files src",
|
|
8
|
+
"build": "yarn run run-babel --out-dir lib",
|
|
9
|
+
"dev": "yarn run run-babel --watch --out-dir dev",
|
|
10
|
+
"prepublishOnly": "yarn build"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"@lotus-tree/command-handler": "^2.0.0",
|
|
14
|
+
"bent": "^7.3.12",
|
|
15
|
+
"glob": "^7.2.0",
|
|
16
|
+
"sharp": "^0.29.3"
|
|
17
|
+
},
|
|
18
|
+
"devDependencies": {
|
|
19
|
+
"@babel/cli": "^7.16.7",
|
|
20
|
+
"@babel/core": "^7.16.7",
|
|
21
|
+
"@babel/node": "^7.16.7",
|
|
22
|
+
"@babel/plugin-transform-runtime": "^7.16.7",
|
|
23
|
+
"@babel/preset-env": "^7.16.7"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
Binary file
|
package/src/index.js
CHANGED
|
@@ -2,11 +2,34 @@ import sharp from 'sharp'
|
|
|
2
2
|
import path from 'path'
|
|
3
3
|
import glob from 'glob'
|
|
4
4
|
import { DataTypes } from 'sequelize'
|
|
5
|
+
import bent from 'bent'
|
|
5
6
|
|
|
7
|
+
const getJSON = bent('json')
|
|
6
8
|
const imgPath = path.join(__dirname, 'img')
|
|
7
9
|
const basicInputs = new Map()
|
|
8
10
|
const gameInputs = new Map()
|
|
9
11
|
|
|
12
|
+
let glossary = {}
|
|
13
|
+
let terms = []
|
|
14
|
+
|
|
15
|
+
getGlossary()
|
|
16
|
+
setInterval(getGlossary, 5 * 60 * 1000)
|
|
17
|
+
|
|
18
|
+
async function getGlossary () {
|
|
19
|
+
const result = await getJSON('https://glossary.infil.net/json/glossary.json')
|
|
20
|
+
const tempG = {}
|
|
21
|
+
const tempT = []
|
|
22
|
+
|
|
23
|
+
result.forEach(i => {
|
|
24
|
+
const term = i.term.toLowerCase()
|
|
25
|
+
tempG[term] = i
|
|
26
|
+
tempT.push(term)
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
glossary = tempG
|
|
30
|
+
terms = tempT
|
|
31
|
+
}
|
|
32
|
+
|
|
10
33
|
glob.sync(path.join(imgPath, 'basic/**'), { nodir: true })
|
|
11
34
|
.forEach(p => {
|
|
12
35
|
const input = p.split('/').pop().replace('.png', '')
|
|
@@ -49,12 +72,16 @@ const builtin = {
|
|
|
49
72
|
37: {
|
|
50
73
|
game: 'sf',
|
|
51
74
|
caption: '***LETS GO JUSTIN!***',
|
|
52
|
-
input: '6 6 6 6 6 6 6 >> 6 6 6 6 6 6 6 >> 8 6 j. hk >> 2 mk >> 623
|
|
75
|
+
input: '6 6 6 6 6 6 6 >> 6 6 6 6 6 6 6 >> 8 6 j. hk >> 2 mk >> 623 mp >> 236 236 lk'
|
|
53
76
|
}
|
|
54
77
|
}
|
|
55
78
|
|
|
56
79
|
export default {
|
|
57
80
|
name: 'fg-notation',
|
|
81
|
+
about: {
|
|
82
|
+
name: 'FG Notation',
|
|
83
|
+
value: '[Instructions and source code](https://lotus.chitowarlock.com/fgnotation)\n[Infil\'s Fighting Game Glossary](https://glossary.infil.net)\n[MagicianStuff\'s Fighthing Game notations emotes](https://twitter.com/MagicianStuff/status/1477931054484893697)'
|
|
84
|
+
},
|
|
58
85
|
intents: ['GUILD_MESSAGES'],
|
|
59
86
|
partials: ['MESSAGE'],
|
|
60
87
|
|
|
@@ -102,8 +129,8 @@ export default {
|
|
|
102
129
|
commands: {
|
|
103
130
|
fgi: {
|
|
104
131
|
usage: 'fgi [game] [inputs]',
|
|
105
|
-
desc: '
|
|
106
|
-
example: '
|
|
132
|
+
desc: 'Converts a list of inputs into an image',
|
|
133
|
+
example: 'fgi sf 236P 214K',
|
|
107
134
|
execute: async ({ param }, { message }) => {
|
|
108
135
|
const [, game, i1] = param
|
|
109
136
|
if (!game || !i1) return message.reply('Missing arguments. Example: >fgi sf 236P 214K')
|
|
@@ -117,8 +144,8 @@ export default {
|
|
|
117
144
|
},
|
|
118
145
|
fgsave: {
|
|
119
146
|
usage: 'fgsave [game] [name] [inputs]',
|
|
120
|
-
desc: '
|
|
121
|
-
example: '
|
|
147
|
+
desc: 'Saves a list of inputs into a command',
|
|
148
|
+
example: 'fgi sf testName 236P 214K',
|
|
122
149
|
execute: async ({ param, sequelize }, { message }) => {
|
|
123
150
|
const [, game, name, i1] = param
|
|
124
151
|
if (!game || !name || !i1) return message.reply('Missing arguments. Example: >fgi sf testName 236P 214K')
|
|
@@ -133,9 +160,9 @@ export default {
|
|
|
133
160
|
}
|
|
134
161
|
},
|
|
135
162
|
fgcaption: {
|
|
136
|
-
usage: '
|
|
137
|
-
desc: '
|
|
138
|
-
example: '
|
|
163
|
+
usage: 'fgcaption [name] [caption]',
|
|
164
|
+
desc: 'Adds a caption to a saved input command',
|
|
165
|
+
example: 'fgcaption testName This is a caption',
|
|
139
166
|
execute: async ({ param, sequelize }, { message }) => {
|
|
140
167
|
const [, name, i1] = param
|
|
141
168
|
if (!name || !i1) return message.reply('Missing arguments. Example: >fgi testName This is a caption')
|
|
@@ -150,6 +177,24 @@ export default {
|
|
|
150
177
|
|
|
151
178
|
message.channel.send(`Saved caption for input list "${name}"`)
|
|
152
179
|
}
|
|
180
|
+
},
|
|
181
|
+
fgglossary: {
|
|
182
|
+
usage: 'fgglossary [search term]',
|
|
183
|
+
desc: 'Searches for a term on Infil\'s Glossary',
|
|
184
|
+
example: 'fgglossary mexican uppercut',
|
|
185
|
+
execute: async ({ param, sequelize }, { message }) => {
|
|
186
|
+
const params = param.slice(1)
|
|
187
|
+
if (params.length === 0) return message.reply('Missing search term. Example: >fgglossary mexican uppercut')
|
|
188
|
+
|
|
189
|
+
const search = params.join(' ').toLowerCase()
|
|
190
|
+
const result = terms.filter(i => i.includes(search))
|
|
191
|
+
const url = `https://glossary.infil.net/?t=${params.join('%20').toLowerCase()}`
|
|
192
|
+
|
|
193
|
+
if (result.length === 0) return message.reply(`Term "${search}" not found`)
|
|
194
|
+
if (result.length === 1) return message.reply(`\`\`\`${glossary[result[0]].def}\`\`\`Source: <${url}>`)
|
|
195
|
+
|
|
196
|
+
message.reply(`Multiple terms found: ${url}`)
|
|
197
|
+
}
|
|
153
198
|
}
|
|
154
199
|
}
|
|
155
200
|
}
|