/[sudobot]/trunk/src/client/Config.ts
ViewVC logotype

Diff of /trunk/src/client/Config.ts

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

revision 362 by rakin, Mon Jul 29 17:29:47 2024 UTC revision 415 by rakin, Mon Jul 29 17:30:07 2024 UTC
# Line 1  Line 1 
1  import DiscordClient from "./Client";  /**
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 DiscordClient from "./Client";
21  import path from "path";  import path from "path";
22  import fs from "fs";  import fs from "fs";
23    import { z as zod } from 'zod';
24    
25  export type config = {  export type config = {
26      [key: string]: any;      [key: string]: any;
# Line 44  export class Config { Line 63  export class Config {
63      set(key: string, value: any) {      set(key: string, value: any) {
64          this.props[this.client.msg!.guild!.id][key] = value;          this.props[this.client.msg!.guild!.id][key] = value;
65      }      }
66    
67        schema(_config: string | config) {
68            const config = typeof _config === 'string' ? this.props[_config] : _config;
69            const snowflake = zod.string().regex(/\d+/, { message: "The given value is not a Snowflake" });
70    
71            return zod.object({
72                "prefix": zod.string().optional(),
73                "debug": zod.boolean().optional(),
74                "mute_role": snowflake.optional(),
75                "gen_role": snowflake.optional(),
76                "logging_channel": snowflake.optional(),
77                "logging_channel_join_leave": snowflake.optional(),
78                "mod_role": snowflake.optional(),
79                "announcement_channel": snowflake.optional(),
80                "admin": snowflake.optional(),
81                "lockall": zod.array(zod.string()).optional(),
82                "warn_notallowed": zod.boolean().optional(),
83                "role_commands": zod.record(
84                    snowflake,
85                    zod.array(zod.string().min(1))
86                ).optional().default({}),
87                "autoclear": zod.object({
88                    "enabled": zod.boolean().optional(),
89                    "channels": zod.array(snowflake).optional().default(config.autoclear.channels)
90                }).optional(),
91                "verification": zod.object({
92                    "enabled": zod.boolean().optional(),
93                    "role": snowflake.optional()
94                }).optional(),
95                "welcomer": zod.object({
96                    "enabled": zod.boolean().optional(),
97                    "channel": snowflake.optional(),
98                    "message": zod.string().min(1).or(zod.null()).optional(),
99                    "randomize": zod.boolean().optional()
100                }).optional(),
101                "cooldown": zod.object({
102                    "enabled": zod.boolean().optional(),
103                    "global": zod.any().optional(),
104                    "cmds": zod.object({}).optional()
105                }).optional(),
106                "profile_filter": zod.object({
107                    "enabled": zod.boolean().optional(),
108                    "inherit_from_words": zod.boolean().optional(),
109                    "inherit_from_tokens": zod.boolean().optional(),
110                    "inherit_from_regex": zod.boolean().optional(),
111                    "blocked_words": zod.array(zod.string()).optional().default(config.profile_filter.blocked_words),
112                    "blocked_tokens": zod.array(zod.string()).optional().default(config.profile_filter.blocked_tokens),
113                    "blocked_regex_patterns": zod.array(zod.string()).optional().default(config.profile_filter.blocked_regex_patterns),
114                    "components": zod.object({
115                        "tag": zod.boolean().optional(),
116                        "nickname": zod.boolean().optional(),
117                        "about": zod.boolean().optional(),
118                        "status": zod.boolean().optional()
119                    }).optional(),
120                    "actions": zod.object({
121                        "tag": zod.string().optional(),
122                        "nickname": zod.string().optional(),
123                        "about": zod.string().optional(),
124                        "status": zod.string().optional()
125                    }).optional()
126                }).optional(),
127                "starboard": zod.object({
128                    "enabled": zod.boolean().optional(),
129                    "reactions": zod.number().int().optional(),
130                    "channel": snowflake.optional()
131                }).optional(),
132                "autorole": zod.object({
133                    "enabled": zod.boolean().optional(),
134                    "roles": zod.array(snowflake).optional().default(config.autorole.roles)
135                }).optional(),
136                "spam_filter": zod.object({
137                    "enabled": zod.boolean().optional(),
138                    "limit": zod.number().int().optional(),
139                    "time": zod.number().optional(),
140                    "diff": zod.number().optional(),
141                    "exclude": zod.array(snowflake).optional().default(config.spam_filter.exclude),
142                    "samelimit": zod.number().int().optional(),
143                    "unmute_in": zod.number().optional()
144                }).optional(),
145                "raid": zod.object({
146                    "enabled": zod.boolean().optional(),
147                    "max_joins": zod.number().int().optional(),
148                    "time": zod.number().optional(),
149                    "channels": zod.array(snowflake).optional().default(config.raid.channels),
150                    "exclude": zod.boolean().optional()
151                }).optional(),
152                "global_commands": zod.array(zod.string()).optional().default(config.global_commands),
153                "filters": zod.object({
154                    "ignore_staff": zod.boolean().optional(),
155                    "chars_repeated": zod.number().int().optional(),
156                    "words_repeated": zod.number().int().optional(),
157                    "words": zod.array(zod.string()).optional().default(config.filters.words),
158                    "tokens": zod.array(zod.string()).optional().default(config.filters.tokens),
159                    "invite_message": zod.string().optional(),
160                    "words_excluded": zod.array(snowflake).optional().default(config.filters.words_excluded),
161                    "domain_excluded": zod.array(snowflake).optional().default(config.filters.domain_excluded),
162                    "invite_excluded": zod.array(snowflake).optional().default(config.filters.invite_excluded),
163                    "words_enabled": zod.boolean().optional(),
164                    "invite_enabled": zod.boolean().optional(),
165                    "domain_enabled": zod.boolean().optional(),
166                    "regex": zod.boolean().optional(),
167                    "file_mimes_excluded": zod.array(zod.string()).optional().default(config.filters.file_mimes_excluded),
168                    "file_types_excluded": zod.array(zod.string()).optional().default(config.filters.file_types_excluded),
169                    "domains": zod.array(zod.string()).optional().default(config.filters.domains),
170                    "regex_patterns": zod.array(zod.string()).optional().default(config.filters.regex_patterns),
171                    "rickrolls_enabled": zod.boolean().optional(),
172                    "pings": zod.number().int().optional()
173                }).optional()
174            });
175        }
176  }  }

Legend:
Removed from v.362  
changed lines
  Added in v.415

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26