2023-08-24 09:27:15 +00:00
|
|
|
use poise::serenity_prelude::Activity;
|
|
|
|
|
use crate::{ManifoldContext, ManifoldData, ManifoldResult};
|
|
|
|
|
use crate::error::ManifoldError;
|
|
|
|
|
|
|
|
|
|
#[poise::command(slash_command, prefix_command, owners_only)]
|
|
|
|
|
async fn dump_config(ctx: ManifoldContext<'_>) -> ManifoldResult<()> {
|
|
|
|
|
let config = &ctx.data().bot_config;
|
|
|
|
|
|
|
|
|
|
ctx.say(format!("Config dump; {:?}", config.config)).await?;
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[poise::command(slash_command, prefix_command, owners_only)]
|
|
|
|
|
async fn get_environment(ctx: ManifoldContext<'_>) -> ManifoldResult<()> {
|
|
|
|
|
let environment = ctx.data().bot_config.get_environment();
|
|
|
|
|
|
|
|
|
|
ctx.say(format!("Currently running under the {} environment", environment)).await?;
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[poise::command(slash_command, prefix_command, owners_only)]
|
|
|
|
|
async fn get_config(ctx: ManifoldContext<'_>, #[description="Config key"] key: String) -> ManifoldResult<()> {
|
|
|
|
|
let config = &ctx.data().bot_config;
|
|
|
|
|
|
|
|
|
|
let value = match config.get_value(&key) {
|
|
|
|
|
Ok(v) => v.clone(),
|
|
|
|
|
Err(_) => "not found, sorry!".to_string()
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
ctx.say(format!("Value for key {} was {}", &key, &value)).await?;
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[poise::command(slash_command, prefix_command, owners_only)]
|
|
|
|
|
async fn register_commands(ctx: ManifoldContext<'_>) -> ManifoldResult<()> {
|
|
|
|
|
poise::builtins::register_application_commands_buttons(ctx).await?;
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#[poise::command(slash_command, prefix_command, track_edits, aliases("sa"), required_permissions = "MODERATE_MEMBERS")]
|
|
|
|
|
async fn set_activity(ctx: ManifoldContext<'_>, #[rest] #[description="Who to watch"] target: String) -> ManifoldResult<()> {
|
|
|
|
|
ctx.serenity_context().set_activity(Activity::watching(&target)).await;
|
|
|
|
|
|
|
|
|
|
ctx.say(format!("Okay, I'll start watching {}", target)).await?;
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
2023-08-24 22:19:48 +00:00
|
|
|
#[poise::command(slash_command, prefix_command, owners_only)]
|
|
|
|
|
async fn save_world(ctx: ManifoldContext<'_>) -> ManifoldResult<()> {
|
|
|
|
|
let my_message = ctx.send(|f| f.content("Save call received, saving the world...").reply(true)).await?;
|
|
|
|
|
|
|
|
|
|
let mut user_count = 0;
|
|
|
|
|
|
|
|
|
|
let db = &ctx.data().database;
|
|
|
|
|
let userinfo = ctx.data().user_info.lock().await;
|
|
|
|
|
for user in userinfo.iter() {
|
|
|
|
|
debug!("Saving user {:?}", user.0);
|
|
|
|
|
match user.1.insert(db) {
|
|
|
|
|
Ok(_) => debug!("User {:?} inserted successfully", user.0),
|
|
|
|
|
Err(e) => {
|
|
|
|
|
debug!("User {:?} was not inserted: {:?}, attempting to save instead", user.1, e);
|
|
|
|
|
match user.1.save(db) {
|
|
|
|
|
Ok(_) => debug!("User {:?} saved successfully, user is saved in database.", user.0),
|
|
|
|
|
Err(e) => debug!("User {:?} could not be saved: {:?}", user.1, e),
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
user_count = userinfo.len();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
my_message.edit(ctx, |f| f.content(format!("Save call complete; Saved {} users.", user_count))).await?;
|
|
|
|
|
|
|
|
|
|
Ok(())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
pub fn commands() -> [poise::Command<ManifoldData, ManifoldError>; 6] {
|
|
|
|
|
[dump_config(), get_environment(), get_config(), register_commands(), set_activity(), save_world()]
|
2023-08-24 09:27:15 +00:00
|
|
|
}
|