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

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

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

revision 226 by rakin, Mon Jul 29 17:29:06 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 { readFile, writeFile } from "fs";  import { readFile, writeFile } from "fs";
21  import path from "path";  import path from "path";
22  import DiscordClient from "../client/Client";  import DiscordClient from "../client/Client";
23    import MessageEmbed from "../client/MessageEmbed";
24  import Service from "../utils/structures/Service";  import Service from "../utils/structures/Service";
25  import { deleteFile } from "../utils/util";  import { deleteFile, parseEmbedsInString } from "../utils/util";
26    
27  export type Snippet = {  export type Snippet = {
28      name: string;      name: string;
29      content: string;      content: string;
30      files: string[]      files: string[],
31        embeds?: MessageEmbed[]
32  };  };
33    
34  export type SnippetContainer = {  export type SnippetContainer = {
# Line 16  export type SnippetContainer = { Line 37  export type SnippetContainer = {
37    
38  export default class SnippetManager extends Service {  export default class SnippetManager extends Service {
39      snippets: SnippetContainer = {};      snippets: SnippetContainer = {};
40        filePath: string;
41    
42      constructor(client: DiscordClient) {      constructor(client: DiscordClient) {
43          super(client);          super(client);
44            this.filePath = path.resolve(process.env.SUDO_PREFIX ?? path.join(__dirname, '../..'), 'config/snippets.json');
45          this.load();          this.load();
46      }      }
47    
48      load() {      load() {
49          readFile(path.resolve(__dirname, '../..', 'config/snippets.json'), (err, data) => {          readFile(this.filePath, (err, data) => {
50              if (err) {              if (err) {
51                  console.log(err);                                  console.log(err);                
52              }              }
# Line 33  export default class SnippetManager exte Line 56  export default class SnippetManager exte
56      }      }
57    
58      write() {      write() {
59          writeFile(path.resolve(__dirname, '../..', 'config/snippets.json'), JSON.stringify(this.snippets), () => null);          writeFile(this.filePath, JSON.stringify(this.snippets), () => null);
60      }      }
61    
62      set(guildID: string, name: string, content: string, files: string[] = []): void {      set(guildID: string, name: string, content: string, files: string[] = []): void {
# Line 45  export default class SnippetManager exte Line 68  export default class SnippetManager exte
68      }      }
69    
70      get(guildID: string, name: string): Snippet | null {      get(guildID: string, name: string): Snippet | null {
71            if (!this.snippets[guildID]) {
72                return null;
73            }
74            
75          for (const s of this.snippets[guildID]) {          for (const s of this.snippets[guildID]) {
76              if (s.name === name) {              if (s.name === name) {
77                  return s;                  return s;
# Line 53  export default class SnippetManager exte Line 80  export default class SnippetManager exte
80    
81          return null;          return null;
82      }      }
83        
84        getParsed(guildID: string, name: string): Snippet | null {
85            const snippet = this.get(guildID, name);
86    
87            if (!snippet) {
88                return null;
89            }
90    
91            return this.parseEmbeds(snippet) ?? snippet;
92        }
93    
94        parseEmbeds(snippet: Snippet) {        
95            try {
96                const { embeds, content } = parseEmbedsInString(snippet.content);
97    
98                console.log(content);            
99    
100                return <Snippet> {
101                    ...snippet,
102                    content,
103                    embeds,
104                };
105            }
106            catch (e) {
107                console.log(e);
108            }
109        }
110    
111      async delete(guildID: string, name: string): Promise<void> {      async delete(guildID: string, name: string): Promise<void> {
112          for (const i in this.snippets[guildID]) {          for (const i in this.snippets[guildID]) {
113              if (this.snippets[guildID][i].name === name) {              if (this.snippets[guildID][i].name === name) {
114                  for await (const file of this.snippets[guildID][i].files) {                  for await (const file of this.snippets[guildID][i].files) {
115                      try {                      try {
116                          await deleteFile(path.resolve(__dirname, '../../storage', file));                          await deleteFile(path.resolve(process.env.SUDO_PREFIX ?? path.join(__dirname, '../..'), 'storage', file));
117                      }                      }
118                      catch (e) {                      catch (e) {
119                          console.log(e);                                          console.log(e);                
# Line 81  export default class SnippetManager exte Line 135  export default class SnippetManager exte
135              }              }
136          }          }
137      }      }
 }  
138    }

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

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26