├── 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 |

Rank sistemi, level atlayınca yetki verme.

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 | }); --------------------------------------------------------------------------------