diff --git a/scripts/seed.js b/scripts/seed.js
index 2a0c279..0f2f23d 100644
--- a/scripts/seed.js
+++ b/scripts/seed.js
@@ -1,10 +1,14 @@
// @ts-check
+console.log("This could take up to 30 seconds. Please be patient.")
+
const assert = require("assert").strict
const fs = require("fs")
const sqlite = require("better-sqlite3")
const HeatSync = require("heatsync")
+const args = require("minimist")(process.argv.slice(2), {string: ["emoji-guild"]})
+
const config = require("../config")
const passthrough = require("../passthrough")
const db = new sqlite("db/ooye.db")
@@ -27,6 +31,24 @@ const file = require("../matrix/file")
const reg = require("../matrix/read-registration")
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 () => {
const mxid = `@${reg.sender_localpart}:${reg.ooye.server_name}`
@@ -45,6 +67,43 @@ const utils = require("../m2d/converters/utils")
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...
// upload initial images...
|