mirror of
https://github.com/Noratrieb/killjoy-turret.git
synced 2026-01-14 14:45:01 +01:00
reaction listener
This commit is contained in:
parent
c41c3ff851
commit
51ecb30f61
2 changed files with 34 additions and 6 deletions
|
|
@ -1,8 +1,10 @@
|
|||
use crate::Handler;
|
||||
use serde::{Deserialize, Serialize};
|
||||
use serenity::framework::standard::{
|
||||
macros::{command, group},
|
||||
Args, CommandResult,
|
||||
};
|
||||
use serenity::model::channel::ReactionType::Custom;
|
||||
use serenity::model::prelude::*;
|
||||
use serenity::prelude::*;
|
||||
use std::collections::HashMap;
|
||||
|
|
@ -124,6 +126,26 @@ async fn autorole(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult
|
|||
Ok(())
|
||||
}
|
||||
|
||||
// listener
|
||||
|
||||
pub async fn handle_reaction(ctx: &Context, reaction: &Reaction) {
|
||||
let data = ctx.data.read().await;
|
||||
let mut auto_roles = data.get::<AutoRoleDataKey>().unwrap();
|
||||
if let Custom { animated, id, name } = &reaction.emoji {
|
||||
if let Some(role) = auto_roles.messages.get(&(*id, reaction.message_id)) {
|
||||
match &reaction.member {
|
||||
None => {
|
||||
println!("Missing member on reaction");
|
||||
// remove reaction
|
||||
}
|
||||
Some(member) => {
|
||||
// add role
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Serialize, Deserialize)]
|
||||
pub struct AutoRoleData {
|
||||
messages: HashMap<(EmojiId, MessageId), RoleId>,
|
||||
|
|
|
|||
18
src/main.rs
18
src/main.rs
|
|
@ -1,22 +1,28 @@
|
|||
mod autorole;
|
||||
mod commands;
|
||||
mod general;
|
||||
|
||||
use std::collections::HashSet;
|
||||
use std::fs;
|
||||
|
||||
use crate::autorole::{AutoRoleData, AutoRoleDataKey, AUTOROLE_GROUP};
|
||||
use crate::commands::MY_HELP;
|
||||
use serenity::client::Context;
|
||||
use serenity::framework::StandardFramework;
|
||||
use serenity::http::Http;
|
||||
use serenity::model::id::UserId;
|
||||
use serenity::model::prelude::*;
|
||||
use serenity::{async_trait, model::gateway::Ready, prelude::*};
|
||||
|
||||
use crate::autorole::{AutoRoleData, AutoRoleDataKey, AUTOROLE_GROUP};
|
||||
use crate::commands::MY_HELP;
|
||||
|
||||
mod autorole;
|
||||
mod commands;
|
||||
mod general;
|
||||
|
||||
struct Handler;
|
||||
|
||||
#[async_trait]
|
||||
impl EventHandler for Handler {
|
||||
async fn reaction_add(&self, ctx: Context, add_reaction: Reaction) {
|
||||
autorole::handle_reaction(&ctx, &add_reaction)
|
||||
}
|
||||
|
||||
async fn ready(&self, _: Context, ready: Ready) {
|
||||
println!("{} is connected!", ready.user.name);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue