├── canvasv12level
├── baslat.bat
├── img
│ └── wallpaper.png
├── config.json
├── package.json
├── commands
│ ├── yardım.js
│ ├── level-ekle.js
│ ├── level-ayarla.js
│ ├── level-kaldır.js
│ ├── top.js
│ ├── rank.js
│ └── levelrolü-ayarla.js
└── index.js
└── README.md
/canvasv12level/baslat.bat:
--------------------------------------------------------------------------------
1 | echo off
2 | cls
3 | :a
4 | title ( Catcher) Catcher v12 (New)
5 | node index.js
6 | goto a
7 |
--------------------------------------------------------------------------------
/canvasv12level/img/wallpaper.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/catcherdevv/canvasv12-level/HEAD/canvasv12level/img/wallpaper.png
--------------------------------------------------------------------------------
/canvasv12level/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "token": "BOTTOKENİNİZ",
3 | "ownerID": "KENDİİDNİZ",
4 | "prefix": "PREFİXİNİZ"
5 | }
--------------------------------------------------------------------------------
/canvasv12level/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "canvasv12level",
3 | "version": "0.0.1",
4 | "description": "Canvaslı hoş level sistemi.",
5 | "main": "index.js",
6 | "dependencies": {
7 | "canvas": "^2.7.0",
8 | "discord-logs": "^1.9.0"
9 | },
10 | "devDependencies": {},
11 | "scripts": {
12 | "test": "node index.js"
13 | },
14 | "author": "Catcher",
15 | "license": "ISC"
16 | }
17 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # canvasv12-level
2 | Discord v12 Canvaslı Level Sistemi;
3 |
4 | - Öncelikle config.json'daki gerekli alanları dolduruyoruz.
5 | - İndex.js'deki kanal id'lerini giriyoruz.
6 | - Npm install yazarak gerekli modülleri kuruyoruz.
7 | - Kaç mesajda kaç xp vereceğini kendinize göre ayarlayabilirsiniz.
8 | - Parayla başkalarına yapmaya, satmaya veya kendi yapınızmış gibi davranış sergilemezsiniz diye umuyorum.
9 |
10 |
11 |
--------------------------------------------------------------------------------
/canvasv12level/commands/yardım.js:
--------------------------------------------------------------------------------
1 | const { MessageEmbed } = require("discord.js");
2 | const config = require("../config.json");
3 | const client = require("discord.js");
4 | const Discord = require("discord.js");
5 |
6 | module.exports = {
7 | name: "yardım",
8 | aliases: ["h"],
9 | category: "Utility",
10 | cooldown: 3,
11 | description: "Yardım Komutlarını Görüntüle",
12 | async execute(message, args) {
13 | const prefix = config.prefix
14 | if (!message.guild.me.hasPermission("EMBED_LINKS")) return message.channel.send(`yetersiz yetki: EMBED_LINKS`)
15 |
16 | const { commands } = message.client;
17 |
18 | if (!args.length) {
19 |
20 | let help = new MessageEmbed()
21 | .setColor("RANDOM")
22 | .setAuthor(`${message.guild.name} yardım Menu`)
23 | .addFields({ name: `Level komutları`, value: `\`${prefix}rank\`, \`${prefix}top\`, \`${prefix}rlevel\`, \`${prefix}rlevel-add\`` }, )
24 | .setTimestamp()
25 | .setFooter('<> zorunludur, [] isteğe bağlıdır');
26 |
27 | return message.channel.send(help);
28 |
29 | }
30 |
31 | const name = args[0].toLowerCase();
32 | const command = commands.get(name) || commands.find(c => c.aliases && c.aliases.includes(name))
33 |
34 | if (!command) {
35 | return message.reply('bu\'s geçerli bir komut değil!');
36 | }
37 |
38 | let embed = new Discord.MessageEmbed()
39 | embed.setTitle(command.name.slice(0, 1) + command.name.slice(1));
40 | embed.setColor("RANDOM");
41 | embed.setFooter('<> zorunludur, [] isteğe bağlıdır');
42 | embed.setDescription([
43 | `**Command Name**: ${command.name}`,
44 | `**Description**: ${command.description ? command.description : "None"}`,
45 | `**Category**: ${command.category ? command.category : "General" || "Misc"}`,
46 | `**Aliases**: ${command.aliases ? command.aliases.join(", ") : "None"}`,
47 | `**Cooldown**: ${command.cooldown ? command.cooldown : "None"}`
48 | ].join("\n"));
49 |
50 |
51 | message.channel.send(embed);
52 | }
53 | };
54 |
--------------------------------------------------------------------------------
/canvasv12level/commands/level-ekle.js:
--------------------------------------------------------------------------------
1 | const Discord = require("discord.js");
2 | const SQlite = require("better-sqlite3");
3 | const sql = new SQlite('./mainDB.sqlite');
4 | const client = new Discord.Client();
5 |
6 | module.exports = {
7 | name: 'rlevel-add',
8 | aliases: ['rlevel-add'],
9 | category: "Leveling",
10 | description: "Belirtilen kullanıcıya seviye verin veya ekleyin",
11 | cooldown: 3,
12 | async execute(message, args) {
13 | let userArray = message.content.split(" ");
14 | let userArgs = userArray.slice(1);
15 | let user = message.mentions.members.first() || message.guild.members.cache.get(userArgs[0]) || message.guild.members.cache.find(x => x.user.username.toLowerCase() === userArgs.slice(0).join(" ") || x.user.username === userArgs[0])
16 |
17 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.reply(`You do not have permission to use this command!`);
18 |
19 | const levelArgs = parseInt(args[1])
20 |
21 | client.getScore = sql.prepare("SELECT * FROM levels WHERE user = ? AND guild = ?");
22 | client.setScore = sql.prepare("INSERT OR REPLACE INTO levels (id, user, guild, xp, level, totalXP) VALUES (@id, @user, @guild, @xp, @level, @totalXP);");
23 | if (!user) {
24 | return message.reply(`Lütfen bir kullanıcıdan bahsedin!`)
25 | } else {
26 | if (isNaN(levelArgs) || levelArgs < 1) {
27 | return message.reply(`Lütfen geçerli bir numara girin!`)
28 | } else {
29 | let score = client.getScore.get(user.id, message.guild.id);
30 | if (!score) {
31 | score = {
32 | id: `${message.guild.id}-${user.id}`,
33 | user: user.id,
34 | guild: message.guild.id,
35 | xp: 0,
36 | level: 0,
37 | totalXP: 0
38 | }
39 | }
40 | score.level += levelArgs
41 | const newTotalXP = levelArgs - 1
42 | let embed = new Discord.MessageEmbed()
43 | .setTitle(`başarılı!`)
44 | .setDescription(`Başarıyla Eklendi ${levelArgs} seviye ${user.toString()}!`)
45 | .setColor("RANDOM");
46 | score.totalXP += newTotalXP * 2 * 250 + 250
47 | client.setScore.run(score)
48 | return message.channel.send(embed)
49 | }
50 | }
51 | }
52 | }
--------------------------------------------------------------------------------
/canvasv12level/commands/level-ayarla.js:
--------------------------------------------------------------------------------
1 | const Discord = require("discord.js");
2 | const SQlite = require("better-sqlite3");
3 | const sql = new SQlite('./mainDB.sqlite');
4 | const client = new Discord.Client();
5 |
6 | module.exports = {
7 | name: 'level-ayarla',
8 | aliases: ['levelayarla'],
9 | category: "Leveling",
10 | description: "Kullanıcı Seviyesini ve XP'yi ayarlayın",
11 | cooldown: 3,
12 | async execute(message, args) {
13 | let userArray = message.content.split(" ");
14 | let userArgs = userArray.slice(1);
15 | let user = message.mentions.members.first() || message.guild.members.cache.get(userArgs[0]) || message.guild.members.cache.find(x => x.user.username.toLowerCase() === userArgs.slice(0).join(" ") || x.user.username === userArgs[0])
16 |
17 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.reply(`Bu komutu kullanma izniniz yok!`);
18 |
19 | const levelArgs = parseInt(args[1])
20 |
21 | client.getScore = sql.prepare("SELECT * FROM levels WHERE user = ? AND guild = ?");
22 | client.setScore = sql.prepare("INSERT OR REPLACE INTO levels (id, user, guild, xp, level, totalXP) VALUES (@id, @user, @guild, @xp, @level, @totalXP);");
23 | if (!user) {
24 | return message.reply(`Lütfen bir kullanıcıdan bahsedin!`)
25 | } else {
26 | if (isNaN(levelArgs) || levelArgs < 1) {
27 | return message.reply(`Lütfen geçerli bir numara girin!`)
28 | } else {
29 | let score = client.getScore.get(user.id, message.guild.id);
30 | if (!score) {
31 | score = {
32 | id: `${message.guild.id}-${user.id}`,
33 | user: user.id,
34 | guild: message.guild.id,
35 | xp: 0,
36 | level: 0,
37 | totalXP: 0
38 | }
39 | }
40 | score.level = levelArgs
41 | const newTotalXP = levelArgs - 1
42 | let embed = new Discord.MessageEmbed()
43 | .setTitle(`Başarılı!`)
44 | .setDescription(`Başarıyla ayarlandı ${levelArgs} seviyesi ${user.toString()}!`)
45 | .setColor("RANDOM");
46 | score.totalXP = newTotalXP * 2 * 250 + 250
47 | score.xp = 0
48 | client.setScore.run(score)
49 | return message.channel.send(embed)
50 | }
51 | }
52 | }
53 | }
--------------------------------------------------------------------------------
/canvasv12level/commands/level-kaldır.js:
--------------------------------------------------------------------------------
1 | const Discord = require("discord.js");
2 | const SQlite = require("better-sqlite3");
3 | const sql = new SQlite('./mainDB.sqlite');
4 | const client = new Discord.Client();
5 |
6 | module.exports = {
7 | name: 'rlevel-remove',
8 | aliases: ['rlevel-remove'],
9 | category: "Leveling",
10 | description: "Seviyeyi belirtilen kullanıcıya göre kaldırın veya azaltın",
11 | cooldown: 3,
12 | async execute(message, args) {
13 | let userArray = message.content.split(" ");
14 | let userArgs = userArray.slice(1);
15 | let user = message.mentions.members.first() || message.guild.members.cache.get(userArgs[0]) || message.guild.members.cache.find(x => x.user.username.toLowerCase() === userArgs.slice(0).join(" ") || x.user.username === userArgs[0])
16 |
17 | if (!message.member.hasPermission("MANAGE_GUILD")) return message.reply(`Bu komutu kullanmak için yetkiniz yok!`);
18 |
19 | const levelArgs = parseInt(args[1])
20 |
21 | client.getScore = sql.prepare("SELECT * FROM levels WHERE user = ? AND guild = ?");
22 | client.setScore = sql.prepare("INSERT OR REPLACE INTO levels (id, user, guild, xp, level, totalXP) VALUES (@id, @user, @guild, @xp, @level, @totalXP);");
23 | if (!user) {
24 | return message.reply(`Lütfen bir kullanıcıdan bahsedin!`)
25 | } else {
26 | if (isNaN(levelArgs) || levelArgs < 1) {
27 | return message.reply(`Lütfen geçerli bir sayı girin!`)
28 | } else {
29 | let score = client.getScore.get(user.id, message.guild.id);
30 | if (!score) {
31 | score = {
32 | id: `${message.guild.id}-${user.id}`,
33 | user: user.id,
34 | guild: message.guild.id,
35 | xp: 0,
36 | level: 0,
37 | totalXP: 0
38 | }
39 | }
40 | if (score.level - levelArgs < 1) {
41 | return message.reply(`Bu kullanıcıdan seviyeleri kaldıramazsınız!`)
42 | }
43 | score.level -= levelArgs
44 | const newTotalXP = levelArgs - 1
45 | let embed = new Discord.MessageEmbed()
46 | .setTitle(`başarılı !`)
47 | .setDescription(`Başarıyla kaldırıldı ${levelArgs} level from ${user.toString()}!`)
48 | .setColor("RANDOM");
49 | score.totalXP -= newTotalXP * 2 * 250 + 250
50 | client.setScore.run(score)
51 | return message.channel.send(embed)
52 | }
53 | }
54 | }
55 | }
--------------------------------------------------------------------------------
/canvasv12level/commands/top.js:
--------------------------------------------------------------------------------
1 | const Discord = require("discord.js");
2 | const SQLite = require("better-sqlite3");
3 | const sql = new SQLite('./mainDB.sqlite')
4 | const client = new Discord.Client();
5 |
6 | module.exports = {
7 | name: 'top',
8 | aliases: ['t'],
9 | description: "En çok xp ve en yüksek seviyeye sahip ilk 10 kullanıcıyı kontrol eder",
10 | cooldown: 3,
11 | category: "Leveling",
12 | execute(message, args) {
13 |
14 | const currentPage = parseInt(args[0]) || 1;
15 | const top10 = sql.prepare("SELECT * FROM levels WHERE guild = ? ORDER BY totalXP DESC;").all(message.guild.id);
16 | if (parseFloat(args[0]) > Math.ceil(top10.length / 10)) {
17 | return message.reply(`geçersiz sayfa numarası! Sadece var ${Math.ceil(top10.length / 10)} pages`)
18 | }
19 | const embed = new Discord.MessageEmbed()
20 | .setTitle(`${message.guild.name} Ranking`)
21 | .setColor("RANDOM")
22 | .setTimestamp()
23 | .setDescription(`top 10 Liderlik Tablosu`);
24 |
25 |
26 | if (top10.length < 1) {
27 | embed.setDescription(`liderlik tablosunda kullanıcı yok!`)
28 | }
29 | var state = {
30 | 'querySet': top10,
31 | 'page': currentPage,
32 | 'rows': 10
33 | }
34 |
35 | buildTable()
36 |
37 | function pagination(querySet, page, rows) {
38 | var trimStart = (page - 1) * rows
39 | var trimEnd = trimStart + rows
40 |
41 | var trimmedData = querySet.slice(trimStart, trimEnd)
42 |
43 | var pages = Math.ceil(querySet.length / rows)
44 |
45 | return {
46 | 'querySet': trimmedData,
47 | 'pages': pages
48 | }
49 | }
50 |
51 | function buildTable() {
52 | var pagesData = pagination(state.querySet, state.page, state.rows)
53 | var myList = pagesData.querySet
54 | for (var i = 1 in myList) {
55 | let nextXP = myList[i].level * 2 * 250 + 250
56 | let totalXP = myList[i].totalXP
57 | let rank = top10.sort((a, b) => {
58 | return b.totalXP - a.totalXP
59 | });
60 | let ranking = rank.map(x => x.totalXP).indexOf(totalXP) + 1
61 | let users;
62 | if (typeof message.client.users.cache.get(myList[i].user) == "undefined") {
63 | users = `<@!${myList[i].user}>`
64 | } else {
65 | users = message.client.users.cache.get(myList[i].user).tag
66 | }
67 | embed.addFields({ name: `#${ranking}. ${users}`, value: `> **Level**: \`${myList[i].level}\`\n> **XP**: \`${myList[i].xp} / ${nextXP}\`` });
68 | }
69 | embed.setFooter(`Page ${currentPage} / ${Math.ceil(top10.length / 10)}`)
70 | }
71 | return message.channel.send({ embed });
72 |
73 | }
74 | }
--------------------------------------------------------------------------------
/canvasv12level/commands/rank.js:
--------------------------------------------------------------------------------
1 | const { createCanvas, loadImage } = require("canvas");
2 | const Discord = require("discord.js");
3 | const SQLite = require("better-sqlite3");
4 | const sql = new SQLite('./mainDB.sqlite')
5 | const client = new Discord.Client();
6 | const { join } = require("path")
7 |
8 | module.exports = {
9 | name: 'rank',
10 | aliases: ['rank'],
11 | description: "Check users rank and xp",
12 | cooldown: 3,
13 | category: "Leveling",
14 | async execute(message, args) {
15 | let userArray = message.content.split(" ");
16 | let userArgs = userArray.slice(1);
17 | let user = message.mentions.members.first() || message.guild.members.cache.get(userArgs[0]) || message.guild.members.cache.find(x => x.user.username.toLowerCase() === userArgs.slice(0).join(" ") || x.user.username === userArgs[0]) || message.member;
18 |
19 | client.getScore = sql.prepare("SELECT * FROM levels WHERE user = ? AND guild = ?");
20 | client.setScore = sql.prepare("INSERT OR REPLACE INTO levels (id, user, guild, xp, level, totalXP) VALUES (@id, @user, @guild, @xp, @level, @totalXP);");
21 | const top10 = sql.prepare("SELECT * FROM levels WHERE guild = ? ORDER BY totalXP").all(message.guild.id);
22 | let score = client.getScore.get(user.id, message.guild.id);
23 | if (!score) {
24 | return message.reply(`Bu kullanıcının henüz bir xp'si yok!`)
25 | }
26 | const levelInfo = score.level
27 | const nextXP = levelInfo * 2 * 250 + 250
28 | const xpInfo = score.xp;
29 | const totalXP = score.totalXP
30 | let rank = top10.sort((a, b) => {
31 | return b.totalXP - a.totalXP
32 | });
33 | let ranking = rank.map(x => x.totalXP).indexOf(totalXP) + 1
34 | if (!message.guild.me.hasPermission("ATTACH_FILES")) return message.reply(`**Missing Permission**: ATTACH_FILES or MESSAGE ATTACHMENTS`);
35 |
36 | const canvas = createCanvas(1000, 333)
37 | const ctx = canvas.getContext("2d");
38 | const background = await loadImage(join(__dirname, "..", "img", "wallpaper.png"));
39 | ctx.drawImage(background, 0, 0, canvas.width, canvas.height);
40 |
41 | ctx.beginPath();
42 | ctx.lineWidth = 4;
43 | ctx.strokeStyle = "#A3A3A3"
44 | ctx.globalAlpha = 0.2;
45 | ctx.fillStyle = "#000000"
46 | ctx.fillRect(180, 216, 775, 65);
47 | ctx.fill();
48 | ctx.globalAlpha = 1;
49 | ctx.strokeRect(180, 216, 775, 65);
50 | ctx.stroke();
51 |
52 | ctx.fillStyle = "#838383";
53 | ctx.globalAlpha = 0.6;
54 | ctx.fillRect(200, 216, ((100 / (score.level * 2 * 250 + 250)) * score.xp) * 7.5, 65);
55 | ctx.fill();
56 | ctx.globalAlpha = 1;
57 |
58 | ctx.font = '30px sans-serif';
59 | ctx.textAlign = "center";
60 | ctx.fillStyle = "#beb1b1";
61 | ctx.fillText(`${xpInfo} / ${nextXP} XP`, 600, 260);
62 |
63 | ctx.font = '35px sans-serif';
64 | ctx.textAlign = "left";
65 | ctx.fillText(user.user.tag, 325, 125);
66 |
67 | ctx.font = '40px sans-serif';
68 | ctx.fillText("Level: ", 350, 170);
69 | ctx.fillText(levelInfo, 500, 170);
70 |
71 | ctx.font = '40px sans-serif';
72 | ctx.fillText("Rank: ", 700, 170);
73 | ctx.fillText(ranking, 830, 170);
74 |
75 | ctx.arc(170, 160, 120, 0, Math.PI * 2, true);
76 | ctx.lineWidth = 6;
77 | ctx.strokeStyle = "#A3A3A3"
78 | ctx.stroke();
79 | ctx.closePath();
80 | ctx.clip();
81 | const avatar = await loadImage(user.user.displayAvatarURL({ format: "jpg" }));
82 | ctx.drawImage(avatar, 40, 40, 250, 250);
83 |
84 | const attachments = new Discord.MessageAttachment(canvas.toBuffer(), "rank.png");
85 | message.channel.send(attachments);
86 | }
87 | }
--------------------------------------------------------------------------------
/canvasv12level/commands/levelrolü-ayarla.js:
--------------------------------------------------------------------------------
1 | const Discord = require("discord.js");
2 | const config = require('../config.json')
3 | const prefix = config.prefix;
4 | const SQlite = require("better-sqlite3");
5 | const sql = new SQlite('./mainDB.sqlite');
6 | const client = new Discord.Client();
7 |
8 | module.exports = {
9 | name: 'role-level',
10 | aliases: ['rlevel', 'level-roles'],
11 | description: "Rewards role when user leveled up to a certain level",
12 | category: "Leveling",
13 | cooldown: 3,
14 | async execute(message, args) {
15 | if (!message.guild.me.hasPermission("MANAGE_ROLES")) return message.reply(`I do not have permission to manage roles!`);
16 | if (!message.member.hasPermission("MANAGE_ROLES") || !message.member.hasPermission("MANAGE_GUILD")) return message.reply(`You do not have permission to use this command!`);
17 |
18 |
19 | if (!args.length) {
20 | let embed = new Discord.MessageEmbed()
21 | .setTitle(`seviye rolleri kurulumu`)
22 | .setDescription(`Kullanıcı belirli bir seviyeye yükseldiğinde ödül rolü`)
23 | .addFields({ name: `${prefix}rlevel-add <@role>`, value: `Belirli bir seviyeye yükseldiklerinde kullanıcıya verilecek bir rol belirler..` })
24 | .addFields({ name: `${prefix}rlevel-remove `, value: `Belirtilen seviyedeki rol seviyesini kaldırır.` })
25 | .addFields({ name: `${prefix}rlevel`, value: `Seviyelere ayarlanmış tüm rolleri gösterir.` })
26 | .setColor("RANDOM");
27 |
28 | return message.channel.send(embed);
29 | }
30 |
31 | const method = args[0]
32 | const levelArgs = parseInt(args[1])
33 | args.shift()
34 | args.shift()
35 | const roleName = args.join(' ')
36 |
37 | const role = message.guild.roles.cache.find(r => (r.name === roleName.toString()) || (r.id === roleName.toString().replace(/[^\w\s]/gi, '')));
38 | client.getRole = sql.prepare("SELECT * FROM roles WHERE guildID = ? AND roleID = ? AND level = ?");
39 | client.setRole = sql.prepare("INSERT OR REPLACE INTO roles (guildID, roleID, level) VALUES (@guildID, @roleID, @level);");
40 |
41 | if (method === 'add') {
42 | if (isNaN(levelArgs) && !levelArgs || levelArgs < 1) {
43 | return message.reply(`Lütfen ayarlanacak bir seviye belirtin.`);
44 | } else {
45 | if (!role) {
46 | return message.reply(`Ayarlanacak bir rol sağlamadınız!`);
47 | } else {
48 | let Role = client.getRole.get(message.guild.id, role.id, levelArgs)
49 | if (!Role) {
50 | Role = {
51 | guildID: message.guild.id,
52 | roleID: role.id,
53 | level: levelArgs
54 | }
55 | client.setRole.run(Role)
56 | let embed = new Discord.MessageEmbed()
57 | .setTitle(`Rol başarıyla ayarlandı!`)
58 | .setDescription(`${role} seviye için ayarlandı ${levelArgs}`)
59 | .setColor("RANDOM");
60 | return message.channel.send(embed);
61 | } else if (Role) {
62 | client.deleteLevel = sql.prepare(`DELETE FROM roles WHERE guildID = ? AND roleID = ? AND level = ?`)
63 | client.deleteLevel.run(message.guild.id, role.id, levelArgs);
64 | client.updateLevel = sql.prepare(`INSERT INTO roles(guildID, roleID, level) VALUES(?,?,?)`)
65 | client.updateLevel.run(message.guild.id, role.id, levelArgs)
66 | let embed = new Discord.MessageEmbed()
67 | .setTitle(`başarıyla belirlenmiş rol!`)
68 | .setDescription(`${role}seviye için güncellendi ${levelArgs}`)
69 | .setColor("RANDOM");
70 | return message.channel.send(embed);
71 | }
72 | }
73 | }
74 | }
75 |
76 | if (method === 'show') {
77 | const allRoles = sql.prepare(`SELECT * FROM roles WHERE guildID = ?`).all(message.guild.id)
78 | if (!allRoles) {
79 | return message.reply(`Belirlenmiş rol yok!`)
80 | } else {
81 | let embed = new Discord.MessageEmbed()
82 | .setTitle(`${message.guild.name} Rol Seviyesi`)
83 | .setDescription(`\`${prefix}rol düzeyinde yardım\` daha fazla bilgi için`)
84 | .setColor("RANDOM");
85 | for (const data of allRoles) {
86 | let LevelSet = data.level;
87 | let RolesSet = data.roleID;
88 | embed.addFields({ name: `\u200b`, value: `**Level ${LevelSet}**: <@&${RolesSet}>` });
89 | }
90 | return message.channel.send({ embed });
91 | }
92 | }
93 |
94 | client.getLevel = sql.prepare(`SELECT * FROM roles WHERE guildID = ? AND level = ?`)
95 | const levels = client.getLevel.get(message.guild.id, levelArgs)
96 |
97 | if (method === 'remove' || method === 'delete') {
98 | if (isNaN(levelArgs) && !levelArgs || levelArgs < 1) {
99 | return message.reply(`Lütfen kaldırılacak bir seviye belirtin.`);
100 | } else {
101 | if (!levels) {
102 | return message.reply(`Bu geçerli bir seviye değil!`);
103 | } else {
104 | client.deleteLevel = sql.prepare(`DELETE FROM roles WHERE guildID = ? AND level = ?`)
105 | client.deleteLevel.run(message.guild.id, levelArgs);
106 | let embed = new Discord.MessageEmbed()
107 | .setTitle(`Rol başarıyla ayarlandı!`)
108 | .setDescription(`Seviye için rol ödülleri ${levelArgs} Kaldırıldı.`)
109 | .setColor("RANDOM");
110 | return message.channel.send(embed);
111 | }
112 | }
113 | }
114 |
115 | }
116 | }
--------------------------------------------------------------------------------
/canvasv12level/index.js:
--------------------------------------------------------------------------------
1 | // Importing Packages
2 | const Discord = require("discord.js")
3 | const SQLite = require("better-sqlite3")
4 | const sql = new SQLite('./mainDB.sqlite')
5 | const { join } = require("path")
6 | const { readdirSync } = require("fs");
7 |
8 | const client = new Discord.Client()
9 |
10 | client.commands = new Discord.Collection();
11 | const cooldowns = new Discord.Collection();
12 | const escapeRegex = (str) => str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
13 | const talkedRecently = new Map();
14 |
15 | // Token, Prefix, and Owner ID
16 | const config = require("./config.json")
17 |
18 | // Events
19 | client.login(config.token)
20 |
21 | client.on("ready", () => {
22 | // Check if the table "points" exists.
23 | const levelTable = sql.prepare("SELECT count(*) FROM sqlite_master WHERE type='table' AND name = 'levels';").get();
24 | if (!levelTable['count(*)']) {
25 | sql.prepare("CREATE TABLE levels (id TEXT PRIMARY KEY, user TEXT, guild TEXT, xp INTEGER, level INTEGER, totalXP INTEGER);").run();
26 | }
27 |
28 | client.getLevel = sql.prepare("SELECT * FROM levels WHERE user = ? AND guild = ?");
29 | client.setLevel = sql.prepare("INSERT OR REPLACE INTO levels (id, user, guild, xp, level, totalXP) VALUES (@id, @user, @guild, @xp, @level, @totalXP);");
30 | // Role table for levels
31 | const roleTable = sql.prepare("SELECT count(*) FROM sqlite_master WHERE type='table' AND name = 'roles';").get();
32 | if (!roleTable['count(*)']) {
33 | sql.prepare("CREATE TABLE roles (guildID TEXT, roleID TEXT, level INTEGER);").run();
34 | }
35 |
36 | console.log(`Logged in as ${client.user.username}`)
37 | });
38 |
39 | // Command Handler
40 | const commandFiles = readdirSync(join(__dirname, "commands")).filter((file) => file.endsWith(".js"));
41 | for (const file of commandFiles) {
42 | const command = require(join(__dirname, "commands", `${file}`));
43 | client.commands.set(command.name, command);
44 | }
45 |
46 | // Message Events
47 | client.on("message", (message) => {
48 | if (message.author.bot) return;
49 | if (!message.guild) return;
50 |
51 | const prefixRegex = new RegExp(`^(<@!?${client.user.id}>|${escapeRegex(config.prefix)})\\s*`);
52 | if (!prefixRegex.test(message.content)) return;
53 |
54 | const [, matchedPrefix] = message.content.match(prefixRegex);
55 |
56 | const args = message.content.slice(matchedPrefix.length).trim().split(/ +/);
57 | const commandName = args.shift().toLowerCase();
58 |
59 | const command =
60 | client.commands.get(commandName) ||
61 | client.commands.find((cmd) => cmd.aliases && cmd.aliases.includes(commandName));
62 |
63 | if (!command) return;
64 |
65 | if (!cooldowns.has(command.name)) {
66 | cooldowns.set(command.name, new Discord.Collection());
67 | }
68 |
69 | const now = Date.now();
70 | const timestamps = cooldowns.get(command.name);
71 | const cooldownAmount = (command.cooldown || 1) * 1000;
72 |
73 | if (timestamps.has(message.author.id)) {
74 | const expirationTime = timestamps.get(message.author.id) + cooldownAmount;
75 |
76 | if (now < expirationTime) {
77 | const timeLeft = (expirationTime - now) / 1000;
78 | return message.reply(
79 | `please wait ${timeLeft.toFixed(1)} more second(s) before reusing the \`${command.name}\` command.`
80 | );
81 | }
82 | }
83 |
84 | timestamps.set(message.author.id, now);
85 | setTimeout(() => timestamps.delete(message.author.id), cooldownAmount);
86 |
87 | try {
88 | command.execute(message, args);
89 | } catch (error) {
90 | console.error(error);
91 | message.reply("Bu komutu yürütürken bir hata oluştu.").catch(console.error);
92 | }
93 | });
94 |
95 | // XP Messages
96 | client.on("message", message => {
97 | if (message.author.bot) return;
98 | if (!message.guild) return;
99 | // get level and set level
100 | const level = client.getLevel.get(message.author.id, message.guild.id)
101 | if (!level) {
102 | let insertLevel = sql.prepare("INSERT OR REPLACE INTO levels (id, user, guild, xp, level, totalXP) VALUES (?,?,?,?,?,?);");
103 | insertLevel.run(`${message.author.id}-${message.guild.id}`, message.author.id, message.guild.id, 0, 0, 0)
104 | return;
105 | }
106 |
107 | const lvl = level.level;
108 |
109 | // xp system
110 | const generatedXp = Math.floor(Math.random() * 16);
111 | const nextXP = level.level * 2 * 250 + 250
112 | // message content or characters length has to be more than 4 characters also cooldown
113 | if (talkedRecently.get(message.author.id)) {
114 | return;
115 | } else { // cooldown is 10 seconds
116 | level.xp += generatedXp;
117 | level.totalXP += generatedXp;
118 |
119 |
120 | // level up!
121 | if (level.xp >= nextXP) {
122 | level.xp = 0;
123 | level.level += 1;
124 | /* let embed = new Discord.MessageEmbed()
125 | .setAuthor(message.author.tag, message.author.displayAvatarURL({ dynamic: true }))
126 | .setDescription(`**Tebrikler** ${message.author}! Şimdi seviye atladınız **level ${level.level}**`)
127 | .setColor("#2f3136")
128 | .setThumbnail(message.author.displayAvatarURL({ dynamic: true }))
129 | .setTimestamp();*/
130 | // using try catch if bot have perms to send EMBED_LINKS
131 | try {
132 | client.channels.cache.get('822763553119141888').send(`**Tebrikler** ${message.author}! Şimdi seviye atladınız **level ${level.level}**`)
133 | } catch (err) {
134 | message.channel.send(`Tebrikler, ${message.author}! Şimdi seviye atladınız **Level ${level.level}**`)
135 | }
136 | };
137 | client.setLevel.run(level);
138 | // add cooldown to user
139 | talkedRecently.set(message.author.id, Date.now() + 10 * 1000);
140 | setTimeout(() => talkedRecently.delete(message.author.id, Date.now() + 10 * 1000))
141 | }
142 | // level up, time to add level roles
143 | const member = message.member;
144 | let Roles = sql.prepare("SELECT * FROM roles WHERE guildID = ? AND level = ?")
145 |
146 | let roles = Roles.get(message.guild.id, lvl)
147 | if (!roles) return;
148 | if (lvl >= roles.level) {
149 | if (roles) {
150 | if (member.roles.cache.get(roles.roleID)) {
151 | return;
152 | }
153 | if (!message.guild.me.hasPermission("MANAGE_ROLES")) {
154 | return
155 | }
156 | member.roles.add(roles.roleID);
157 | }
158 | }
159 | })
160 |
161 | const logs = require('discord-logs');
162 | logs(client);
163 |
164 | var roleLogs = "822763553119141888"
165 |
166 | client.on("guildMemberRoleAdd", async(member, role) => {
167 | let entry = await member.guild.fetchAuditLogs({type: 'GUILD_MEMBER_UPDATE'}).then(audit => audit.entries.first());
168 | if (entry.executor.id != client.user.id) return;
169 | client.channels.cache.get(roleLogs).send(`**Tebrikler** ${member}! seviye atladın ve \`${role.name}\` rolü verildi.`);
170 | });
--------------------------------------------------------------------------------