85 lines
2.6 KiB
Rust
85 lines
2.6 KiB
Rust
mod config;
|
|
mod discord;
|
|
mod error;
|
|
mod imgur;
|
|
mod insult_compliment;
|
|
mod inventory;
|
|
mod user;
|
|
|
|
use crate::config::{Args, BotConfig, Channel, GlobalData};
|
|
use crate::discord::emoji_race::RaceMessage;
|
|
use crate::discord::unrecognised_command_hook;
|
|
use magick_rust::magick_wand_genesis;
|
|
use serenity::framework::standard::macros::{command, group, help, hook};
|
|
use serenity::framework::standard::StandardFramework;
|
|
use serenity::prelude::*;
|
|
use songbird::SerenityInit;
|
|
use std::sync::Once;
|
|
use structopt::StructOpt;
|
|
|
|
const BAD_APPLE: &str = include_str!("assets/bad_apple.txt");
|
|
|
|
static START: Once = Once::new();
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
let args: Args = Args::from_args();
|
|
|
|
let cfg = match BotConfig::new(&args.cfg_path) {
|
|
Ok(cfg) => cfg,
|
|
Err(err) => {
|
|
println!("Unable to open config: {}", err);
|
|
return;
|
|
}
|
|
};
|
|
|
|
START.call_once(|| {
|
|
magick_wand_genesis();
|
|
});
|
|
|
|
let global_data = match GlobalData::new(args, cfg).await {
|
|
Ok(global_data) => global_data,
|
|
Err(err) => {
|
|
println!("Error parsing config: {}", err);
|
|
return;
|
|
}
|
|
};
|
|
|
|
let framework = StandardFramework::new()
|
|
.configure(|c| c.with_whitespace(true).prefix("!").ignore_bots(true))
|
|
.group(&discord::color::COLOR_GROUP)
|
|
.group(&discord::album::ALBUM_GROUP)
|
|
.group(&discord::celeryman::CELERYMAN_GROUP)
|
|
.group(&discord::joke::JOKE_GROUP)
|
|
.group(&discord::admin::ADMIN_GROUP)
|
|
.group(&discord::story::STORY_GROUP)
|
|
.group(&discord::fren_coin::FRENCOIN_GROUP)
|
|
.group(&discord::emoji_race::EMOJIRACE_GROUP)
|
|
.group(&discord::motivate::MOTIVATE_GROUP)
|
|
.group(&discord::voices::VOICES_GROUP)
|
|
.group(&discord::shop::SHOP_GROUP)
|
|
.unrecognised_command(unrecognised_command_hook)
|
|
.bucket("bad_apple", |b| b.delay(60 * 10))
|
|
.await
|
|
.help(&discord::MY_HELP)
|
|
.after(discord::after);
|
|
|
|
let story_channel = Channel::<String>::new();
|
|
let race_channel = Channel::<RaceMessage>::new();
|
|
|
|
let intents = GatewayIntents::all();
|
|
let mut client = Client::builder(&global_data.cfg.bot_token, intents)
|
|
.framework(framework)
|
|
.register_songbird()
|
|
.type_map_insert::<GlobalData>(global_data)
|
|
.type_map_insert::<Channel<String>>(story_channel)
|
|
.type_map_insert::<Channel<RaceMessage>>(race_channel)
|
|
.event_handler(discord::Handler)
|
|
.await
|
|
.expect("Unable to create client.");
|
|
|
|
if let Err(err) = client.start().await {
|
|
println!("Client error: {:?}", err);
|
|
}
|
|
}
|