@lotus-tree/fg-notation 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +29 -19
- package/dev/img/basic/+.png +0 -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/bbtag/a.png +0 -0
- package/dev/img/games/bbtag/b.png +0 -0
- package/dev/img/games/bbtag/c.png +0 -0
- package/dev/img/games/bbtag/d.png +0 -0
- package/dev/img/games/bbtag/p.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 +563 -0
- package/dev/info.json +33 -0
- package/lib/img/basic/+.png +0 -0
- package/lib/img/games/bbtag/a.png +0 -0
- package/lib/img/games/bbtag/b.png +0 -0
- package/lib/img/games/bbtag/c.png +0 -0
- package/lib/img/games/bbtag/d.png +0 -0
- package/lib/img/games/bbtag/p.png +0 -0
- package/lib/img/games/gg/rc.png +0 -0
- package/lib/index.js +562 -488
- package/lib/info.json +33 -0
- package/package.json +9 -4
- package/src/img/basic/+.png +0 -0
- package/src/img/games/bbtag/a.png +0 -0
- package/src/img/games/bbtag/b.png +0 -0
- package/src/img/games/bbtag/c.png +0 -0
- package/src/img/games/bbtag/d.png +0 -0
- package/src/img/games/bbtag/p.png +0 -0
- package/src/img/games/gg/rc.png +0 -0
- package/src/index.js +87 -33
- package/src/info.json +33 -0
- package/examples/ex1.GIF +0 -0
- package/examples/fg1.GIF +0 -0
- package/examples/fg2.GIF +0 -0
package/lib/info.json
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
{
|
2
|
+
"sizes": { "+": 55 },
|
3
|
+
|
4
|
+
"builtin": {
|
5
|
+
"37": {
|
6
|
+
"game": "sf",
|
7
|
+
"caption": "***LETS GO JUSTIN!***",
|
8
|
+
"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"
|
9
|
+
}
|
10
|
+
},
|
11
|
+
|
12
|
+
"aliases": {
|
13
|
+
"games": {
|
14
|
+
"bbt": "bbtag",
|
15
|
+
"db": "dbz"
|
16
|
+
},
|
17
|
+
|
18
|
+
"inputs": {
|
19
|
+
"basic": {
|
20
|
+
"doubleforward": [">>"]
|
21
|
+
},
|
22
|
+
|
23
|
+
"games": {
|
24
|
+
"bbtag": {
|
25
|
+
"throw": ["b","+","c"],
|
26
|
+
"crb": ["d","+","p"],
|
27
|
+
"airdash": ["a","+","b"],
|
28
|
+
"reversal": ["a","+","d"]
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}
|
33
|
+
}
|
package/package.json
CHANGED
@@ -1,17 +1,22 @@
|
|
1
1
|
{
|
2
2
|
"name": "@lotus-tree/fg-notation",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.2.0",
|
4
4
|
"main": "lib/index.js",
|
5
5
|
"module": "src/index.js",
|
6
6
|
"scripts": {
|
7
|
-
"
|
8
|
-
"
|
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 --source-maps inline --out-dir dev",
|
10
|
+
"prepublishOnly": "yarn build"
|
9
11
|
},
|
10
12
|
"dependencies": {
|
13
|
+
"bent": "^7.3.12",
|
11
14
|
"glob": "^7.2.0",
|
12
|
-
"request-promise": "^4.2.6",
|
13
15
|
"sharp": "^0.29.3"
|
14
16
|
},
|
17
|
+
"peerDependencies": {
|
18
|
+
"@lotus-tree/command-handler": "^2.1.0"
|
19
|
+
},
|
15
20
|
"devDependencies": {
|
16
21
|
"@babel/cli": "^7.16.7",
|
17
22
|
"@babel/core": "^7.16.7",
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
package/src/index.js
CHANGED
@@ -2,8 +2,11 @@ import sharp from 'sharp'
|
|
2
2
|
import path from 'path'
|
3
3
|
import glob from 'glob'
|
4
4
|
import { DataTypes } from 'sequelize'
|
5
|
-
import
|
5
|
+
import bent from 'bent'
|
6
6
|
|
7
|
+
import { sizes, aliases, builtin } from './info.json'
|
8
|
+
|
9
|
+
const getJSON = bent('json')
|
7
10
|
const imgPath = path.join(__dirname, 'img')
|
8
11
|
const basicInputs = new Map()
|
9
12
|
const gameInputs = new Map()
|
@@ -15,7 +18,7 @@ getGlossary()
|
|
15
18
|
setInterval(getGlossary, 5 * 60 * 1000)
|
16
19
|
|
17
20
|
async function getGlossary () {
|
18
|
-
const result =
|
21
|
+
const result = await getJSON('https://glossary.infil.net/json/glossary.json')
|
19
22
|
const tempG = {}
|
20
23
|
const tempT = []
|
21
24
|
|
@@ -33,50 +36,89 @@ glob.sync(path.join(imgPath, 'basic/**'), { nodir: true })
|
|
33
36
|
.forEach(p => {
|
34
37
|
const input = p.split('/').pop().replace('.png', '')
|
35
38
|
basicInputs.set(input, p)
|
36
|
-
})
|
37
39
|
|
38
|
-
|
40
|
+
const alias = aliases.inputs.basic[input]
|
41
|
+
if (alias) {
|
42
|
+
alias.forEach(i => {
|
43
|
+
basicInputs.set(i, p)
|
44
|
+
if (sizes[input]) sizes[i] = sizes[input]
|
45
|
+
})
|
46
|
+
}
|
47
|
+
})
|
39
48
|
|
40
|
-
glob.sync(path.join(imgPath, 'games
|
49
|
+
glob.sync(path.join(imgPath, 'games/*'))
|
41
50
|
.forEach(p => {
|
42
|
-
const {
|
51
|
+
const { base } = path.parse(path.relative(path.join(imgPath, 'games'), p))
|
52
|
+
gameInputs.set(base, new Map())
|
53
|
+
|
54
|
+
glob.sync(path.join(imgPath, 'games', base, '**'), { nodir: true })
|
55
|
+
.forEach(input => {
|
56
|
+
const { name } = path.parse(input)
|
57
|
+
gameInputs.get(base).set(name, input)
|
58
|
+
})
|
59
|
+
|
60
|
+
const alias = aliases.inputs.games[base]
|
43
61
|
|
44
|
-
if (
|
45
|
-
|
62
|
+
if (alias) {
|
63
|
+
for (const [a, s] of Object.entries(alias)) {
|
64
|
+
gameInputs.get(base).set(a, s)
|
65
|
+
}
|
66
|
+
}
|
46
67
|
})
|
47
68
|
|
48
69
|
function solveInput (inputs, input) {
|
49
|
-
if (inputs.has(input)) return [input]
|
70
|
+
if (inputs.has(input)) return isString(inputs.get(input)) ? [input] : inputs.get(input)
|
50
71
|
|
51
72
|
for (let i = 0; i < input.length; i++) {
|
52
73
|
const s1 = input.slice(0, 0 - i)
|
53
|
-
|
74
|
+
|
75
|
+
if (inputs.has(s1)) {
|
76
|
+
const result = inputs.get(s1)
|
77
|
+
const remaining = solveInput(inputs, input.slice(0 - i))
|
78
|
+
|
79
|
+
return isString(result) ? [s1, ...remaining] : [...result, ...remaining]
|
80
|
+
}
|
54
81
|
}
|
55
82
|
|
56
83
|
throw new Error(`Cannot find "${input}" as a recognizable input`)
|
57
84
|
}
|
58
85
|
|
59
86
|
async function sendInput (inputs, result, message, caption) {
|
60
|
-
const
|
61
|
-
|
62
|
-
|
63
|
-
|
87
|
+
const width = result.map(it => sizes[it] || 152).reduce((a, b) => a + b, 0)
|
88
|
+
const images = []
|
89
|
+
let left = 0
|
90
|
+
|
91
|
+
result.forEach((it, index) => {
|
92
|
+
const size = sizes[it] || 152
|
93
|
+
images.push({ input: inputs.get(it), left, top: Math.floor((152 - size) / 2) })
|
94
|
+
left += size
|
95
|
+
})
|
96
|
+
|
97
|
+
let canvas = sharp({ create: { width, height: 152, channels: 4, background: 'transparent' } })
|
64
98
|
.png()
|
65
|
-
.
|
99
|
+
.composite(images)
|
100
|
+
|
101
|
+
canvas = await canvas.toBuffer()
|
102
|
+
|
103
|
+
if (result.length < 12) canvas = await sharp(canvas).resize({ height: 55 }).png().toBuffer()
|
66
104
|
|
67
105
|
return message.reply({ content: caption, files: [canvas] })
|
68
106
|
}
|
69
107
|
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
108
|
+
function checkGame (game) {
|
109
|
+
return gameInputs.has(game) ? game : aliases.games[game]
|
110
|
+
}
|
111
|
+
|
112
|
+
function isString (x) {
|
113
|
+
return Object.prototype.toString.call(x) === '[object String]'
|
76
114
|
}
|
77
115
|
|
78
116
|
export default {
|
79
117
|
name: 'fg-notation',
|
118
|
+
about: {
|
119
|
+
name: 'FG Notation',
|
120
|
+
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)'
|
121
|
+
},
|
80
122
|
intents: ['GUILD_MESSAGES'],
|
81
123
|
partials: ['MESSAGE'],
|
82
124
|
|
@@ -127,14 +169,20 @@ export default {
|
|
127
169
|
desc: 'Converts a list of inputs into an image',
|
128
170
|
example: 'fgi sf 236P 214K',
|
129
171
|
execute: async ({ param }, { message }) => {
|
130
|
-
const [,
|
131
|
-
if (!
|
172
|
+
const [, gameInput, i1] = param
|
173
|
+
if (!gameInput || !i1) return message.reply('Missing arguments. Example: >fgi sf 236P 214K')
|
174
|
+
|
175
|
+
const game = checkGame(gameInput)
|
132
176
|
if (!gameInputs.has(game)) return message.reply(`"${game}" is not a valid game. Available games: ${Array.from(gameInputs.keys()).join(' ')}`)
|
133
177
|
|
134
|
-
|
135
|
-
|
178
|
+
try {
|
179
|
+
const inputs = new Map([...basicInputs, ...gameInputs.get(game)])
|
180
|
+
const result = param.slice(2).map(i => solveInput(inputs, i.toLowerCase())).flat()
|
136
181
|
|
137
|
-
|
182
|
+
sendInput(inputs, result, message)
|
183
|
+
} catch (err) {
|
184
|
+
message.reply(err.message)
|
185
|
+
}
|
138
186
|
}
|
139
187
|
},
|
140
188
|
fgsave: {
|
@@ -142,16 +190,22 @@ export default {
|
|
142
190
|
desc: 'Saves a list of inputs into a command',
|
143
191
|
example: 'fgi sf testName 236P 214K',
|
144
192
|
execute: async ({ param, sequelize }, { message }) => {
|
145
|
-
const [,
|
146
|
-
if (!
|
193
|
+
const [, gameInput, name, i1] = param
|
194
|
+
if (!gameInput || !name || !i1) return message.reply('Missing arguments. Example: >fgi sf testName 236P 214K')
|
195
|
+
|
196
|
+
const game = checkGame(gameInput)
|
147
197
|
if (!gameInputs.has(game)) return message.reply(`"${game}" is not a valid game. Available games: ${Array.from(gameInputs.keys()).join(' ')}`)
|
148
198
|
|
149
|
-
|
150
|
-
|
199
|
+
try {
|
200
|
+
const inputs = new Map([...basicInputs, ...gameInputs.get(game)])
|
201
|
+
const input = param.slice(3).map(i => solveInput(inputs, i.toLowerCase())).flat().join(' ')
|
151
202
|
|
152
|
-
|
203
|
+
await sequelize.models.fginput.create({ guild: message.guild.id, name, createdBy: message.author.id, game, input })
|
153
204
|
|
154
|
-
|
205
|
+
message.channel.send(`Saved command "${input}" as "${name}"`)
|
206
|
+
} catch (err) {
|
207
|
+
message.reply(err.message)
|
208
|
+
}
|
155
209
|
}
|
156
210
|
},
|
157
211
|
fgcaption: {
|
@@ -188,7 +242,7 @@ export default {
|
|
188
242
|
if (result.length === 0) return message.reply(`Term "${search}" not found`)
|
189
243
|
if (result.length === 1) return message.reply(`\`\`\`${glossary[result[0]].def}\`\`\`Source: <${url}>`)
|
190
244
|
|
191
|
-
message.reply(url)
|
245
|
+
message.reply(`Multiple terms found: ${url}`)
|
192
246
|
}
|
193
247
|
}
|
194
248
|
}
|
package/src/info.json
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
{
|
2
|
+
"sizes": { "+": 55 },
|
3
|
+
|
4
|
+
"builtin": {
|
5
|
+
"37": {
|
6
|
+
"game": "sf",
|
7
|
+
"caption": "***LETS GO JUSTIN!***",
|
8
|
+
"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"
|
9
|
+
}
|
10
|
+
},
|
11
|
+
|
12
|
+
"aliases": {
|
13
|
+
"games": {
|
14
|
+
"bbt": "bbtag",
|
15
|
+
"db": "dbz"
|
16
|
+
},
|
17
|
+
|
18
|
+
"inputs": {
|
19
|
+
"basic": {
|
20
|
+
"doubleforward": [">>"]
|
21
|
+
},
|
22
|
+
|
23
|
+
"games": {
|
24
|
+
"bbtag": {
|
25
|
+
"throw": ["b","+","c"],
|
26
|
+
"crb": ["d","+","p"],
|
27
|
+
"airdash": ["a","+","b"],
|
28
|
+
"reversal": ["a","+","d"]
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
}
|
33
|
+
}
|
package/examples/ex1.GIF
DELETED
Binary file
|
package/examples/fg1.GIF
DELETED
Binary file
|
package/examples/fg2.GIF
DELETED
Binary file
|