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

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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 393 - (hide annotations)
Mon Jul 29 17:29:59 2024 UTC (8 months, 1 week ago) by rakin
File MIME type: application/typescript
File size: 3953 byte(s)
style: add license comments (#77)

* style: add license commits

* fix: shebang errors
1 rakin 393 /**
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 rakin 51 import { readFile, writeFile } from "fs";
21     import path from "path";
22     import DiscordClient from "../client/Client";
23 rakin 255 import MessageEmbed from "../client/MessageEmbed";
24 rakin 226 import Service from "../utils/structures/Service";
25 rakin 256 import { deleteFile, parseEmbedsInString } from "../utils/util";
26 rakin 51
27     export type Snippet = {
28     name: string;
29     content: string;
30 rakin 255 files: string[],
31     embeds?: MessageEmbed[]
32 rakin 51 };
33    
34     export type SnippetContainer = {
35     [guildID: string]: Snippet[];
36     };
37    
38 rakin 226 export default class SnippetManager extends Service {
39 rakin 51 snippets: SnippetContainer = {};
40 rakin 360 filePath: string;
41 rakin 51
42     constructor(client: DiscordClient) {
43 rakin 226 super(client);
44 rakin 360 this.filePath = path.resolve(process.env.SUDO_PREFIX ?? path.join(__dirname, '../..'), 'config/snippets.json');
45 rakin 51 this.load();
46     }
47    
48     load() {
49 rakin 360 readFile(this.filePath, (err, data) => {
50 rakin 51 if (err) {
51     console.log(err);
52     }
53    
54     this.snippets = JSON.parse(data.toString());
55     });
56     }
57    
58     write() {
59 rakin 360 writeFile(this.filePath, JSON.stringify(this.snippets), () => null);
60 rakin 51 }
61    
62     set(guildID: string, name: string, content: string, files: string[] = []): void {
63     this.snippets[guildID].push({
64     name,
65     content,
66     files
67     });
68     }
69    
70     get(guildID: string, name: string): Snippet | null {
71 rakin 244 if (!this.snippets[guildID]) {
72     return null;
73     }
74    
75 rakin 51 for (const s of this.snippets[guildID]) {
76     if (s.name === name) {
77     return s;
78     }
79     }
80    
81     return null;
82     }
83 rakin 255
84     getParsed(guildID: string, name: string): Snippet | null {
85     const snippet = this.get(guildID, name);
86 rakin 51
87 rakin 255 if (!snippet) {
88     return null;
89     }
90    
91 rakin 256 return this.parseEmbeds(snippet) ?? snippet;
92 rakin 255 }
93    
94 rakin 256 parseEmbeds(snippet: Snippet) {
95     try {
96     const { embeds, content } = parseEmbedsInString(snippet.content);
97 rakin 255
98 rakin 256 console.log(content);
99 rakin 255
100 rakin 256 return <Snippet> {
101     ...snippet,
102     content,
103     embeds,
104     };
105 rakin 255 }
106 rakin 256 catch (e) {
107     console.log(e);
108     }
109 rakin 255 }
110    
111 rakin 51 async delete(guildID: string, name: string): Promise<void> {
112     for (const i in this.snippets[guildID]) {
113     if (this.snippets[guildID][i].name === name) {
114     for await (const file of this.snippets[guildID][i].files) {
115     try {
116 rakin 360 await deleteFile(path.resolve(process.env.SUDO_PREFIX ?? path.join(__dirname, '../..'), 'storage', file));
117 rakin 51 }
118     catch (e) {
119     console.log(e);
120     }
121     }
122    
123     await this.snippets[guildID].splice(parseInt(i), 1);
124    
125     return;
126     }
127     }
128     }
129    
130     async deleteData(guildID: string, name: string): Promise<void> {
131     for (const i in this.snippets[guildID]) {
132     if (this.snippets[guildID][i].name === name) {
133     await this.snippets[guildID].splice(parseInt(i), 1);
134     return;
135     }
136     }
137     }
138 rakin 283 }

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26