mirror of
https://github.com/Noratrieb/killjoy-turret.git
synced 2026-01-14 14:45:01 +01:00
autorole start
This commit is contained in:
parent
03087702af
commit
120521e68b
6 changed files with 127 additions and 26 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
|
@ -1,3 +1,4 @@
|
||||||
/target
|
/target
|
||||||
.idea
|
.idea
|
||||||
*.iml
|
*.iml
|
||||||
|
token
|
||||||
28
Cargo.lock
generated
28
Cargo.lock
generated
|
|
@ -6,6 +6,15 @@ version = "1.0.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
|
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "aho-corasick"
|
||||||
|
version = "0.7.18"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1e37cfd5e7657ada45f742d6e99ca5788580b5c529dc78faf11ece6dc702656f"
|
||||||
|
dependencies = [
|
||||||
|
"memchr",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async-trait"
|
name = "async-trait"
|
||||||
version = "0.1.50"
|
version = "0.1.50"
|
||||||
|
|
@ -456,6 +465,8 @@ dependencies = [
|
||||||
name = "killjoy_turret"
|
name = "killjoy_turret"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"lazy_static",
|
||||||
|
"regex",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"serenity",
|
"serenity",
|
||||||
|
|
@ -708,6 +719,23 @@ dependencies = [
|
||||||
"rand_core",
|
"rand_core",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "regex"
|
||||||
|
version = "1.5.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461"
|
||||||
|
dependencies = [
|
||||||
|
"aho-corasick",
|
||||||
|
"memchr",
|
||||||
|
"regex-syntax",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "regex-syntax"
|
||||||
|
version = "0.6.25"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "reqwest"
|
name = "reqwest"
|
||||||
version = "0.11.3"
|
version = "0.11.3"
|
||||||
|
|
|
||||||
|
|
@ -10,9 +10,10 @@ edition = "2018"
|
||||||
tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] }
|
tokio = { version = "1.0", features = ["macros", "rt-multi-thread"] }
|
||||||
serde = { version = "1.0", features = ["derive"] }
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
serde_json = "1.0"
|
serde_json = "1.0"
|
||||||
|
regex = "1.5.4"
|
||||||
|
lazy_static = "1.4.0"
|
||||||
|
|
||||||
[dependencies.serenity]
|
[dependencies.serenity]
|
||||||
version = "0.10.7"
|
version = "0.10.7"
|
||||||
default-features = false
|
default-features = false
|
||||||
features = ["client", "gateway", "rustls_backend", "model", "framework", "standard_framework", "cache", "http", "utils"]
|
features = ["client", "gateway", "rustls_backend", "model", "framework", "standard_framework", "cache", "http", "utils", "collector"]
|
||||||
|
|
@ -1,10 +1,96 @@
|
||||||
use serenity::framework::standard::Args;
|
use serde::{Deserialize, Serialize};
|
||||||
|
use serenity::framework::standard::{
|
||||||
|
macros::{command, group},
|
||||||
|
Args, CommandResult,
|
||||||
|
};
|
||||||
use serenity::model::prelude::*;
|
use serenity::model::prelude::*;
|
||||||
use serenity::prelude::*;
|
use serenity::prelude::*;
|
||||||
|
use serenity::{
|
||||||
|
async_trait,
|
||||||
|
collector::MessageCollectorBuilder,
|
||||||
|
framework::standard::{help_commands, CommandGroup, HelpOptions, StandardFramework},
|
||||||
|
futures::stream::StreamExt,
|
||||||
|
http::Http,
|
||||||
|
model::prelude::*,
|
||||||
|
prelude::*,
|
||||||
|
};
|
||||||
|
use std::collections::HashMap;
|
||||||
|
use std::time::Duration;
|
||||||
|
|
||||||
|
pub struct AutoRoleDataKey;
|
||||||
|
|
||||||
|
impl TypeMapKey for AutoRoleDataKey {
|
||||||
|
type Value = AutoRoleData;
|
||||||
|
}
|
||||||
|
|
||||||
#[group]
|
#[group]
|
||||||
|
#[commands(autorole)]
|
||||||
|
#[description = "Auto role related commands"]
|
||||||
struct AutoRole;
|
struct AutoRole;
|
||||||
|
|
||||||
#[command]
|
#[command]
|
||||||
#[desciption = "Add auto assign roles"]
|
#[description = "Add auto assign roles"]
|
||||||
async fn auto_role(ctx: &Context, msg: &Message, args: &Args) {}
|
#[usage = "sdakhnfj"]
|
||||||
|
async fn autorole(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
|
||||||
|
let http = &ctx.http;
|
||||||
|
let mut data = ctx.data.write().await;
|
||||||
|
let mut auto_roles = data.get_mut::<AutoRoleDataKey>();
|
||||||
|
|
||||||
|
msg.channel_id
|
||||||
|
.send_message(http, |m| {
|
||||||
|
m.embed(|e| {
|
||||||
|
e.title("Started auto role assignment.");
|
||||||
|
e.field(
|
||||||
|
"Enter an emote and the assigned role seperated by a space.",
|
||||||
|
"Write one message per role reaction.\n\n\
|
||||||
|
A non-matching message finishes the process. Cancel with 'cancel', or after 30 seconds timeout\n\n\
|
||||||
|
The emotes have to be from a server I'm in!",
|
||||||
|
false,
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.await?;
|
||||||
|
|
||||||
|
while let Some(answer) = &msg
|
||||||
|
.author
|
||||||
|
.await_reply(&ctx)
|
||||||
|
.timeout(Duration::from_secs(30))
|
||||||
|
.await
|
||||||
|
{
|
||||||
|
if let Some(emote) = answer.content.split(' ').next() {
|
||||||
|
lazy_static! {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
println!("should add emote: {}", emote);
|
||||||
|
answer.react(http, '☑').await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
pub struct AutoRoleData {
|
||||||
|
messages: Vec<HashMap<DEmote, DRole>>,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Default for AutoRoleData {
|
||||||
|
fn default() -> Self {
|
||||||
|
Self {
|
||||||
|
messages: Vec::default(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Eq, PartialEq, Hash)]
|
||||||
|
struct DEmote {
|
||||||
|
name: String,
|
||||||
|
id: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize, Eq, PartialEq)]
|
||||||
|
struct DRole {
|
||||||
|
name: String,
|
||||||
|
id: String,
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,5 @@
|
||||||
use std::collections::HashSet;
|
use std::collections::HashSet;
|
||||||
|
|
||||||
use lazy_static::lazy_static;
|
|
||||||
use rand::Rng;
|
|
||||||
use serenity::client::Context;
|
use serenity::client::Context;
|
||||||
use serenity::framework::standard::{
|
use serenity::framework::standard::{
|
||||||
help_commands,
|
help_commands,
|
||||||
|
|
|
||||||
23
src/main.rs
23
src/main.rs
|
|
@ -2,7 +2,6 @@ mod autorole;
|
||||||
mod commands;
|
mod commands;
|
||||||
mod general;
|
mod general;
|
||||||
|
|
||||||
use serde::{Serialize, Deserialize};
|
|
||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
use std::fs;
|
use std::fs;
|
||||||
|
|
||||||
|
|
@ -11,17 +10,8 @@ use serenity::framework::StandardFramework;
|
||||||
use serenity::http::Http;
|
use serenity::http::Http;
|
||||||
use serenity::model::id::{ChannelId, UserId};
|
use serenity::model::id::{ChannelId, UserId};
|
||||||
use serenity::{async_trait, model::gateway::Ready, prelude::*};
|
use serenity::{async_trait, model::gateway::Ready, prelude::*};
|
||||||
|
use crate::autorole::{AUTOROLE_GROUP, AutoRoleDataKey, AutoRoleData};
|
||||||
#[derive(Serialize, Deserialize)]
|
use crate::commands::MY_HELP;
|
||||||
struct AutoRoleData {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct AutoRoleDataKey;
|
|
||||||
|
|
||||||
impl TypeMapKey for AutoRoleDataKey {
|
|
||||||
type Value = AutoRoleData;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct Handler;
|
struct Handler;
|
||||||
|
|
||||||
|
|
@ -34,7 +24,7 @@ impl EventHandler for Handler {
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
let token = fs::read_to_string("bot_token").expect("Expected bot token in file 'bot_token'");
|
let token = fs::read_to_string("token").expect("Expected bot token in file 'bot_token'");
|
||||||
|
|
||||||
let http = Http::new_with_token(&token);
|
let http = Http::new_with_token(&token);
|
||||||
|
|
||||||
|
|
@ -58,11 +48,8 @@ async fn main() {
|
||||||
.delimiter(" ")
|
.delimiter(" ")
|
||||||
.owners(owners)
|
.owners(owners)
|
||||||
})
|
})
|
||||||
.normal_message(normal_message)
|
|
||||||
.help(&MY_HELP)
|
.help(&MY_HELP)
|
||||||
.group(&GENERAL_GROUP)
|
.group(&AUTOROLE_GROUP);
|
||||||
.group(&MEME_GROUP)
|
|
||||||
.group(&ADMIN_GROUP);
|
|
||||||
|
|
||||||
let mut client = Client::builder(&token)
|
let mut client = Client::builder(&token)
|
||||||
.event_handler(Handler)
|
.event_handler(Handler)
|
||||||
|
|
@ -72,7 +59,7 @@ async fn main() {
|
||||||
|
|
||||||
{
|
{
|
||||||
let mut data = client.data.write().await;
|
let mut data = client.data.write().await;
|
||||||
data.insert::<LastMessageInChannel>(HashMap::default());
|
data.insert::<AutoRoleDataKey>(AutoRoleData::default());
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Err(why) = client.start().await {
|
if let Err(why) = client.start().await {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue