/[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 255 by rakin, Mon Jul 29 17:29:14 2024 UTC revision 360 by rakin, Mon Jul 29 17:29:46 2024 UTC
# Line 1  Line 1 
 import { APIEmbed } from "discord-api-types/v9";  
 import { MessageEmbedOptions } from "discord.js";  
1  import { readFile, writeFile } from "fs";  import { readFile, writeFile } from "fs";
2  import path from "path";  import path from "path";
3  import DiscordClient from "../client/Client";  import DiscordClient from "../client/Client";
4  import MessageEmbed from "../client/MessageEmbed";  import MessageEmbed from "../client/MessageEmbed";
5  import Service from "../utils/structures/Service";  import Service from "../utils/structures/Service";
6  import { deleteFile } from "../utils/util";  import { deleteFile, parseEmbedsInString } from "../utils/util";
7    
8  export type Snippet = {  export type Snippet = {
9      name: string;      name: string;
# Line 20  export type SnippetContainer = { Line 18  export type SnippetContainer = {
18    
19  export default class SnippetManager extends Service {  export default class SnippetManager extends Service {
20      snippets: SnippetContainer = {};      snippets: SnippetContainer = {};
21        filePath: string;
22    
23      constructor(client: DiscordClient) {      constructor(client: DiscordClient) {
24          super(client);          super(client);
25            this.filePath = path.resolve(process.env.SUDO_PREFIX ?? path.join(__dirname, '../..'), 'config/snippets.json');
26          this.load();          this.load();
27      }      }
28    
29      load() {      load() {
30          readFile(path.resolve(__dirname, '../..', 'config/snippets.json'), (err, data) => {          readFile(this.filePath, (err, data) => {
31              if (err) {              if (err) {
32                  console.log(err);                                  console.log(err);                
33              }              }
# Line 37  export default class SnippetManager exte Line 37  export default class SnippetManager exte
37      }      }
38    
39      write() {      write() {
40          writeFile(path.resolve(__dirname, '../..', 'config/snippets.json'), JSON.stringify(this.snippets), () => null);          writeFile(this.filePath, JSON.stringify(this.snippets), () => null);
41      }      }
42    
43      set(guildID: string, name: string, content: string, files: string[] = []): void {      set(guildID: string, name: string, content: string, files: string[] = []): void {
# Line 69  export default class SnippetManager exte Line 69  export default class SnippetManager exte
69              return null;              return null;
70          }          }
71    
72          snippet.embeds = this.parseEmbeds(snippet).embeds;          return this.parseEmbeds(snippet) ?? snippet;
   
         return snippet;  
73      }      }
74    
75      parseEmbeds(snippet: Snippet) {;      parseEmbeds(snippet: Snippet) {        
76          const embedExpressions = snippet.content.matchAll(/embed\:(\{[^\n]+\})/g);          try {
77          snippet.content = snippet.content.replace(/embed\:(\{[^\n]+\})/g, '');              const { embeds, content } = parseEmbedsInString(snippet.content);
         let embeds: typeof snippet.embeds = [];  
78    
79          for (const expr of [...embedExpressions]) {              console.log(content);            
             const parsed = JSON.parse(expr[1]);  
80    
81              try {              return <Snippet> {
82                  embeds.push(new MessageEmbed(parsed).setColor(parsed.color));                  ...snippet,
83              }                  content,
84              catch (e) {                  embeds,
85                  console.log(e);              };
86              }          }
87            catch (e) {
88                console.log(e);
89          }          }
   
         snippet.embeds = embeds;  
   
         return snippet;  
90      }      }
91    
92      async delete(guildID: string, name: string): Promise<void> {      async delete(guildID: string, name: string): Promise<void> {
# Line 100  export default class SnippetManager exte Line 94  export default class SnippetManager exte
94              if (this.snippets[guildID][i].name === name) {              if (this.snippets[guildID][i].name === name) {
95                  for await (const file of this.snippets[guildID][i].files) {                  for await (const file of this.snippets[guildID][i].files) {
96                      try {                      try {
97                          await deleteFile(path.resolve(__dirname, '../../storage', file));                          await deleteFile(path.resolve(process.env.SUDO_PREFIX ?? path.join(__dirname, '../..'), 'storage', file));
98                      }                      }
99                      catch (e) {                      catch (e) {
100                          console.log(e);                                          console.log(e);                
# Line 122  export default class SnippetManager exte Line 116  export default class SnippetManager exte
116              }              }
117          }          }
118      }      }
 }  
119    }

Legend:
Removed from v.255  
changed lines
  Added in v.360

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26