Added emoji 8ball

This commit is contained in:
Joey Hines 2024-06-28 17:07:17 -06:00
parent 997e97d335
commit 59e33a32a9
Signed by: joeyahines
GPG Key ID: 995E531F7A569DDB
6 changed files with 101 additions and 23 deletions

10
Cargo.lock generated
View File

@ -766,6 +766,15 @@ version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
[[package]]
name = "emojis"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9f619a926616ae7149a0d82610b051134a0d6c4ae2962d990c06c847a445c5d9"
dependencies = [
"phf",
]
[[package]]
name = "encoding_rs"
version = "0.8.33"
@ -874,6 +883,7 @@ dependencies = [
"chrono",
"chrono-tz",
"config",
"emojis",
"j_db",
"json",
"log",

View File

@ -30,6 +30,7 @@ serde_json = "1.0.113"
raas_types = { version = "0.0.9", registry = "jojo-dev"}
prost = "0.12.6"
tonic = "0.11.0"
emojis = "0.6.2"
[dependencies.serenity]
version = "0.12.0"

View File

@ -1,8 +1,9 @@
use crate::album_manager::AlbumManager;
use crate::error::Error;
use crate::migrations::{CURRENT_DB_VERSION, do_migration};
use crate::migrations::{do_migration, CURRENT_DB_VERSION};
use config::{Config, File};
use j_db::database::Database;
use j_db::metadata::DBMetadata;
use reqwest::Url;
use serde::{Deserialize, Serialize};
use serenity::model::id::ChannelId;
@ -11,7 +12,6 @@ use serenity::prelude::TypeMapKey;
use std::net::SocketAddr;
use std::path::{Path, PathBuf};
use std::sync::Arc;
use j_db::metadata::DBMetadata;
use structopt::StructOpt;
use tokio::sync::mpsc::{channel, Receiver, Sender};
use tokio::sync::Mutex;
@ -90,7 +90,8 @@ impl GlobalData {
db.insert::<j_db::metadata::DBMetadata>(DBMetadata {
id: None,
version: CURRENT_DB_VERSION,
}).unwrap();
})
.unwrap();
}
do_migration(&db);

View File

@ -3,6 +3,13 @@ use crate::error::Error;
use crate::models::insult_compliment::{RandomResponseTemplate, ResponseType};
use crate::models::random::{Random, RandomConfig};
use crate::{command, group, GlobalData, BAD_APPLE};
use chrono::Utc;
use emojis::Group;
use raas_types::raas::bot::roll::{roll_response, Roll, RollCmd};
use raas_types::raas::resp::response::Resp;
use raas_types::raas::service::raas_client::RaasClient;
use rand::prelude::SliceRandom;
use rand::thread_rng;
use reqwest::Client;
use serde::{Deserialize, Serialize};
use serenity::all::{CreateAttachment, CreateMessage};
@ -14,13 +21,18 @@ use serenity::model::channel::Message;
use serenity::utils::MessageBuilder;
use std::collections::HashMap;
use std::time::Duration;
use chrono::Utc;
use raas_types::raas::bot::roll::{Roll, roll_response, RollCmd};
use raas_types::raas::resp::response::Resp;
use raas_types::raas::service::raas_client::RaasClient;
#[group]
#[commands(dad_joke, roll, real_roll, bad_apple, insult, add_random, list_random)]
#[commands(
dad_joke,
roll,
real_roll,
bad_apple,
insult,
add_random,
list_random,
emoji_8ball
)]
pub struct Joke;
#[derive(Clone, Serialize, Deserialize)]
@ -267,12 +279,16 @@ async fn real_roll(ctx: &Context, msg: &Message, _args: Args) -> CommandResult {
let grpc_request = tonic::Request::new(roll_request);
msg.reply(&ctx.http, "Sent roll request, please hang on!").await?;
msg.reply(&ctx.http, "Sent roll request, please hang on!")
.await?;
let response = client.send_request(grpc_request).await?;
let raas_response = response.into_inner();
println!("Got resp: {} @ {}",raas_response.id, raas_response.timestamp);
println!(
"Got resp: {} @ {}",
raas_response.id, raas_response.timestamp
);
match raas_response.resp.unwrap() {
Resp::RollResp(roll_resp) => {
@ -288,7 +304,14 @@ async fn real_roll(ctx: &Context, msg: &Message, _args: Args) -> CommandResult {
}
}
Resp::Error(err) => {
msg.reply(&ctx.http, format!("My real flesh encountered an error. Get Dad to fix it. `{}`", err.msg)).await?;
msg.reply(
&ctx.http,
format!(
"My real flesh encountered an error. Get Dad to fix it. `{}`",
err.msg
),
)
.await?;
}
}
@ -365,3 +388,45 @@ async fn insult(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
Ok(())
}
fn get_unicode_emojis() -> Vec<String> {
let groups = [
Group::SmileysAndEmotion,
Group::Activities,
Group::Objects,
Group::AnimalsAndNature,
Group::PeopleAndBody,
Group::FoodAndDrink,
];
let mut emoji = Vec::new();
for group in groups {
emoji.extend(group.emojis())
}
emoji.iter().map(|e| e.to_string()).collect()
}
#[command]
#[aliases("🎱")]
async fn emoji_8ball(ctx: &Context, msg: &Message) -> CommandResult {
let data = ctx.data.read().await;
let global = data.get::<GlobalData>().unwrap();
let guild_emojis = global.cfg.guild_id.emojis(&ctx.http).await?;
let mut emojis: Vec<String> = guild_emojis.iter().map(|e| e.to_string()).collect();
let mut unicode_emojis = get_unicode_emojis();
emojis.append(&mut unicode_emojis);
let emoji_msg: Vec<String> = emojis
.choose_multiple(&mut thread_rng(), 3)
.cloned()
.collect();
msg.reply(&ctx.http, emoji_msg.join("")).await?;
Ok(())
}

View File

@ -342,14 +342,15 @@ async fn use_item(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
.await?;
}
ItemType::TacticalNuke => {
let mut users: Vec<User> = global_data.db.filter(|_, _user: &User| {
true
}
)?.collect();
let mut users: Vec<User> = global_data.db.filter(|_, _user: &User| true)?.collect();
for user in &mut users {
for item in &mut user.inventory.inventory {
if item.item_type == ItemType::KillGun || item.item_type == ItemType::CancelRay || item.item_type == ItemType::CancelInsurance || item.item_type == ItemType::Helmet {
if item.item_type == ItemType::KillGun
|| item.item_type == ItemType::CancelRay
|| item.item_type == ItemType::CancelInsurance
|| item.item_type == ItemType::Helmet
{
item.quantity = 0;
}
}

View File

@ -106,7 +106,7 @@ impl Display for ItemType {
ItemType::KillGun => "Kill Gun".to_string(),
ItemType::Helmet => "Helmet".to_string(),
ItemType::CancelRay => "Cancel Ray".to_string(),
ItemType::TacticalNuke => "Tactical Nuke".to_string()
ItemType::TacticalNuke => "Tactical Nuke".to_string(),
};
write!(f, "{}", name)