1 |
import { GuildMember } from "discord.js"; |
2 |
import DiscordClient from "../client/Client"; |
3 |
import MessageEmbed from "../client/MessageEmbed"; |
4 |
import Service from "../utils/structures/Service"; |
5 |
|
6 |
export default class Automute extends Service { |
7 |
MuteRecord: any; |
8 |
|
9 |
constructor(client: DiscordClient) { |
10 |
super(client); |
11 |
this.MuteRecord = require("../models/MuteRecord").default; |
12 |
} |
13 |
|
14 |
public async mute(member: GuildMember) { |
15 |
await member.roles.add(this.client.config.props[member.guild.id].mute_role); |
16 |
} |
17 |
|
18 |
public async onMemberJoin(member: GuildMember) { |
19 |
const { MuteRecord } = this; |
20 |
const muteRecord = await MuteRecord.findOne({ |
21 |
where: { |
22 |
user_id: member.user.id, |
23 |
guild_id: member.guild.id |
24 |
} |
25 |
}); |
26 |
|
27 |
if (!muteRecord) { |
28 |
return; |
29 |
} |
30 |
|
31 |
await this.mute(member); |
32 |
|
33 |
this.client.logger.send(member.guild, { |
34 |
embeds: [ |
35 |
new MessageEmbed({ |
36 |
author: { |
37 |
name: member.user.tag, |
38 |
iconURL: member.user.displayAvatarURL(), |
39 |
}, |
40 |
description: 'This user had left the server when they were muted. They\'ve been muted again.', |
41 |
color: 'GOLD', |
42 |
footer: { text: 'Auto Mute' } |
43 |
}) |
44 |
.setTimestamp() |
45 |
] |
46 |
}); |
47 |
|
48 |
await muteRecord.destroy(); |
49 |
} |
50 |
|
51 |
public async onMemberLeave(member: GuildMember) { |
52 |
const { MuteRecord } = this; |
53 |
|
54 |
if (!member.roles.cache.has(this.client.config.props[member.guild.id].mute_role)) { |
55 |
return; |
56 |
} |
57 |
|
58 |
const muteRecord = await MuteRecord.findOne({ |
59 |
where: { |
60 |
user_id: member.user.id, |
61 |
guild_id: member.guild.id |
62 |
} |
63 |
}); |
64 |
|
65 |
if (!muteRecord) { |
66 |
await MuteRecord.create({ |
67 |
user_id: member.user.id, |
68 |
guild_id: member.guild.id |
69 |
}); |
70 |
} |
71 |
} |
72 |
} |