/[sudobot]/trunk/src/services/AFKEngine.ts
ViewVC logotype

Diff of /trunk/src/services/AFKEngine.ts

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 304 by rakin, Mon Jul 29 17:29:27 2024 UTC revision 393 by rakin, Mon Jul 29 17:29:59 2024 UTC
# Line 1  Line 1 
1    /**
2    * This file is part of SudoBot.
3    *
4    * Copyright (C) 2021-2022 OSN Inc.
5    *
6    * SudoBot is free software; you can redistribute it and/or modify it
7    * under the terms of the GNU Affero General Public License as published by
8    * the Free Software Foundation, either version 3 of the License, or
9    * (at your option) any later version.
10    *
11    * SudoBot is distributed in the hope that it will be useful, but
12    * WITHOUT ANY WARRANTY; without even the implied warranty of
13    * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14    * GNU Affero General Public License for more details.
15    *
16    * You should have received a copy of the GNU Affero General Public License
17    * along with SudoBot. If not, see <https://www.gnu.org/licenses/>.
18    */
19    
20  import { formatDistanceToNowStrict } from "date-fns";  import { formatDistanceToNowStrict } from "date-fns";
21  import { CommandInteraction, GuildMember, Message, User, Util } from "discord.js";  import { CommandInteraction, GuildMember, Message, Util } from "discord.js";
22  import DiscordClient from "../client/Client";  import DiscordClient from "../client/Client";
23  import MessageEmbed from "../client/MessageEmbed";  import MessageEmbed from "../client/MessageEmbed";
24  import AFKCommand from "../commands/utils/AFKCommand";  import AFK, { IAFK } from "../models/AFK";
 import AFK from "../models/AFK";  
25  import Service from "../utils/structures/Service";  import Service from "../utils/structures/Service";
26    
27  export interface MentionSchema {  export interface MentionSchema {
# Line 12  export interface MentionSchema { Line 30  export interface MentionSchema {
30  }  }
31    
32  export default class AFKEngine extends Service {  export default class AFKEngine extends Service {
33      list: AFK[] = [];      list: IAFK[] = [];
34    
35      constructor(client: DiscordClient) {      constructor(client: DiscordClient) {
36          super(client);          super(client);
37          AFK.findAll().then(models => this.list = models).catch(console.error);          AFK.find().then(models => this.list = models).catch(console.error);
38      }      }
39    
40      findUsers(ids: string[], guild: string) {      findUsers(ids: string[], guild: string) {
41          return this.list.filter(afk => ids.includes(afk.get("user") as string) && afk.get("guild_id") as string === guild);          return this.list.filter(afk => ids.includes(afk.user) && afk.guild_id === guild);
42      }      }
43    
44      async removeUser(id: string, guild: string) {      async removeUser(id: string, guild: string) {
45          let index = 0;          let index = 0;
46    
47          for await (const afk of this.list) {          for await (const afk of this.list) {
48              if (afk.get('user') === id && afk.get("guild_id") === guild) {              if (afk.user === id && afk.guild_id === guild) {
49                  await afk.destroy();                  await afk.delete();
50                  this.list.splice(index, 1);                  this.list.splice(index, 1);
51              }              }
52    
# Line 81  export default class AFKEngine extends S Line 99  export default class AFKEngine extends S
99                  user: message.member!.user.id,                  user: message.member!.user.id,
100                  guild_id: message.guild!.id,                  guild_id: message.guild!.id,
101                  mentions: [],                  mentions: [],
102                  reason: status ?? undefined                  reason: status ?? undefined,
103                    createdAt: new Date()
104              }));              }));
105    
106              await message.reply({              await message.reply({
# Line 107  export default class AFKEngine extends S Line 126  export default class AFKEngine extends S
126          const mention = msg.mentions.members?.first();          const mention = msg.mentions.members?.first();
127    
128          if (mention) {          if (mention) {
129              const afkRecords: AFK[] = this.findUsers([...msg.mentions.members!.keys()].slice(0, 3), msg.guild!.id);              const afkRecords: Array<IAFK> = this.findUsers([...msg.mentions.members!.keys()].slice(0, 3), msg.guild!.id).filter(afk => afk.user !== msg.author.id);
130    
131              if (!afkRecords || afkRecords.length < 1) {              if (!afkRecords || afkRecords.length < 1) {
132                  return;                  return;
133              }              }
134    
135              for (const record of afkRecords) {              for (const record of afkRecords) {
136                  const mentions = record.get("mentions") as MentionSchema[];                  const mentions = record.mentions as MentionSchema[];
137    
138                  mentions.push({                  mentions.push({
139                      date: Date.now(),                      date: Date.now(),

Legend:
Removed from v.304  
changed lines
  Added in v.393

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26