mirror of
https://github.com/ZeppelinBot/Zeppelin.git
synced 2025-03-16 14:11:50 +00:00
Made it possible to list all alerts and delete them
Might be needed since you can potentially set reminders for far far in the future
This commit is contained in:
parent
913120a1fe
commit
3174425083
2 changed files with 53 additions and 3 deletions
|
@ -34,6 +34,15 @@ export class GuildVCAlerts extends BaseGuildRepository {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async getAlertsByRequestorId(requestorId: string): Promise<VCAlert[]> {
|
||||||
|
return this.allAlerts.find({
|
||||||
|
where: {
|
||||||
|
guild_id: this.guildId,
|
||||||
|
requestor_id: requestorId,
|
||||||
|
},
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
async delete(id) {
|
async delete(id) {
|
||||||
await this.allAlerts.delete({
|
await this.allAlerts.delete({
|
||||||
guild_id: this.guildId,
|
guild_id: this.guildId,
|
||||||
|
|
|
@ -4,7 +4,7 @@ import humanizeDuration from "humanize-duration";
|
||||||
import { Message, Member, Guild, TextableChannel, VoiceChannel, Channel } from "eris";
|
import { Message, Member, Guild, TextableChannel, VoiceChannel, Channel } from "eris";
|
||||||
import { GuildVCAlerts } from "../data/GuildVCAlerts";
|
import { GuildVCAlerts } from "../data/GuildVCAlerts";
|
||||||
import moment = require("moment");
|
import moment = require("moment");
|
||||||
import { resolveMember } from "../utils";
|
import { resolveMember, sorter, createChunkedMessage, errorMessage, successMessage } from "../utils";
|
||||||
|
|
||||||
const ALERT_LOOP_TIME = 30 * 1000;
|
const ALERT_LOOP_TIME = 30 * 1000;
|
||||||
|
|
||||||
|
@ -72,9 +72,11 @@ export class LocatePlugin extends ZeppelinPlugin<ILocatePluginConfig> {
|
||||||
sendWhere(this.guild, member, msg.channel, `${msg.member.mention} |`);
|
sendWhere(this.guild, member, msg.channel, `${msg.member.mention} |`);
|
||||||
}
|
}
|
||||||
|
|
||||||
@d.command("alert", "<member:resolvedMember> [duration:delay] [reminder:string$]", {})
|
@d.command("vcalert", "<member:resolvedMember> [duration:delay] [reminder:string$]", {
|
||||||
|
aliases: ["vca"],
|
||||||
|
})
|
||||||
@d.permission("can_alert")
|
@d.permission("can_alert")
|
||||||
async notifyRequest(msg: Message, args: { member: Member; duration?: number; reminder?: string }) {
|
async vcalertCmd(msg: Message, args: { member: Member; duration?: number; reminder?: string }) {
|
||||||
let time = args.duration || 600000;
|
let time = args.duration || 600000;
|
||||||
let alertTime = moment().add(time, "millisecond");
|
let alertTime = moment().add(time, "millisecond");
|
||||||
let body = args.reminder || "None";
|
let body = args.reminder || "None";
|
||||||
|
@ -89,6 +91,45 @@ export class LocatePlugin extends ZeppelinPlugin<ILocatePluginConfig> {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@d.command("vcalerts")
|
||||||
|
@d.permission("can_alert")
|
||||||
|
async listVcalertCmd(msg: Message) {
|
||||||
|
const alerts = await this.alerts.getAlertsByRequestorId(msg.member.id);
|
||||||
|
if (alerts.length === 0) {
|
||||||
|
this.sendErrorMessage(msg.channel, "You have no active alerts!");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
alerts.sort(sorter("expires_at"));
|
||||||
|
const longestNum = (alerts.length + 1).toString().length;
|
||||||
|
const lines = Array.from(alerts.entries()).map(([i, alert]) => {
|
||||||
|
const num = i + 1;
|
||||||
|
const paddedNum = num.toString().padStart(longestNum, " ");
|
||||||
|
return `\`${paddedNum}.\` \`${alert.expires_at}\` Member: <@!${alert.user_id}> Reminder: \`${alert.body}\``;
|
||||||
|
});
|
||||||
|
createChunkedMessage(msg.channel, lines.join("\n"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@d.command("vcalerts delete", "<num:number>", {
|
||||||
|
aliases: ["vcalerts d"],
|
||||||
|
})
|
||||||
|
@d.permission("can_alert")
|
||||||
|
async deleteVcalertCmd(msg: Message, args: { num: number }) {
|
||||||
|
const alerts = await this.alerts.getAlertsByRequestorId(msg.member.id);
|
||||||
|
alerts.sort(sorter("expires_at"));
|
||||||
|
const lastNum = alerts.length + 1;
|
||||||
|
|
||||||
|
if (args.num > lastNum || args.num < 0) {
|
||||||
|
msg.channel.createMessage(errorMessage("Unknown alert"));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const toDelete = alerts[args.num - 1];
|
||||||
|
await this.alerts.delete(toDelete.id);
|
||||||
|
|
||||||
|
msg.channel.createMessage(successMessage("Alert deleted"));
|
||||||
|
}
|
||||||
|
|
||||||
@d.event("voiceChannelJoin")
|
@d.event("voiceChannelJoin")
|
||||||
async userJoinedVC(member: Member, channel: Channel) {
|
async userJoinedVC(member: Member, channel: Channel) {
|
||||||
if (this.usersWithAlerts.includes(member.id)) {
|
if (this.usersWithAlerts.includes(member.id)) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue