aboutsummaryrefslogtreecommitdiff
path: root/src/bot.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/bot.rs')
-rw-r--r--src/bot.rs48
1 files changed, 34 insertions, 14 deletions
diff --git a/src/bot.rs b/src/bot.rs
index b3db4e9..2c9f73b 100644
--- a/src/bot.rs
+++ b/src/bot.rs
@@ -45,9 +45,9 @@ use serenity::{
},
prelude::*,
};
+use songbird::SerenityInit;
use crate::{
- audio,
commands::register_commands,
config::CONFIG,
util,
@@ -56,12 +56,18 @@ use crate::{
Result,
};
+pub struct HttpKey;
+
+impl TypeMapKey for HttpKey {
+ type Value = reqwest::Client;
+}
+
struct Handler;
#[serenity::async_trait]
impl EventHandler for Handler {
async fn ready(&self, ctx: Context, r: Ready) {
- let guild = r.guilds.iter().find(|g| g.id() == CONFIG.discord.guild());
+ let guild = r.guilds.iter().find(|g| g.id == CONFIG.discord.guild());
if guild.is_none() {
info!("bot isn't in configured guild. join here: {:?}", OAUTH_URL.as_str());
@@ -76,11 +82,14 @@ impl EventHandler for Handler {
#[cfg(not(debug_assertions))]
let botname = "thulani";
- guild.iter().for_each(|g| {
- if let Err(e) = g.id().edit_nickname(&ctx, Some(botname)) {
- error!("changing nickname: {:?}", e);
- }
- });
+ use serenity::futures::StreamExt;
+ serenity::futures::stream::iter(guild.iter())
+ .for_each(|g| async move {
+ if let Err(e) = g.id.edit_nickname(&ctx, Some(botname)).await {
+ error!("changing nickname: {:?}", e);
+ }
+ })
+ .await;
}
async fn resume(&self, _ctx: Context, _resume: ResumedEvent) {
@@ -233,21 +242,32 @@ fn after_handle<'fut>(
})
}
-pub fn run() -> Result<()> {
+pub async fn run() -> Result<()> {
let token = &CONFIG.discord.auth.token;
- let mut client = Client::new(token, Handler)?;
- audio::VoiceManager::register(&mut client);
- audio::PlayQueue::register(&mut client);
+ let sb_config = songbird::Config::default();
- client.with_framework(framework());
+ let mut client =
+ Client::builder(token, GatewayIntents::non_privileged() | GatewayIntents::MESSAGE_CONTENT)
+ .event_handler(Handler)
+ .register_songbird_from_config(sb_config)
+ .type_map_insert::<HttpKey>(reqwest::Client::new())
+ .framework(framework().await)
+ .await?;
let shard_manager = client.shard_manager.clone();
+
ctrlc::set_handler(move || {
info!("shutting down");
- shard_manager.lock().shutdown_all();
+
+ let shard_manager = shard_manager.clone();
+ tokio::task::spawn(async move {
+ shard_manager.shutdown_all().await;
+ });
})
.expect("unable to create SIGINT/SIGTERM handlers");
- client.start()
+ client.start().await?;
+
+ Ok(())
}