guild_members_chunk is triggered for each chunk for each server it is on, and the bot is currently in 10 servers so it was runnign teh same thigns 10 times, clogging up conenctions
74 lines
2 KiB
Rust
74 lines
2 KiB
Rust
use serenity::{
|
|
all::{ChunkGuildFilter, GuildId, GuildMembersChunkEvent},
|
|
async_trait,
|
|
client::{Context, EventHandler},
|
|
model::gateway::GatewayIntents,
|
|
Client,
|
|
};
|
|
use skynet_discord_bot::{
|
|
common::{
|
|
database::{db_init, DataBase},
|
|
set_roles::committee,
|
|
},
|
|
get_config, Config,
|
|
};
|
|
use std::{process, sync::Arc};
|
|
use tokio::sync::RwLock;
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
let config = get_config();
|
|
let db = match db_init(&config).await {
|
|
Ok(x) => x,
|
|
Err(_) => return,
|
|
};
|
|
|
|
// Intents are a bitflag, bitwise operations can be used to dictate which intents to use
|
|
let intents = GatewayIntents::GUILDS | GatewayIntents::GUILD_MESSAGES | GatewayIntents::MESSAGE_CONTENT | GatewayIntents::GUILD_MEMBERS;
|
|
// Build our client.
|
|
let mut client = Client::builder(&config.discord_token, intents)
|
|
.event_handler(Handler {})
|
|
.cache_settings(serenity::cache::Settings::default())
|
|
.await
|
|
.expect("Error creating client");
|
|
|
|
{
|
|
let mut data = client.data.write().await;
|
|
|
|
data.insert::<Config>(Arc::new(RwLock::new(config)));
|
|
data.insert::<DataBase>(Arc::new(RwLock::new(db)));
|
|
}
|
|
|
|
if let Err(why) = client.start().await {
|
|
println!("Client error: {why:?}");
|
|
}
|
|
}
|
|
|
|
struct Handler;
|
|
#[async_trait]
|
|
impl EventHandler for Handler {
|
|
async fn cache_ready(&self, ctx: Context, _guilds: Vec<GuildId>) {
|
|
let config_lock = {
|
|
let data_read = ctx.data.read().await;
|
|
data_read.get::<Config>().expect("Expected Config in TypeMap.").clone()
|
|
};
|
|
let config_global = config_lock.read().await;
|
|
|
|
let server = config_global.committee_server;
|
|
|
|
ctx.shard.chunk_guild(server, Some(2000), false, ChunkGuildFilter::None, None);
|
|
|
|
println!("Cache loaded");
|
|
}
|
|
|
|
async fn guild_members_chunk(&self, ctx: Context, chunk: GuildMembersChunkEvent) {
|
|
if (chunk.chunk_index + 1) == chunk.chunk_count {
|
|
println!("Cache built successfully!");
|
|
// u[date committee server
|
|
committee::check_committee(&ctx).await;
|
|
|
|
// finish up
|
|
process::exit(0);
|
|
}
|
|
}
|
|
}
|