Skip to content

Commit

Permalink
fix: auto update && optimised it (#327)
Browse files Browse the repository at this point in the history
  • Loading branch information
JustDams authored Apr 21, 2023
1 parent 3ca880d commit 1d77c7a
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 36 deletions.
21 changes: 21 additions & 0 deletions bot.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
const { Client, GatewayIntentBits } = require('discord.js')
const fs = require('fs')
const AntiSpam = require('./templates/antispam')
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMembers, GatewayIntentBits.GuildMessages] })
const { updateRoles } = require('./functions/roles')
const mongo = require('./database/mongo')

require('dotenv').config()
mongo().then(() => { console.info('🧱 Connected to mongo') }).catch(console.error)

client.antispam = new AntiSpam()

fs.readdirSync('./events').filter(file => file.endsWith('.js')).forEach(async (file) => {
const event = require(`./events/${file}`)
client.on(event.name, (...args) => { event.execute(...args) })
})

// Start the bot
client.login(process.env.TOKEN)

setInterval(() => { updateRoles(client) }, 3600000)
35 changes: 15 additions & 20 deletions functions/roles.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,18 @@ const GuildRoles = require('../database/guildRoles')
const User = require('../database/user')
const Player = require('./player')

const getGuildRoles = (guild, guilds) => guilds.filter(e => e).find(e => e.id === guild.id)

const getRoleIds = (guildRoles) => Object.keys(Object.entries(guildRoles)[2][1])
.filter(e => e.startsWith('level')).map(e => guildRoles[e])

const setupRoles = async (users, data, remove) => {
const [guildRoles, guild] = [data.guildRoles, data.guild]
const guildDatas = await guild.fetch()
const members = await guildDatas.members.fetch({ user: users.filter(e => e.guildId === guildDatas.id || !e.guildId).map(e => e.discordId) })
const setupRoles = async (client, user, guildRoles, remove) => {
const guildDatas = await client.guilds.fetch(guildRoles.id)
let members

if (user.length > 0) members = [await guildDatas.members.fetch(user.at(0).discordId)]
else members = await guildDatas.members.fetch({ cache: false })

members.forEach(async (member) => {
members?.forEach(async (member) => {
if (!member) return
let user = await User.get(member.user.id)

if (!(user.length > 0)) return
Expand All @@ -21,9 +22,9 @@ const setupRoles = async (users, data, remove) => {
user = user.flat().at(0)

const playerDatas = await Player.getDatas(user.faceitId).catch(console.error)

if (!playerDatas?.games?.csgo) return

const playerLevel = playerDatas.games.csgo.skill_level
const roleLevels = getRoleIds(guildRoles)

Expand All @@ -37,21 +38,15 @@ const setupRoles = async (users, data, remove) => {
}

const updateRoles = async (client, discordId, guildId, remove = false) => {
let users, guilds
let user, guilds

if (discordId) users = await User.get(discordId)
else users = await User.getAll()
if (discordId) user = await User.get(discordId)

if (guildId) guilds = [await GuildRoles.getRolesOf(guildId)]
else guilds = await GuildRoles.getAll()

const clientGuilds = client.guilds.cache
const datas = clientGuilds.map(guild => { return { guildRoles: getGuildRoles(guild, guilds), guild: guild } }).filter(e => e.guildRoles)
else guilds = [await GuildRoles.getAll()].flat()

Promise.all(datas.map(data => setupRoles(users, data, remove)))
.then(() => {
if (remove) User.remove(discordId, guildId)
})
Promise.all(guilds.map(async guildRoles => await setupRoles(client, user, guildRoles, remove).catch(console.error)))
.then(() => { if (remove) User.remove(discordId, guildId) })
.catch(console.error)
}

Expand Down
20 changes: 4 additions & 16 deletions index.js
Original file line number Diff line number Diff line change
@@ -1,19 +1,7 @@
const { Client, GatewayIntentBits } = require('discord.js')
const fs = require('fs')
const AntiSpam = require('./templates/antispam')
const client = new Client({ intents: [GatewayIntentBits.Guilds, GatewayIntentBits.GuildMessages] })
const { updateRoles } = require('./functions/roles')
const { ShardingManager } = require('discord.js')

require('dotenv').config()
const manager = new ShardingManager('./bot.js', { token: process.env.TOKEN })

client.antispam = new AntiSpam()
manager.on('shardCreate', shard => console.info(`Launched shard ${shard.id}`))

fs.readdirSync('./events').filter(file => file.endsWith('.js')).forEach(async (file) => {
const event = require(`./events/${file}`)
client.on(event.name, (...args) => { event.execute(...args) })
})

// Start the bot
client.login(process.env.TOKEN)

setInterval(() => { updateRoles(client) }, 3600000)
manager.spawn()

0 comments on commit 1d77c7a

Please sign in to comment.