reaction listener

This commit is contained in:
nora 2021-06-21 13:49:11 +02:00
parent c41c3ff851
commit 51ecb30f61
2 changed files with 34 additions and 6 deletions

View file

@ -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>,

View file

@ -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);
}