seed.js should now upload the L1 & L2 emojis
This commit is contained in:
parent
9e5a3f5f32
commit
3ef569d855
8 changed files with 79 additions and 2 deletions
10
db/migrations/0004-auto-emoji-guild.sql
Normal file
10
db/migrations/0004-auto-emoji-guild.sql
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
BEGIN TRANSACTION;
|
||||||
|
|
||||||
|
CREATE TABLE auto_emoji (
|
||||||
|
name TEXT NOT NULL,
|
||||||
|
emoji_id TEXT NOT NULL,
|
||||||
|
guild_id TEXT NOT NULL,
|
||||||
|
PRIMARY KEY (name)
|
||||||
|
) WITHOUT ROWID;
|
||||||
|
|
||||||
|
COMMIT;
|
6
db/orm-defs.d.ts
vendored
6
db/orm-defs.d.ts
vendored
|
@ -75,6 +75,12 @@ export type Models = {
|
||||||
message_id: string
|
message_id: string
|
||||||
encoded_emoji: string
|
encoded_emoji: string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
auto_emoji: {
|
||||||
|
name: string
|
||||||
|
emoji_id: string
|
||||||
|
guild_id: string
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export type Prepared<Row> = {
|
export type Prepared<Row> = {
|
||||||
|
|
BIN
docs/img/L1.png
Normal file
BIN
docs/img/L1.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.6 KiB |
BIN
docs/img/L2.png
Normal file
BIN
docs/img/L2.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 514 B |
3
package-lock.json
generated
3
package-lock.json
generated
|
@ -7,7 +7,7 @@
|
||||||
"": {
|
"": {
|
||||||
"name": "out-of-your-element",
|
"name": "out-of-your-element",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "MIT",
|
"license": "AGPL-3.0-or-later",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@chriscdn/promise-semaphore": "^2.0.1",
|
"@chriscdn/promise-semaphore": "^2.0.1",
|
||||||
"better-sqlite3": "^8.3.0",
|
"better-sqlite3": "^8.3.0",
|
||||||
|
@ -18,6 +18,7 @@
|
||||||
"heatsync": "^2.4.1",
|
"heatsync": "^2.4.1",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"matrix-appservice": "^2.0.0",
|
"matrix-appservice": "^2.0.0",
|
||||||
|
"minimist": "^1.2.8",
|
||||||
"mixin-deep": "github:cloudrac3r/mixin-deep#v3.0.0",
|
"mixin-deep": "github:cloudrac3r/mixin-deep#v3.0.0",
|
||||||
"node-fetch": "^2.6.7",
|
"node-fetch": "^2.6.7",
|
||||||
"pngjs": "^7.0.0",
|
"pngjs": "^7.0.0",
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
"heatsync": "^2.4.1",
|
"heatsync": "^2.4.1",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"matrix-appservice": "^2.0.0",
|
"matrix-appservice": "^2.0.0",
|
||||||
|
"minimist": "^1.2.8",
|
||||||
"mixin-deep": "github:cloudrac3r/mixin-deep#v3.0.0",
|
"mixin-deep": "github:cloudrac3r/mixin-deep#v3.0.0",
|
||||||
"node-fetch": "^2.6.7",
|
"node-fetch": "^2.6.7",
|
||||||
"pngjs": "^7.0.0",
|
"pngjs": "^7.0.0",
|
||||||
|
|
|
@ -59,7 +59,6 @@ You'll need:
|
||||||
|
|
||||||
* Administrative access to a homeserver
|
* Administrative access to a homeserver
|
||||||
* Discord bot
|
* Discord bot
|
||||||
* Custom emojis named `L1` and `L2` for replies sent to Discord (TODO: provide)
|
|
||||||
|
|
||||||
Follow these steps:
|
Follow these steps:
|
||||||
|
|
||||||
|
@ -148,6 +147,7 @@ Follow these steps:
|
||||||
* (1) heatsync: Module hot-reloader that I trust.
|
* (1) heatsync: Module hot-reloader that I trust.
|
||||||
* (1) js-yaml: It seems to do what I want, and it's already pulled in by matrix-appservice.
|
* (1) js-yaml: It seems to do what I want, and it's already pulled in by matrix-appservice.
|
||||||
* (70) matrix-appservice: I wish it didn't pull in express :(
|
* (70) matrix-appservice: I wish it didn't pull in express :(
|
||||||
|
* (0) minimist: It's already pulled in by better-sqlite3->prebuild-install
|
||||||
* (0) mixin-deep: This is my fork! It fixes a bug in regular mixin-deep.
|
* (0) mixin-deep: This is my fork! It fixes a bug in regular mixin-deep.
|
||||||
* (3) node-fetch@2: I like it and it does what I want.
|
* (3) node-fetch@2: I like it and it does what I want.
|
||||||
* (0) pngjs: Lottie stickers are converted to bitmaps with the vendored Rlottie WASM build, then the bitmaps are converted to PNG with pngjs.
|
* (0) pngjs: Lottie stickers are converted to bitmaps with the vendored Rlottie WASM build, then the bitmaps are converted to PNG with pngjs.
|
||||||
|
|
|
@ -1,10 +1,14 @@
|
||||||
// @ts-check
|
// @ts-check
|
||||||
|
|
||||||
|
console.log("This could take up to 30 seconds. Please be patient.")
|
||||||
|
|
||||||
const assert = require("assert").strict
|
const assert = require("assert").strict
|
||||||
const fs = require("fs")
|
const fs = require("fs")
|
||||||
const sqlite = require("better-sqlite3")
|
const sqlite = require("better-sqlite3")
|
||||||
const HeatSync = require("heatsync")
|
const HeatSync = require("heatsync")
|
||||||
|
|
||||||
|
const args = require("minimist")(process.argv.slice(2), {string: ["emoji-guild"]})
|
||||||
|
|
||||||
const config = require("../config")
|
const config = require("../config")
|
||||||
const passthrough = require("../passthrough")
|
const passthrough = require("../passthrough")
|
||||||
const db = new sqlite("db/ooye.db")
|
const db = new sqlite("db/ooye.db")
|
||||||
|
@ -27,6 +31,24 @@ const file = require("../matrix/file")
|
||||||
const reg = require("../matrix/read-registration")
|
const reg = require("../matrix/read-registration")
|
||||||
const utils = require("../m2d/converters/utils")
|
const utils = require("../m2d/converters/utils")
|
||||||
|
|
||||||
|
function die(message) {
|
||||||
|
console.error(message)
|
||||||
|
process.exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
async function uploadAutoEmoji(guild, name, filename) {
|
||||||
|
let emoji = guild.emojis.find(e => e.name === name)
|
||||||
|
if (!emoji) {
|
||||||
|
console.log(` Uploading ${name}...`)
|
||||||
|
const data = fs.readFileSync(filename, null)
|
||||||
|
emoji = await discord.snow.guildAssets.createEmoji(guild.id, {name, image: "data:image/png;base64," + data.toString("base64")})
|
||||||
|
} else {
|
||||||
|
console.log(` Reusing ${name}...`)
|
||||||
|
}
|
||||||
|
db.prepare("REPLACE INTO auto_emoji (name, emoji_id, guild_id) VALUES (?, ?, ?)").run(emoji.name, emoji.id, guild.id)
|
||||||
|
return emoji
|
||||||
|
}
|
||||||
|
|
||||||
;(async () => {
|
;(async () => {
|
||||||
const mxid = `@${reg.sender_localpart}:${reg.ooye.server_name}`
|
const mxid = `@${reg.sender_localpart}:${reg.ooye.server_name}`
|
||||||
|
|
||||||
|
@ -45,6 +67,43 @@ const utils = require("../m2d/converters/utils")
|
||||||
|
|
||||||
console.log("✅ Database is ready...")
|
console.log("✅ Database is ready...")
|
||||||
|
|
||||||
|
// upload the L1 L2 emojis to some guild
|
||||||
|
const emojis = db.prepare("SELECT name FROM auto_emoji WHERE name = 'L1' OR name = 'L2'").pluck().all()
|
||||||
|
if (emojis.length !== 2) {
|
||||||
|
// If an argument was supplied, always use that one
|
||||||
|
let guild = null
|
||||||
|
if (args["emoji-guild"]) {
|
||||||
|
if (typeof args["emoji-guild"] === "string") {
|
||||||
|
guild = await discord.snow.guild.getGuild(args["emoji-guild"])
|
||||||
|
}
|
||||||
|
if (!guild) return die(`Error: You asked emojis to be uploaded to guild ID ${args["emoji-guild"]}, but the bot isn't in that guild.`)
|
||||||
|
}
|
||||||
|
// Otherwise, check if we have already registered an auto emoji guild
|
||||||
|
if (!guild) {
|
||||||
|
const guildID = passthrough.select("auto_emoji", "guild_id", {name: "_"}).pluck().get()
|
||||||
|
if (guildID) {
|
||||||
|
guild = await discord.snow.guild.getGuild(guildID, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Otherwise, check if we should create a new guild
|
||||||
|
if (!guild) {
|
||||||
|
const guilds = await discord.snow.user.getGuilds({limit: 11, with_counts: false})
|
||||||
|
if (guilds.length < 10) {
|
||||||
|
console.log(" Creating a guild for emojis...")
|
||||||
|
guild = await discord.snow.guild.createGuild({name: "OOYE Emojis"})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Otherwise, it's the user's problem
|
||||||
|
if (!guild) {
|
||||||
|
return die(`Error: The bot needs to upload some emojis. Please say where to upload them to. Run seed.js again with --emoji-guild=GUILD_ID`)
|
||||||
|
}
|
||||||
|
// Upload those emojis to the chosen location
|
||||||
|
db.prepare("REPLACE INTO auto_emoji (name, emoji_id, guild_id) VALUES ('_', '_', ?)").run(guild.id)
|
||||||
|
await uploadAutoEmoji(guild, "L1", "docs/img/L1.png")
|
||||||
|
await uploadAutoEmoji(guild, "L2", "docs/img/L2.png")
|
||||||
|
}
|
||||||
|
console.log("✅ Emojis are ready...")
|
||||||
|
|
||||||
// ensure homeserver well-known is valid and returns reg.ooye.server_name...
|
// ensure homeserver well-known is valid and returns reg.ooye.server_name...
|
||||||
|
|
||||||
// upload initial images...
|
// upload initial images...
|
||||||
|
|
Loading…
Reference in a new issue