diff --git a/.gitignore b/.gitignore
index a09d215a..bd301f07 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,4 +7,5 @@ api/assets/*.css
database.db
tsconfig.tsbuildinfo
files/
-.env
\ No newline at end of file
+.env
+config.json
\ No newline at end of file
diff --git a/gateway/src/listener/listener.ts b/gateway/src/listener/listener.ts
index 79659a1f..032b2375 100644
--- a/gateway/src/listener/listener.ts
+++ b/gateway/src/listener/listener.ts
@@ -117,7 +117,7 @@ export async function setupListener(this: WebSocket) {
// TODO: only subscribe for events that are in the connection intents
async function consume(this: WebSocket, opts: EventOpts) {
const { data, event } = opts;
- const id = data.id as string;
+ let id = data.id as string;
const permission = this.permissions[id] || new Permissions("ADMINISTRATOR"); // default permission for dm
const consumer = consume.bind(this);
@@ -138,6 +138,10 @@ async function consume(this: WebSocket, opts: EventOpts) {
this.listen_options
);
break;
+ case "GUILD_MEMBER_REMOVE":
+ if (!this.member_events[data.user.id]) break;
+ this.member_events[data.user.id]();
+ break;
case "RELATIONSHIP_REMOVE":
case "CHANNEL_DELETE":
case "GUILD_DELETE":
@@ -151,7 +155,14 @@ async function consume(this: WebSocket, opts: EventOpts) {
.has("VIEW_CHANNEL")
)
return;
- //No break needed here, we need to call the listenEvent function below
+ // No break needed here, we need to call the listenEvent function below
+ case "RELATIONSHIP_ADD":
+ this.events[data.user.id] = await listenEvent(
+ data.user.id,
+ handlePresenceUpdate.bind(this),
+ this.listen_options
+ );
+ break;
case "GUILD_CREATE":
this.events[id] = await listenEvent(id, consumer, listenOpts);
break;
diff --git a/util/src/util/Config.ts b/util/src/util/Config.ts
index 704f3f2f..92907d0c 100644
--- a/util/src/util/Config.ts
+++ b/util/src/util/Config.ts
@@ -1,5 +1,10 @@
import "missing-native-js-functions";
import { ConfigValue, ConfigEntity, DefaultConfigOptions } from "../entities/Config";
+import path from "path";
+import fs from "fs";
+
+// TODO: yaml instead of json
+const overridePath = path.join(process.cwd(), "config.json");
var config: ConfigValue;
var pairs: ConfigEntity[];
@@ -12,8 +17,16 @@ export const Config = {
if (config) return config;
pairs = await ConfigEntity.find();
config = pairsToConfig(pairs);
+ config = (config || {}).merge(DefaultConfigOptions);
+
+ try {
+ const overrideConfig = JSON.parse(fs.readFileSync(overridePath, { encoding: "utf8" }));
+ config = overrideConfig.merge(config);
+ } catch (error) {
+ fs.writeFileSync(overridePath, JSON.stringify(config, null, 4));
+ }
- return this.set((config || {}).merge(DefaultConfigOptions));
+ return this.set(config);
},
get: function get() {
return config;
@@ -38,6 +51,7 @@ function applyConfig(val: ConfigValue) {
pair.value = obj;
return pair.save();
}
+ fs.writeFileSync(overridePath, JSON.stringify(val, null, 4));
return apply(val);
}
|