This commit is contained in:
Natsu Kagami 2019-11-03 16:47:23 -05:00
parent d36323c12c
commit 4f6a0a2316
2 changed files with 90 additions and 44 deletions

View file

@ -0,0 +1,90 @@
use serenity::prelude::*;
use serenity::{
framework::standard::{
macros::{command, group},
Args, CommandResult,
},
model::{channel::Message, id::UserId},
};
use std::{thread::sleep, time::Duration};
group!({
name: "admin",
options: {
only_in: "guilds",
prefixes: ["admin", "a"],
description: "Administrative commands for the server.",
},
commands: [clean, ban, kick],
});
#[command]
#[aliases("cleanall")]
#[required_permissions(MANAGE_MESSAGES)]
#[description = "Clean at most X latest messages from the current channel. Defaults to 10."]
#[usage = "clean 50"]
#[min_args(0)]
#[max_args(1)]
fn clean(ctx: &mut Context, msg: &Message, mut args: Args) -> CommandResult {
let limit = args.single().unwrap_or(10);
let messages = msg
.channel_id
.messages(&ctx.http, |b| b.before(msg.id).limit(limit))?;
msg.channel_id.delete_messages(&ctx.http, messages.iter())?;
msg.react(&ctx, "🌋")?;
sleep(Duration::from_secs(2));
msg.delete(&ctx)?;
Ok(())
}
#[command]
#[required_permissions(ADMINISTRATOR)]
#[description = "Ban an user with a certain reason."]
#[usage = "ban user#1234 spam"]
#[min_args(1)]
#[max_args(2)]
fn ban(ctx: &mut Context, msg: &Message, mut args: Args) -> CommandResult {
let user = args.single::<UserId>()?.to_user(&ctx)?;
let reason = args
.remains()
.map(|v| format!("`{}`", v))
.unwrap_or("no provided reason".to_owned());
msg.reply(
&ctx,
format!("🔨 Banning user {} for reason `{}`.", user.tag(), reason),
)?;
msg.guild_id
.ok_or("Can't get guild from message?")? // we had a contract
.ban(&ctx.http, user, &reason)?;
Ok(())
}
#[command]
#[required_permissions(ADMINISTRATOR)]
#[description = "Kick an user with a certain reason."]
#[usage = "kick user#1234 spam"]
#[min_args(1)]
#[max_args(2)]
fn kick(ctx: &mut Context, msg: &Message, mut args: Args) -> CommandResult {
let user = args.single::<UserId>()?.to_user(&ctx)?;
let reason = args
.remains()
.map(|v| format!("`{}`", v))
.unwrap_or("no provided reason".to_owned());
msg.reply(
&ctx,
format!("🔫 Kicking user {} for {}.", user.tag(), reason),
)?;
msg.guild_id
.ok_or("Can't get guild from message?")? // we had a contract
.ban(&ctx.http, user, &reason)?;
Ok(())
}

View file

@ -1,44 +0,0 @@
use serenity::prelude::*;
use serenity::{
framework::standard::{
macros::{command, group},
Args, CommandResult,
},
model::channel::Message,
};
use std::{thread::sleep, time::Duration};
group!({
name: "admin",
options: {
only_in: "guilds",
prefixes: ["admin", "a"],
description: "Administrative commands for the server.",
},
commands: [clean, ban],
});
#[command]
#[aliases("cleanall")]
#[required_permissions(MANAGE_MESSAGES)]
#[description = "Clean at most X latest messages from the current channel. Defaults to 10."]
#[usage = "clean 50"]
fn clean(ctx: &mut Context, msg: &Message, mut args: Args) -> CommandResult {
let limit = args.single().unwrap_or(10);
let messages = msg
.channel_id
.messages(&ctx.http, |b| b.before(msg.id).limit(limit))?;
msg.channel_id.delete_messages(&ctx.http, messages.iter())?;
msg.react(&ctx, "🌋")?;
sleep(Duration::from_secs(2));
msg.delete(&ctx)?;
Ok(())
}
#[command]
#[required_permissions(ADMINISTRATOR)]
#[description = "Ban an user with a certain reason."]
#[usage = "ban user#1234 spam"]
fn ban(ctx: &mut Context, msg: &Message, mut args: Args) -> CommandResult {}