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 serde::{Deserialize, Serialize};
|
||||||
use serenity::framework::standard::{
|
use serenity::framework::standard::{
|
||||||
macros::{command, group},
|
macros::{command, group},
|
||||||
Args, CommandResult,
|
Args, CommandResult,
|
||||||
};
|
};
|
||||||
|
use serenity::model::channel::ReactionType::Custom;
|
||||||
use serenity::model::prelude::*;
|
use serenity::model::prelude::*;
|
||||||
use serenity::prelude::*;
|
use serenity::prelude::*;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
@ -124,6 +126,26 @@ async fn autorole(ctx: &Context, msg: &Message, mut args: Args) -> CommandResult
|
||||||
Ok(())
|
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)]
|
#[derive(Serialize, Deserialize)]
|
||||||
pub struct AutoRoleData {
|
pub struct AutoRoleData {
|
||||||
messages: HashMap<(EmojiId, MessageId), RoleId>,
|
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::collections::HashSet;
|
||||||
use std::fs;
|
use std::fs;
|
||||||
|
|
||||||
use crate::autorole::{AutoRoleData, AutoRoleDataKey, AUTOROLE_GROUP};
|
|
||||||
use crate::commands::MY_HELP;
|
|
||||||
use serenity::client::Context;
|
use serenity::client::Context;
|
||||||
use serenity::framework::StandardFramework;
|
use serenity::framework::StandardFramework;
|
||||||
use serenity::http::Http;
|
use serenity::http::Http;
|
||||||
use serenity::model::id::UserId;
|
use serenity::model::id::UserId;
|
||||||
|
use serenity::model::prelude::*;
|
||||||
use serenity::{async_trait, model::gateway::Ready, 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;
|
struct Handler;
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl EventHandler for Handler {
|
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) {
|
async fn ready(&self, _: Context, ready: Ready) {
|
||||||
println!("{} is connected!", ready.user.name);
|
println!("{} is connected!", ready.user.name);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue