Show bot version in console on start-up
parent
37cba80ed9
commit
3f3de28091
|
@ -0,0 +1,5 @@
|
||||||
|
class BotError extends Error {}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
BotError,
|
||||||
|
};
|
|
@ -0,0 +1,40 @@
|
||||||
|
const fs = require("fs");
|
||||||
|
const path = require("path");
|
||||||
|
|
||||||
|
const gitDir = path.resolve(__dirname, "..", ".git");
|
||||||
|
|
||||||
|
function getPackageVersion() {
|
||||||
|
const packageJson = require("../package.json");
|
||||||
|
return packageJson.version;
|
||||||
|
}
|
||||||
|
|
||||||
|
function getHeadCommitHash() {
|
||||||
|
try {
|
||||||
|
fs.accessSync(gitDir);
|
||||||
|
} catch (e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find HEAD ref and read the commit hash from that ref
|
||||||
|
const headRefInfo = fs.readFileSync(path.resolve(gitDir, "HEAD"), { encoding: "utf8" });
|
||||||
|
if (headRefInfo.startsWith("ref:")) {
|
||||||
|
const refPath = headRefInfo.slice(5).trim(); // ref: refs/heads/... to refs/heads/...
|
||||||
|
return fs.readFileSync(path.resolve(gitDir, refPath), { encoding: "utf8" }).trim();
|
||||||
|
} else {
|
||||||
|
// Detached head, just the commit hash
|
||||||
|
return headRefInfo.trim();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function getPrettyVersion() {
|
||||||
|
const packageVersion = getPackageVersion();
|
||||||
|
const headCommitHash = getHeadCommitHash();
|
||||||
|
|
||||||
|
return headCommitHash
|
||||||
|
? `v${packageVersion} (${headCommitHash.slice(0, 8)})`
|
||||||
|
: packageVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
getPrettyVersion,
|
||||||
|
};
|
11
src/index.js
11
src/index.js
|
@ -16,7 +16,7 @@ try {
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
const utils = require("./utils");
|
const { BotError } = require("./BotError");
|
||||||
|
|
||||||
// Error handling
|
// Error handling
|
||||||
// Force crash on unhandled rejections and uncaught exceptions.
|
// Force crash on unhandled rejections and uncaught exceptions.
|
||||||
|
@ -32,7 +32,7 @@ function errorHandler(err) {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (typeof err === "string") {
|
if (typeof err === "string") {
|
||||||
console.error(`Error: ${err}`);
|
console.error(`Error: ${err}`);
|
||||||
} else if (err instanceof utils.BotError) {
|
} else if (err instanceof BotError) {
|
||||||
// Leave out stack traces for BotErrors (the message has enough info)
|
// Leave out stack traces for BotErrors (the message has enough info)
|
||||||
console.error(`Error: ${err.message}`);
|
console.error(`Error: ${err.message}`);
|
||||||
} else if (err.message === "Disallowed intents specified") {
|
} else if (err.message === "Disallowed intents specified") {
|
||||||
|
@ -72,6 +72,9 @@ function errorHandler(err) {
|
||||||
process.on("uncaughtException", errorHandler);
|
process.on("uncaughtException", errorHandler);
|
||||||
process.on("unhandledRejection", errorHandler);
|
process.on("unhandledRejection", errorHandler);
|
||||||
|
|
||||||
|
const { getPrettyVersion } = require("./botVersion");
|
||||||
|
console.log(`Starting Modmail ${getPrettyVersion()}`);
|
||||||
|
|
||||||
let testedPackage = "";
|
let testedPackage = "";
|
||||||
try {
|
try {
|
||||||
const packageJson = require("../package.json");
|
const packageJson = require("../package.json");
|
||||||
|
@ -85,11 +88,11 @@ try {
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
const config = require("./cfg");
|
(async function() {
|
||||||
|
require("./cfg");
|
||||||
const main = require("./main");
|
const main = require("./main");
|
||||||
const knex = require("./knex");
|
const knex = require("./knex");
|
||||||
|
|
||||||
(async function() {
|
|
||||||
// Make sure the database is up to date
|
// Make sure the database is up to date
|
||||||
const [completed, newMigrations] = await knex.migrate.list();
|
const [completed, newMigrations] = await knex.migrate.list();
|
||||||
if (newMigrations.length > 0) {
|
if (newMigrations.length > 0) {
|
||||||
|
|
|
@ -3,7 +3,7 @@ const fs = require("fs");
|
||||||
const {promisify} = require("util");
|
const {promisify} = require("util");
|
||||||
const utils = require("../utils");
|
const utils = require("../utils");
|
||||||
const updates = require("../data/updates");
|
const updates = require("../data/updates");
|
||||||
const config = require("../cfg");
|
const { getPrettyVersion } = require("../botVersion");
|
||||||
|
|
||||||
const access = promisify(fs.access);
|
const access = promisify(fs.access);
|
||||||
const readFile = promisify(fs.readFile);
|
const readFile = promisify(fs.readFile);
|
||||||
|
@ -12,34 +12,7 @@ const GIT_DIR = path.join(__dirname, "..", "..", ".git");
|
||||||
|
|
||||||
module.exports = ({ bot, knex, config, commands }) => {
|
module.exports = ({ bot, knex, config, commands }) => {
|
||||||
commands.addInboxServerCommand("version", [], async (msg, args, thread) => {
|
commands.addInboxServerCommand("version", [], async (msg, args, thread) => {
|
||||||
const packageJson = require("../../package.json");
|
let response = `Modmail ${getPrettyVersion()}`;
|
||||||
const packageVersion = packageJson.version;
|
|
||||||
|
|
||||||
let response = `Modmail v${packageVersion}`;
|
|
||||||
|
|
||||||
let isGit;
|
|
||||||
try {
|
|
||||||
await access(GIT_DIR);
|
|
||||||
isGit = true;
|
|
||||||
} catch (e) {
|
|
||||||
isGit = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isGit) {
|
|
||||||
let commitHash;
|
|
||||||
const HEAD = await readFile(path.join(GIT_DIR, "HEAD"), {encoding: "utf8"});
|
|
||||||
|
|
||||||
if (HEAD.startsWith("ref:")) {
|
|
||||||
// Branch
|
|
||||||
const ref = HEAD.match(/^ref: (.*)$/m)[1];
|
|
||||||
commitHash = (await readFile(path.join(GIT_DIR, ref), {encoding: "utf8"})).trim();
|
|
||||||
} else {
|
|
||||||
// Detached head
|
|
||||||
commitHash = HEAD.trim();
|
|
||||||
}
|
|
||||||
|
|
||||||
response += ` (${commitHash.slice(0, 7)})`;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config.updateNotifications) {
|
if (config.updateNotifications) {
|
||||||
const availableUpdate = await updates.getAvailableUpdate();
|
const availableUpdate = await updates.getAvailableUpdate();
|
||||||
|
|
|
@ -4,8 +4,7 @@ const moment = require("moment");
|
||||||
const humanizeDuration = require("humanize-duration");
|
const humanizeDuration = require("humanize-duration");
|
||||||
const publicIp = require("public-ip");
|
const publicIp = require("public-ip");
|
||||||
const config = require("./cfg");
|
const config = require("./cfg");
|
||||||
|
const { BotError } = require("./BotError");
|
||||||
class BotError extends Error {}
|
|
||||||
|
|
||||||
const userMentionRegex = /^<@!?([0-9]+?)>$/;
|
const userMentionRegex = /^<@!?([0-9]+?)>$/;
|
||||||
|
|
||||||
|
@ -492,8 +491,6 @@ function chunkMessageLines(str, maxChunkLength = 1990) {
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
BotError,
|
|
||||||
|
|
||||||
getInboxGuild,
|
getInboxGuild,
|
||||||
getMainGuilds,
|
getMainGuilds,
|
||||||
getLogChannel,
|
getLogChannel,
|
||||||
|
|
Loading…
Reference in New Issue