bot passer sous TS

This commit is contained in:
Tutur33
2024-02-25 19:15:42 +01:00
parent d85c18f7ed
commit 1f86194f64
16 changed files with 221 additions and 120 deletions
+21 -33
View File
@@ -1,26 +1,13 @@
const { EmbedBuilder, StringSelectMenuBuilder, ActionRowBuilder } = require("discord.js")
/*
module.exports = {
aliases: ['h', 'aide'],
description: 'Affiche la liste des commandes',
emote: '📚',
utilisation: '[commande]',
async execute(message, args, client) {
console.log("Liste des commandes :");
let commands = [];
for (const command of client.commands.values()) {
const existingCommand = commands.find(cmd => cmd.name === command.name);
if (!existingCommand) {
commands.push(command);
}
}
console.log(commands);
},
};
*/
import { Message, EmbedBuilder } from "discord.js";
interface Command {
name: string;
aliases?: string[];
description: string;
emote?: string;
utilisation?: string;
category?: string;
}
module.exports = {
aliases: ['h', 'aide'],
@@ -28,15 +15,16 @@ module.exports = {
emote: '📚',
utilisation: '[commande]',
async execute(message, args, client) {
const prefix = '+'
async execute(message: Message, args: string[], client: any) {
const prefix = '+';
if (args[0]) {
const command = client.commands.get(args[0]);
if (!command) {
return message.reply(`Je n'ai pas trouvé de commande nommée "${args[0]}".`);
}
const commandPerm = 'None'
const commandPerm = 'None';
const embed_command = new EmbedBuilder()
.setColor('#0099ff')
@@ -45,30 +33,30 @@ module.exports = {
.addFields(
{ name: 'Utilisation', value: `\`${prefix}${command.utilisation ? `${command.utilisation}` : ''}\``, inline: true },
{ name: 'Catégorie', value: command.category || 'Non spécifiée', inline: true },
{ name: 'Alias', value: command.aliases ? command.aliases.map(alias => `\`${alias}\``).join(', ') : 'Aucun', inline: true },
{ name: 'Alias', value: command.aliases ? command.aliases.map((alias: string) => `\`${alias}\``).join(', ') : 'Aucun', inline: true },
{ name: 'Permissions', value: `Perm level: ${commandPerm}` || 'Indéfini', inline: true },
)
.setTimestamp()
.setFooter({text: `${client.user.tag} © 2024`, iconURL: client.user.displayAvatarURL({dynamic: true})})
.setFooter({ text: `${client.user?.tag} © 2024`, iconURL: client.user?.displayAvatarURL({ dynamic: true })});
return message.reply({ embeds: [embed_command] });
} else {
let commands = [];
for (const command of client.commands.values()) {
let commands: Command[] = [];
for (const command of client.commands?.values() || []) {
const existingCommand = commands.find(cmd => cmd.name === command.name);
if (!existingCommand) {
commands.push(command);
}
}
let categories = {};
commands.forEach((command) => {
let categories: { [key: string]: Command[] } = {};
commands.forEach((command: any) => {
if (!categories[command.category]) {
categories[command.category] = [];
}
categories[command.category].push(command);
categories[command.category]?.push(command);
});
const embed = new EmbedBuilder()
@@ -79,7 +67,7 @@ module.exports = {
for (const [category, commands] of Object.entries(categories)) {
embed.addFields({
name: `Catégorie ${category}`,
value: commands.map(command => `\`${command.name}\` - ${command.description}`).join('\n')
value: commands.map((command: Command) => `\`${command.name}\` - ${command.description}`).join('\n')
});
}
+1 -3
View File
@@ -1,5 +1,3 @@
const { ButtonStyle, ButtonBuilder, ActionRowBuilder } = require('discord.js');
module.exports = {
aliases: ['latence'],
description: 'Avoir la latence du bot.',
@@ -7,7 +5,7 @@ module.exports = {
utilisation: '',
permission: 0,
async execute(message, args, client) {
async execute(message: any, args: any, client: any) {
message.reply('Pong !');
},
};
@@ -1,6 +1,5 @@
const { ButtonStyle, ButtonBuilder, ActionRowBuilder } = require('discord.js');
const sqlite3 = require('sqlite3').verbose();
require('dotenv').config();
import sqlite3 from 'sqlite3';
import { Message } from 'discord.js';
module.exports = {
aliases: ['prefixset'],
@@ -9,16 +8,16 @@ module.exports = {
utilisation: '',
permission: 10,
async execute(message, args, client) {
async execute(message: Message, args: string[]) {
if (args.length < 1) return message.reply('Veuillez entrer un préfixe.');
let db = new sqlite3.Database('db.db', sqlite3.OPEN_READWRITE, (err) => {
let db = new sqlite3.Database('db.db', sqlite3.OPEN_READWRITE, (err: Error | null) => {
if (err) {
console.error(err.message);
}
});
db.run('INSERT OR REPLACE INTO prefix (serverID, prefix) VALUES (?, ?)', [message.guild.id, args[0]], (err) => {
db.run('INSERT OR REPLACE INTO prefix (serverID, prefix) VALUES (?, ?)', [message.guild?.id, args[0]], (err: Error | null) => {
if (err) {
console.error(err.message);
message.reply('Erreur lors de la modification du préfixe.');
@@ -27,7 +26,7 @@ module.exports = {
}
});
db.close((err) => {
db.close((err: Error | null) => {
if (err) {
console.error(err.message);
}
@@ -1,16 +1,16 @@
const { Events } = require("discord.js");
import { Message, Events } from "discord.js";
const getServerPrefix = require("../fonctions/getServerPrefix");
const getPermissionLevel = require("../fonctions/getPermissionLevel");
module.exports = {
name: Events.MessageCreate,
async execute(message, client) {
async execute(message: Message, client: any) {
if (message.author.bot) return;
const prefix = await getServerPrefix(message.guild.id);
const prefix = await getServerPrefix(message.guild?.id);
if (message.content.startsWith(prefix)) {
const args = message.content.slice(prefix.length).trim().split(/ +/);
const commandName = args.shift().toLowerCase();
const commandName = args.shift()?.toLowerCase();
const command = client.commands.get(commandName);
if (!command) return;
+1 -1
View File
@@ -3,7 +3,7 @@ const addBaseInDB = require("../fonctions/addBaseInDB");
module.exports = {
name: Events.ClientReady,
async execute(client) {
async execute(client: any) {
addBaseInDB(client);
console.log(`le bot ${client.user.tag} est en ligne`)
}
@@ -1,7 +1,7 @@
const sqlite3 = require('sqlite3').verbose();
let buyer = 0;
import sqlite3 from 'sqlite3';
let buyer: boolean = false;
module.exports = function addBaseInDB(client) {
module.exports = function addBaseInDB(client: any) {
let db = new sqlite3.Database('db.db', sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (err) => {
if (err) {
console.error(err.message);
@@ -9,7 +9,7 @@ module.exports = function addBaseInDB(client) {
});
client.guilds.cache.forEach(guild => {
client.guilds.cache.forEach((guild: any) => {
db.run('INSERT OR IGNORE INTO prefix (serverID) VALUES (?)', [guild.id], (err) => {
if (err) {
console.error(err.message);
@@ -18,13 +18,13 @@ module.exports = function addBaseInDB(client) {
});
client.guilds.cache.forEach(guild => {
guild.members.cache.forEach(member => {
client.guilds.cache.forEach((guild: any) => {
guild.members.cache.forEach((member: any) => {
if (member.user.bot) return;
if (member.id === '671763971803447298') {
buyer = 1;
buyer = true;
} else {
buyer = 0;
buyer = false;
};
db.run('INSERT OR IGNORE INTO users (serverID, userID, buyer) SELECT ?, ?, ? WHERE NOT EXISTS (SELECT 1 FROM users WHERE serverID = ? AND userID = ?)', [guild.id, member.id, buyer, guild.id, member.id], (err) => {
if (err) {
@@ -35,8 +35,8 @@ module.exports = function addBaseInDB(client) {
});
client.commands.forEach(command => {
client.guilds.cache.forEach(guild => {
client.commands.forEach((command: any) => {
client.guilds.cache.forEach((guild: any) => {
db.run('INSERT OR IGNORE INTO commands (command, permission, serverID) SELECT ?, ?, ? WHERE NOT EXISTS (SELECT 1 FROM commands WHERE command = ? AND serverID = ?)', [command.name, command.permission, guild.id, command.name, guild.id], (err) => {
if (err) {
console.error(err.message);
@@ -1,6 +1,6 @@
const sqlite3 = require('sqlite3').verbose();
import sqlite3 from 'sqlite3';
module.exports = async function getPermissionLevel(member, guild) {
module.exports = async function getPermissionLevel(member: any, guild: any) {
return new Promise((resolve, reject) => {
let db = new sqlite3.Database('db.db', sqlite3.OPEN_READWRITE, (err) => {
if (err) {
@@ -9,12 +9,12 @@ module.exports = async function getPermissionLevel(member, guild) {
}
});
let buyerId = [];
let ownerId = [];
let buyerId: string[] = [];
let ownerId: string[] = [];
let highestPermission = 0;
db.each('SELECT userID FROM users WHERE serverID = ? AND buyer = 1', [guild.id],
(err, row) => {
(err, row: any) => {
if (err) {
console.error(err.message);
reject(err);
@@ -23,7 +23,7 @@ module.exports = async function getPermissionLevel(member, guild) {
});
db.each('SELECT userID FROM users WHERE serverID = ? AND owner = 1', [guild.id],
(err, row) => {
(err, row: any) => {
if (err) {
console.error(err.message);
reject(err);
@@ -33,7 +33,7 @@ module.exports = async function getPermissionLevel(member, guild) {
for (let i = 1; i <= 9; i++) {
db.each('SELECT roleID FROM permissions WHERE serverID = ? AND permission = ?', [guild.id, i],
(err, row) => {
(err, row: any) => {
if (err) {
console.error(err.message);
reject(err);
@@ -1,7 +1,7 @@
const sqlite3 = require('sqlite3').verbose();
import sqlite3 from 'sqlite3';
require('dotenv').config();
function getServerPrefix(serverID) {
function getServerPrefix(serverID: string) {
return new Promise((resolve, reject) => {
let db = new sqlite3.Database('db.db', sqlite3.OPEN_READWRITE, (err) => {
if (err) {
@@ -10,7 +10,7 @@ function getServerPrefix(serverID) {
}
});
db.get('SELECT prefix FROM prefix WHERE serverID = ?', [serverID], (err, row) => {
db.get('SELECT prefix FROM prefix WHERE serverID = ?', [serverID], (err, row: any) => {
if (err) {
console.error(err.message);
reject(err);
+6 -6
View File
@@ -2,7 +2,7 @@ const sqlite3 = require('sqlite3').verbose();
require('dotenv').config();
module.exports = function initDB() {
let db = new sqlite3.Database('db.db', sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (err) => {
let db = new sqlite3.Database('db.db', sqlite3.OPEN_READWRITE | sqlite3.OPEN_CREATE, (err: Error) => {
if (err) {
console.error(err.message);
}
@@ -12,7 +12,7 @@ module.exports = function initDB() {
db.run(`CREATE TABLE IF NOT EXISTS prefix(
prefix TEXT NOT NULL DEFAULT '${process.env.DEFAULT_PREFIX}',
serverID TEXT NOT NULL UNIQUE
)`, (err) => {
)`, (err: Error) => {
if (err) {
console.error(err.message);
}
@@ -31,7 +31,7 @@ module.exports = function initDB() {
owner BOOLEAN NOT NULL DEFAULT 0,
whitelist BOOLEAN NOT NULL DEFAULT 0,
blacklist BOOLEAN NOT NULL DEFAULT 0
)`, (err) => {
)`, (err: Error) => {
if (err) {
console.error(err.message);
}
@@ -42,7 +42,7 @@ module.exports = function initDB() {
command TEXT NOT NULL,
permission INTEGER NOT NULL DEFAULT 11,
serverID TEXT NOT NULL
)`, (err) => {
)`, (err: Error) => {
if (err) {
console.error(err.message);
}
@@ -53,14 +53,14 @@ module.exports = function initDB() {
permission INTEGER NOT NULL UNIQUE,
roleID TEXT NOT NULL,
serverID TEXT NOT NULL
)`, (err) => {
)`, (err: Error) => {
if (err) {
console.error(err.message);
}
});
db.close((err) => {
db.close((err: Error) => {
if (err) {
console.error(err.message);
}
@@ -1,24 +1,24 @@
const fs = require('fs');
const path = require('path');
import fs from 'fs';
import path from 'path';
module.exports = function loadEvents(client, dir) {
module.exports = function loadEvents(client: any, dir: string) {
let count = 0;
dir = `../${dir}`
fs.readdirSync(path.join(__dirname, dir)).forEach(file => {
fs.readdirSync(path.join(__dirname, dir)).forEach((file: string) => {
const filePath = path.join(__dirname, dir, file);
if (fs.statSync(filePath).isDirectory()) {
count += loadCommands(path.join(dir, file));
} else if (file.endsWith('.js')) {
} else if (file.endsWith('.js') || file.endsWith('.ts')) {
try {
delete require.cache[require.resolve(filePath)];
const command = require(filePath);
const fileName = file.replace('.js', '');
const fileName = file.replace(/\.js|\.ts/g, '');
command.name = fileName;
const parentDir = path.basename(path.dirname(filePath));
command.category = parentDir === 'commands' ? 'other' : parentDir;
client.commands.set(fileName, command);
if (command.aliases) {
command.aliases.forEach(alias => {
command.aliases.forEach((alias: string) => {
client.commands.set(alias, command);
});
}
-23
View File
@@ -1,23 +0,0 @@
const fs = require('fs');
const path = require('path');
module.exports = function loadEvents(client, dir) {
let count = 0;
dir = `../${dir}`
fs.readdirSync(path.join(__dirname, dir)).forEach(file => {
const filePath = path.join(__dirname, dir, file);
if (fs.statSync(filePath).isDirectory()) {
loadEvents(path.join(dir, file));
} else if (file.endsWith('.js')) {
delete require.cache[require.resolve(filePath)];
const event = require(filePath);
if (typeof event.execute === 'function') {
client.on(event.name, (...args) => event.execute(...args, client));
count++;
} else {
console.error(`Event ${event.name} does not have an execute method.`);
}
}
});
return count;
}
+24
View File
@@ -0,0 +1,24 @@
import { Client } from 'discord.js';
import fs from 'fs';
import path from 'path';
module.exports = function loadEvents(client: Client, dir: string): number {
let count = 0;
dir = `../${dir}`
fs.readdirSync(path.join(__dirname, dir)).forEach((file: string) => {
const filePath = path.join(__dirname, dir, file);
if (fs.statSync(filePath).isDirectory()) {
loadEvents(client, path.join(dir, file));
} else if (file.endsWith('.js') || file.endsWith('.ts')) {
delete require.cache[require.resolve(filePath)];
const event = require(filePath);
if (typeof event.execute === 'function') {
client.on(event.name, (...args: any[]) => event.execute(...args, client)); // Specify the type of 'args' as an array of any type
count++;
} else {
console.error(`Event ${event.name} does not have an execute method.`);
}
}
});
return count;
}
+1 -1
View File
@@ -2,7 +2,7 @@ const { Client, IntentsBitField, Collection } = require('discord.js')
const loadEvents = require("./loadEvents");
const loadCommands = require("./loadCommands");
module.exports = function run(token) {
module.exports = function run(token: string) {
const client = new Client({intents: new IntentsBitField(3276799)});
client.events = new Collection();
-12
View File
@@ -1,12 +0,0 @@
require('dotenv').config()
const run = require("./fonctions/run");
const initDB = require("./fonctions/initDB");
tokens = process.env.TOKENS.split(',')
initDB();
const runAsync = async () => {
Promise.all(tokens.map(token => run(token)));
};
runAsync();
+16
View File
@@ -0,0 +1,16 @@
require('dotenv').config()
const run = require("./fonctions/run");
const initDB = require("./fonctions/initDB");
initDB();
const runAsync = async () => {
if (process.env.TOKENS) {
const tokens = process.env.TOKENS.split(',');
Promise.all(tokens.map(token => run(token)));
} else {
console.error("Environment variable 'TOKENS' is not defined.");
}
};
runAsync();
+111
View File
@@ -0,0 +1,111 @@
{
"compilerOptions": {
/* Visit https://aka.ms/tsconfig to read more about this file */
/* Projects */
// "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */
// "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */
// "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */
// "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */
// "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */
// "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */
/* Language and Environment */
"target": "es2016", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */
// "jsx": "preserve", /* Specify what JSX code is generated. */
// "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */
// "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */
// "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */
// "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */
// "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */
// "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */
// "noLib": true, /* Disable including any library files, including the default lib.d.ts. */
// "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */
// "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */
/* Modules */
"module": "commonjs", /* Specify what module code is generated. */
// "rootDir": "./", /* Specify the root folder within your source files. */
// "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */
// "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */
// "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */
// "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */
// "types": [], /* Specify type package names to be included without being referenced in a source file. */
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
// "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */
// "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */
// "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */
// "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */
// "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */
// "resolveJsonModule": true, /* Enable importing .json files. */
// "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */
// "noResolve": true, /* Disallow 'import's, 'require's or '<reference>'s from expanding the number of files TypeScript should add to a project. */
/* JavaScript Support */
// "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */
// "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */
// "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */
/* Emit */
// "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */
// "declarationMap": true, /* Create sourcemaps for d.ts files. */
// "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */
// "sourceMap": true, /* Create source map files for emitted JavaScript files. */
// "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */
// "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */
// "outDir": "./", /* Specify an output folder for all emitted files. */
// "removeComments": true, /* Disable emitting comments. */
// "noEmit": true, /* Disable emitting files from a compilation. */
// "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */
// "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */
// "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */
// "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
// "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */
// "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */
// "newLine": "crlf", /* Set the newline character for emitting files. */
// "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */
// "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */
// "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */
// "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */
// "declarationDir": "./", /* Specify the output directory for generated declaration files. */
// "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */
/* Interop Constraints */
// "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */
// "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */
// "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */
"esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */
// "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */
"forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */
/* Type Checking */
"strict": true, /* Enable all strict type-checking options. */
// "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */
// "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
// "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */
// "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */
// "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */
// "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */
// "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */
// "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */
// "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */
// "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */
// "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */
// "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */
// "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */
// "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */
// "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */
// "allowUnusedLabels": true, /* Disable error reporting for unused labels. */
// "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */
/* Completeness */
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
"skipLibCheck": true /* Skip type checking all .d.ts files. */
},
"include": ["**/*"],
"exclude": ["node_modules"]
}