This commit is contained in:
Oupson 2020-08-24 20:02:08 +02:00
parent fb51bbfffd
commit b9627ba69b
1 changed files with 52 additions and 2 deletions

View File

@ -19,7 +19,7 @@ impl TypeMapKey for BulletsContainer {
#[group] #[group]
#[default_command(shot)] #[default_command(shot)]
#[prefix("roulette")] #[prefix("roulette")]
#[commands(reload, shot, check)] #[commands(reload, shot, check, kick)]
struct Roulette; struct Roulette;
#[command] #[command]
@ -29,7 +29,7 @@ async fn shot(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
let _message = args.message().trim_end(); let _message = args.message().trim_end();
if _message == "shot" || _message == "" { if _message == "shot" || _message == "" {
if let Err(e) = _shot(ctx, msg).await { if let Err(e) = _shot(ctx, msg).await {
eprintln!("{}", e); eprintln!("Error in shot : {:?}", e);
} }
} else if let Err(e) = api::send_reply( } else if let Err(e) = api::send_reply(
ctx, ctx,
@ -99,6 +99,7 @@ async fn check(ctx: &Context, msg: &Message) -> CommandResult {
.entry(msg.author.id.0) .entry(msg.author.id.0)
.or_insert((5, rand::thread_rng().gen_range(0, 6))); .or_insert((5, rand::thread_rng().gen_range(0, 6)));
msg.channel_id.say(ctx, format!("Because you are a little shit, you open your barrel and you see that the bullet was at the {} position", bullet_to_str(bullets.1 + 1))).await?; msg.channel_id.say(ctx, format!("Because you are a little shit, you open your barrel and you see that the bullet was at the {} position", bullet_to_str(bullets.1 + 1))).await?;
debugln!("Bullets Map : {:?}", bullets_map);
Ok(()) Ok(())
} }
@ -113,3 +114,52 @@ fn bullet_to_str<'m>(nbr: u8) -> &'m str {
_ => unimplemented!(), _ => unimplemented!(),
} }
} }
// TODO ALLOW ADMINS TO DISABLE THAT
#[command]
#[description = "DO IT"]
#[only_in(guilds)]
async fn kick(ctx: &Context, msg: &Message) -> CommandResult {
if msg.author.bot {
if let Err(e) =
api::send_reply(ctx, msg, "Error, this command cannot be used by a bot").await
{
eprintln!("Error in kick : {:?}", e);
}
} else if let Err(e) = _kick(ctx, msg).await {
eprintln!("Error in kick : {:?}", e);
}
Ok(())
}
async fn _kick(ctx: &Context, msg: &Message) -> commands::Result<()> {
let mut data = ctx.data.write().await;
let bullets_map = data
.get_mut::<BulletsContainer>()
.expect("Expected CommandCounter in TypeMap.");
let bullets = bullets_map
.entry(msg.author.id.0)
.or_insert((5, rand::thread_rng().gen_range(0, 6)));
if bullets.0 == bullets.1 {
api::send_reply(ctx, &msg, "💥").await?;
*bullets = (5, rand::thread_rng().gen_range(0, 6));
if let Some(guild_id) = &msg.guild_id {
guild_id
.member(&ctx.http, &msg.author)
.await?
.kick_with_reason(&ctx.http, "You loose at the roulette")
.await?;
}
} else {
*bullets = (bullets.0 - 1, bullets.1);
api::send_reply(
&ctx,
&msg,
format!("Click ! bullets remaining : {}", bullets.0 + 1),
)
.await?;
}
debugln!("Bullets Map : {:?}", bullets_map);
Ok(())
}