121 lines
3.9 KiB
Haxe
121 lines
3.9 KiB
Haxe
import hxdiscord.DiscordClient;
|
|
import hxdiscord.types.*;
|
|
import hxdiscord.endpoints.Endpoints;
|
|
import haxe.Json;
|
|
import sys.io.File;
|
|
import sys.FileSystem;
|
|
using StringTools;
|
|
|
|
class Onequestionmark {
|
|
static var Bot:DiscordClient;
|
|
static var settings:Dynamic;
|
|
|
|
static function main() {
|
|
|
|
// Init
|
|
Sys.println('[${timestamp()}] Starting onequestionmark-chat');
|
|
|
|
if (FileSystem.exists("settings.json")) {
|
|
Sys.println('[${timestamp()}] Found settings.json, loading');
|
|
settings = Json.parse(File.getContent("settings.json"));
|
|
} else {
|
|
Sys.println('[${timestamp()}] Did not find settings.json, exiting');
|
|
Sys.exit(0);
|
|
}
|
|
|
|
// Start the bot
|
|
Bot = new DiscordClient(settings.token, [3276799], settings.debug);
|
|
Bot.onReady = onReady;
|
|
Bot.onMessageCreate = onMessageCreate;
|
|
}
|
|
|
|
public static function onReady() {
|
|
Sys.println('[${timestamp()}] Bot is online');
|
|
//Endpoints.sendMessage(settings.devchannel, {content:"onequestionmark-chat alpha test is now running"}, null, false);
|
|
}
|
|
|
|
public static function onMessageCreate(m:Message) {
|
|
// DevMode check
|
|
if ((!settings.devmode) || (m.guild_id == settings.devserver)) {
|
|
var msg = m.content;
|
|
|
|
// Command processor
|
|
if (msg.charAt(0) == "?") {
|
|
var command = "";
|
|
|
|
if (msg.indexOf(" ") != -1) {
|
|
// Separate command from rest of message, if necessary
|
|
command = msg.substring(1, msg.indexOf(" ")).toLowerCase();
|
|
msg = msg.substring(msg.indexOf(" ")+1);
|
|
} else {
|
|
// Otherwise, remove msg
|
|
command = msg.substring(1).toLowerCase();
|
|
msg = "";
|
|
}
|
|
|
|
switch (command) {
|
|
// Commands that require authorization
|
|
case "quit":
|
|
if (m.author.id == settings.botowner) {
|
|
m.reply({content:"Shutdown command received from botowner, exiting."}, false);
|
|
Sys.println('[${timestamp()}] Shutdown command received from botowner, exiting');
|
|
shutdown();
|
|
}
|
|
case "devmode":
|
|
if (m.author.id == settings.botowner) {
|
|
if (!settings.devmode) {
|
|
settings.devmode = true;
|
|
m.reply({content:"DevMode enabled."}, false);
|
|
} else {
|
|
settings.devmode = false;
|
|
m.reply({content:"DevMode disabled."}, false);
|
|
}
|
|
}
|
|
case "motd":
|
|
if (m.author.id == settings.botowner) {
|
|
if (!settings.motd.channels.contains(m.channel_id)) {
|
|
settings.motd.channels.push(m.channel_id);
|
|
m.reply({content:'MOTD has been enabled for <#${m.channel_id}>'}, false);
|
|
} else {
|
|
settings.motd.channels.remove(m.channel_id);
|
|
m.reply({content:'MOTD has been disabled for <#${m.channel_id}>'}, false);
|
|
}
|
|
}
|
|
// System for WIP commands that only work in testing server
|
|
case "wipcommand":
|
|
if (m.guild_id == settings.devserver) {
|
|
m.reply({content:"Dev Server response."}, true);
|
|
}
|
|
// Basic response commands
|
|
case "chk":
|
|
m.reply({content:'<@${m.author.id}>: ack'}, false);
|
|
case "slap":
|
|
if (msg.length != 0) {m.reply({content:'*onequestionmark slaps ${msg} around a bit with a large trout*'}, false);}
|
|
case "angery":
|
|
m.reply({content:"https://cdn.discordapp.com/attachments/1071547517847732305/1079518504413311108/angery.jpg"}, false);
|
|
case "subway":
|
|
m.reply({content:"https://www.youtube.com/watch?v=y3VRXVvr6XU"}, false);
|
|
// Image database commands
|
|
case "hug":
|
|
m.reply({content:'🫂 *hugs ${msg}*\n<insert randomized hug image here>'}, false);
|
|
}
|
|
}
|
|
|
|
// Non-command responses
|
|
if ((msg.charAt(0) == ".") && (msg.length == 1)) {m.reply({content:"omg a meteor"}, true);}
|
|
}
|
|
}
|
|
|
|
public static function timestamp() {
|
|
return '${StringTools.lpad(Std.string(Date.now().getHours()), "0", 2)}:${StringTools.lpad(Std.string(Date.now().getMinutes()), "0", 2)}';
|
|
}
|
|
|
|
public static function saveSettings() {
|
|
File.saveContent("settings.json", Json.stringify(settings, "\t"));
|
|
}
|
|
|
|
public static function shutdown() {
|
|
saveSettings();
|
|
Sys.exit(0);
|
|
}
|
|
} |