Version 3.0 sortie, fusion avec JujulBot
This commit is contained in:
@@ -4,11 +4,11 @@ import dbGuildInit from '../../utils/dbGuildInit'
|
||||
export default {
|
||||
name: Events.GuildCreate,
|
||||
async execute(guild: Guild) {
|
||||
console.log(`Joined ${guild.name} with ${guild.memberCount} members`)
|
||||
console.log(`Joined "${guild.name}" with ${guild.memberCount} members`)
|
||||
|
||||
let guildProfile = await dbGuildInit(guild)
|
||||
if (!guildProfile) return console.log(`An error occured while initializing database data for **${guild.name}** !`)
|
||||
if (!guildProfile) return console.log(`An error occured while initializing database data for "${guild.name}" !`)
|
||||
|
||||
console.log(`Database data for new guild **${guildProfile.guildName}** successfully initialized !`)
|
||||
console.log(`Database data for new guild "${guildProfile.guildName}" successfully initialized !`)
|
||||
}
|
||||
}
|
||||
@@ -1,19 +1,44 @@
|
||||
import { Events, GuildMember } from 'discord.js'
|
||||
import { Events, GuildMember, EmbedBuilder, TextChannel } from 'discord.js'
|
||||
|
||||
export default {
|
||||
name: Events.GuildMemberAdd,
|
||||
async execute(member: GuildMember) {
|
||||
if (member.guild.id !== '1086577543651524699') return
|
||||
member.guild.members.fetch().then(() => {
|
||||
var i = 0
|
||||
member.guild.members.cache.forEach(async member => { if (!member.user.bot) i++ })
|
||||
let channel = member.guild.channels.cache.get('1091140609139560508')
|
||||
if (!channel) return
|
||||
if (member.guild.id === '1086577543651524699') { // Salon posé tamisé
|
||||
let guild = member.guild
|
||||
|
||||
console.log(channel.name)
|
||||
console.log(`${i} Gens Posés`)
|
||||
channel.setName('Changement...')
|
||||
channel.setName(`${i} Gens Posés`)
|
||||
}).catch(console.error)
|
||||
guild.members.fetch().then(() => {
|
||||
var i = 0
|
||||
guild.members.cache.forEach(async member => { if (!member.user.bot) i++ })
|
||||
|
||||
let channel = guild.channels.cache.get('1091140609139560508')
|
||||
if (!channel) return
|
||||
|
||||
channel.setName('Changement...')
|
||||
channel.setName(`${i} Gens Posés`)
|
||||
}).catch(console.error)
|
||||
} else if (member.guild.id === '796327643783626782') { // Jujul Community
|
||||
let guild = member.guild
|
||||
|
||||
let channel = guild.channels.cache.get('837248593609097237') as TextChannel
|
||||
if (!channel) return console.log(`\u001b[1;31m Aucun channel trouvé avec l'id "837248593609097237" !`)
|
||||
|
||||
if (!guild.members.me) return console.log(`\u001b[1;31m Je ne suis pas sur le serveur !`)
|
||||
|
||||
let embed = new EmbedBuilder()
|
||||
.setColor(guild.members.me.displayHexColor)
|
||||
.setTitle(`Salut ${member.user.username} !`)
|
||||
.setDescription(`
|
||||
Bienvenue sur le serveur de **Jujul** !
|
||||
Nous sommes actuellement ${guild.memberCount} membres !\n
|
||||
N'hésite pas à aller lire le <#797471924367786004> et à aller te présenter dans <#837138238417141791> !\n
|
||||
Si tu as des questions,
|
||||
n'hésite pas à les poser dans le <#837110617315344444> !\n
|
||||
Bon séjour parmi nous !
|
||||
`)
|
||||
.setThumbnail(member.user.avatarURL())
|
||||
.setTimestamp(new Date())
|
||||
|
||||
await channel.send({ embeds: [embed] })
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -3,17 +3,19 @@ import { Events, GuildMember } from 'discord.js'
|
||||
export default {
|
||||
name: Events.GuildMemberRemove,
|
||||
async execute(member: GuildMember) {
|
||||
if (member.guild.id !== '1086577543651524699') return
|
||||
member.guild.members.fetch().then(() => {
|
||||
var i = 0
|
||||
member.guild.members.cache.forEach(async member => { if (!member.user.bot) i++ })
|
||||
let channel = member.guild.channels.cache.get('1091140609139560508')
|
||||
if (!channel) return
|
||||
if (member.guild.id === '1086577543651524699') { // Salon posé tamisé
|
||||
let guild = member.guild
|
||||
|
||||
console.log(channel.name)
|
||||
console.log(`${i} Gens Posés`)
|
||||
channel.setName('Changement...')
|
||||
channel.setName(`${i} Gens Posés`)
|
||||
}).catch(console.error)
|
||||
guild.members.fetch().then(() => {
|
||||
var i = 0
|
||||
guild.members.cache.forEach(async member => { if (!member.user.bot) i++ })
|
||||
|
||||
let channel = guild.channels.cache.get('1091140609139560508')
|
||||
if (!channel) return
|
||||
|
||||
channel.setName('Changement...')
|
||||
channel.setName(`${i} Gens Posés`)
|
||||
}).catch(console.error)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,35 @@
|
||||
import { Events, GuildMember, EmbedBuilder, TextChannel } from 'discord.js'
|
||||
|
||||
export default {
|
||||
name: Events.GuildMemberUpdate,
|
||||
async execute(oldMember: GuildMember, newMember: GuildMember) {
|
||||
if (newMember.guild.id === '796327643783626782') { // Jujul Community
|
||||
let guild = newMember.guild
|
||||
|
||||
let channel = guild.channels.cache.get('924353449930412153') as TextChannel
|
||||
if (!channel) return console.log(`\u001b[1;31m Aucun channel trouvé avec l'id "924353449930412153" !`)
|
||||
|
||||
let boostRole = guild.roles.premiumSubscriberRole
|
||||
if (!boostRole) return console.log(`\u001b[1;31m Aucun rôle de boost trouvé !`)
|
||||
|
||||
const hadRole = oldMember.roles.cache.find(role => role.id === boostRole.id)
|
||||
const hasRole = newMember.roles.cache.find(role => role.id === boostRole.id)
|
||||
|
||||
if (!hadRole && hasRole) {
|
||||
if (!guild.members.me) return console.log(`\u001b[1;31m Je ne suis pas sur le serveur !`)
|
||||
|
||||
let embed = new EmbedBuilder()
|
||||
.setColor(guild.members.me.displayHexColor)
|
||||
.setTitle(`Nouveau boost de ${newMember.user.username} !`)
|
||||
.setDescription(`
|
||||
Merci à toi pour ce boost.\n
|
||||
Grâce à toi, on a atteint ${guild.premiumSubscriptionCount} boosts !
|
||||
`)
|
||||
.setThumbnail(newMember.user.avatarURL())
|
||||
.setTimestamp(new Date())
|
||||
|
||||
await channel.send({ embeds: [embed] })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -8,9 +8,8 @@ export default {
|
||||
console.log(`Guild ${oldGuild.name} updated`)
|
||||
|
||||
let guildProfile = await dbGuild.findOne({ guildId: newGuild.id })
|
||||
if (!guildProfile) {
|
||||
guildProfile = await dbGuildInit(newGuild)
|
||||
} else {
|
||||
if (!guildProfile) guildProfile = await dbGuildInit(newGuild)
|
||||
else {
|
||||
guildProfile.guildName = newGuild.name
|
||||
guildProfile.guildIcon = newGuild.iconURL() ?? 'None'
|
||||
await guildProfile.save().catch(console.error)
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
import { Events, Interaction, ChatInputCommandInteraction, AutocompleteInteraction, ButtonInteraction } from 'discord.js'
|
||||
import playerButtons from '../../utilsPlayer/buttons'
|
||||
import editPlayer from '../../utilsPlayer/edit'
|
||||
import { playerButtons, playerEdit } from '../../utils/player'
|
||||
|
||||
export default {
|
||||
name: Events.InteractionCreate,
|
||||
@@ -37,7 +36,7 @@ export default {
|
||||
|
||||
console.log(`Button '${interaction.customId}' clicked by ${interaction.user.tag}`)
|
||||
|
||||
if (playerButtons.includes(interaction.customId)) { await editPlayer(interaction) }
|
||||
if (playerButtons.includes(interaction.customId)) { await playerEdit(interaction) }
|
||||
|
||||
try { await button.execute(interaction) }
|
||||
catch (error) { console.error(`Error clicking ${interaction.customId}:`, error) }
|
||||
|
||||
@@ -1,16 +1,17 @@
|
||||
import { Events, Client, ActivityType } from 'discord.js'
|
||||
import { YoutubeiExtractor } from "discord-player-youtubei"
|
||||
import { useMainPlayer } from 'discord-player'
|
||||
import { connect } from 'mongoose'
|
||||
import WebSocket from 'websocket'
|
||||
import chalk from 'chalk'
|
||||
import 'dotenv/config'
|
||||
|
||||
import dbGuildInit from '../../utils/dbGuildInit'
|
||||
import dbGuild from '../../schemas/guild'
|
||||
import replay from '../../utilsPlayer/replay'
|
||||
import disco from '../../utilsPlayer/disco'
|
||||
import { playerDisco, playerReplay } from '../../utils/player'
|
||||
import * as Twitch from '../../utils/twitch'
|
||||
import rss from '../../utils/rss'
|
||||
|
||||
|
||||
export default {
|
||||
name: Events.ClientReady,
|
||||
once: true,
|
||||
@@ -18,7 +19,8 @@ export default {
|
||||
console.log(chalk.blue(`[DiscordJS] Connected to Discord ! Logged in as ${client.user?.tag ?? 'unknown'}`))
|
||||
client.user?.setActivity('some bangers...', { type: ActivityType.Listening })
|
||||
|
||||
await useMainPlayer().extractors.loadDefault(ext => ext === 'YouTubeExtractor' || ext === 'SpotifyExtractor').then(() => console.log(chalk.blue('[Discord-Player] YouTube and Spotify extractors loaded.'))).catch(console.error)
|
||||
await useMainPlayer().extractors.loadDefault(ext => ext === 'SpotifyExtractor').then(() => console.log(chalk.blue('[Discord-Player] Spotify extractor loaded.'))).catch(console.error)
|
||||
await useMainPlayer().extractors.register(YoutubeiExtractor, {}).then(() => console.log(chalk.blue('[Discord-Player] Youtube extractor loaded.'))).catch(console.error)
|
||||
|
||||
let mongo_url = `mongodb://${process.env.MONGOOSE_USER}:${process.env.MONGOOSE_PASSWORD}@${process.env.MONGOOSE_HOST}/${process.env.MONGOOSE_DATABASE}`
|
||||
await connect(mongo_url).catch(console.error)
|
||||
@@ -29,14 +31,14 @@ export default {
|
||||
let guildProfile = await dbGuild.findOne({ guildId: guild.id })
|
||||
|
||||
if (!guildProfile) guildProfile = await dbGuildInit(guild)
|
||||
if (guildProfile.guildPlayer?.replay?.enabled && guildProfile.guildPlayer?.replay?.textChannelId) await replay(client, guildProfile)
|
||||
if (guildProfile.guildPlayer?.replay?.enabled && guildProfile.guildPlayer?.replay?.textChannelId) await playerReplay(client, guildProfile)
|
||||
|
||||
client.disco = { interval: {} as NodeJS.Timeout }
|
||||
client.disco.interval = setInterval(async () => {
|
||||
let guildProfile = await dbGuild.findOne({ guildId: guild.id })
|
||||
|
||||
if (guildProfile?.guildPlayer?.disco?.enabled) {
|
||||
let state = await disco(client, guildProfile)
|
||||
let state = await playerDisco(client, guildProfile)
|
||||
if (state === 'clear') clearInterval(client.disco.interval)
|
||||
}
|
||||
}, 3000)
|
||||
@@ -50,6 +52,64 @@ export default {
|
||||
if (state === 'clear') clearInterval(client.rss.interval)
|
||||
}
|
||||
}, 30000)
|
||||
|
||||
// TWITCH EVENTSUB
|
||||
let dbData = guildProfile.get('guildTwitch')
|
||||
if (!dbData?.enabled) return console.log(chalk.magenta(`[Twitch] Module is disabled for "${guild?.name}", please activate with \`/database edit guildTwitch.enabled True\` !`))
|
||||
|
||||
let client_id = process.env.TWITCH_APP_ID as string
|
||||
if (!client_id) return console.log(chalk.magenta('[Twitch] App ID is not defined !'))
|
||||
|
||||
let client_secret = process.env.TWITCH_APP_SECRET as string
|
||||
if (!client_secret) return console.log(chalk.magenta('[Twitch] App Secret is not defined !'))
|
||||
|
||||
let twitch = new WebSocket.client().on('connect', async connection => {
|
||||
console.log(chalk.magenta('[Twitch] EventSub WebSocket Connected !'))
|
||||
|
||||
connection.on('message', async message => { if (message.type === 'utf8') { try {
|
||||
let data = JSON.parse(message.utf8Data)
|
||||
let channel_access_token = guildProfile.get('guildTwitch')?.channelAccessToken as string
|
||||
|
||||
// Check when Twitch asks to login
|
||||
if (data.metadata.message_type === 'session_welcome') {
|
||||
|
||||
// Check if the channel access token is still valid before connecting
|
||||
channel_access_token = await Twitch.checkChannel(client_id, client_secret, channel_access_token, guild) as string
|
||||
if (!channel_access_token) return console.log(chalk.magenta("[Twitch] Can't refresh channel access token !"))
|
||||
|
||||
// Get broadcaster user id and reward id
|
||||
let broadcaster_user_id = await Twitch.getUserInfo(client_id, channel_access_token, 'id') as string
|
||||
|
||||
let topics: { [key: string]: { version: string; condition: { broadcaster_user_id: string } } } = {
|
||||
'stream.online': { version: '1', condition: { broadcaster_user_id } },
|
||||
'stream.offline': { version: '1', condition: { broadcaster_user_id } }
|
||||
}
|
||||
|
||||
// Subscribe to all events required
|
||||
for (let type in topics) {
|
||||
console.log(chalk.magenta(`[Twitch] Creating ${type}...`))
|
||||
let { version, condition } = topics[type]
|
||||
|
||||
let status = await Twitch.subscribeToEvents(client_id, channel_access_token, data.payload.session.id, type, version, condition)
|
||||
if (!status) return console.error(chalk.magenta(`[Twitch] Failed to create ${type}`))
|
||||
else if (status.error) return console.log(chalk.magenta('[Twitch] Erreur de connexion EventSub, veuillez vous reconnecter !'))
|
||||
else console.log(chalk.magenta(`[Twitch] Successfully created ${type}`))
|
||||
}
|
||||
}
|
||||
|
||||
// Handle notification messages
|
||||
else if (data.metadata.message_type === 'notification') Twitch.notification(client_id, channel_access_token, data, guild)
|
||||
|
||||
} catch (error) { console.error(chalk.magenta('[Twitch] ' + error)) } } })
|
||||
.on('error', error => console.error(chalk.magenta('[Twitch] ' + error)))
|
||||
.on('close', () => {
|
||||
console.log(chalk.magenta('[Twitch] EventSub Connection Closed !'))
|
||||
twitch.connect('wss://eventsub.wss.twitch.tv/ws')
|
||||
})
|
||||
}).on('connectFailed', error => console.error(chalk.magenta('[Twitch] ' + error)))
|
||||
|
||||
// LAUNCH TWITCH EVENTSUB
|
||||
twitch.connect('wss://eventsub.wss.twitch.tv/ws')
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user