Made checking nft value easier

This commit is contained in:
Joey Hines 2024-03-31 12:35:20 -06:00
parent 93975f463c
commit 747aa81d62
Signed by: joeyahines
GPG Key ID: 995E531F7A569DDB
3 changed files with 24 additions and 15 deletions

View File

@ -65,7 +65,7 @@ pub async fn create_motivation_image(motivation: Motivation) -> Result<Vec<u8>,
text_wand.set_font_size(0.07 * (wand.get_image_width() as f64)); text_wand.set_font_size(0.07 * (wand.get_image_width() as f64));
text_wand.set_text_alignment(magick_rust::bindings::AlignType_CenterAlign); text_wand.set_text_alignment(magick_rust::bindings::AlignType_CenterAlign);
wand.annotate_image(&text_wand, text_pos_x, text_pos_y, 0.0, &text)?; wand.annotate_image(&text_wand, text_pos_x, text_pos_y, 0.0, &text)?;
Ok(wand.write_image_blob("png")?) Ok(wand.write_image_blob("jpg")?)
} }
#[command] #[command]
@ -97,7 +97,7 @@ async fn motivation(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
.content("Today's motivation") .content("Today's motivation")
.add_file(CreateAttachment::bytes( .add_file(CreateAttachment::bytes(
Cow::from(image), Cow::from(image),
"motivate.png".to_string(), "motivate.jpg".to_string(),
)), )),
) )
.await?; .await?;

View File

@ -1,7 +1,7 @@
use crate::discord::get_role; use crate::discord::get_role;
use crate::discord::motivate::create_motivation_image; use crate::discord::motivate::create_motivation_image;
use crate::error::Error; use crate::error::Error;
use crate::inventory::{InventoryError, ItemData, ItemType, Operation}; use crate::inventory::{nft_value, InventoryError, ItemData, ItemType, Operation};
use crate::models::motivation::MotivationConfig; use crate::models::motivation::MotivationConfig;
use crate::models::task::{Task, TaskType}; use crate::models::task::{Task, TaskType};
use crate::user::{User, UserError}; use crate::user::{User, UserError};
@ -251,7 +251,7 @@ async fn use_item(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
} }
ItemType::Nft => { ItemType::Nft => {
if let Some(ItemData::Nft(path)) = item_data { if let Some(ItemData::Nft(path)) = item_data {
let file: tokio::fs::File = match tokio::fs::File::open(path).await { let file: tokio::fs::File = match tokio::fs::File::open(&path).await {
Ok(f) => f, Ok(f) => f,
Err(_) => { Err(_) => {
msg.reply(&ctx.http, "Sorry this was a pump and dump") msg.reply(&ctx.http, "Sorry this was a pump and dump")
@ -259,13 +259,18 @@ async fn use_item(ctx: &Context, msg: &Message, args: Args) -> CommandResult {
return Ok(()); return Ok(());
} }
}; };
let value = nft_value(&path);
msg.channel_id msg.channel_id
.send_message( .send_message(
&ctx.http, &ctx.http,
CreateMessage::new() CreateMessage::new()
.content("Your NFT my good friend:") .content(format!(
"Your NFT my good friend. It's worth **{} FC**!",
value
))
.add_file( .add_file(
CreateAttachment::file(&file, "nft.png".to_string()) CreateAttachment::file(&file, "nft.jpg".to_string())
.await .await
.unwrap(), .unwrap(),
), ),
@ -477,7 +482,7 @@ pub async fn restock_shop(ctx: &Context, global_data: &GlobalData) -> Result<(),
hasher.write(&nft); hasher.write(&nft);
let nft_hash = hasher.finish(); let nft_hash = hasher.finish();
let path = global_data.cfg.nft_path.join(format!("{}.png", nft_hash)); let path = global_data.cfg.nft_path.join(format!("{}.jpg", nft_hash));
if path.exists() { if path.exists() {
continue; continue;

View File

@ -108,6 +108,17 @@ impl Display for ItemType {
} }
} }
pub fn nft_value(s: &String) -> i64 {
let mut hasher = DefaultHasher::new();
s.hash(&mut hasher);
let hash = hasher.finish();
let per_value = (hash as f64) / (u64::MAX as f64);
((2000.0 * per_value) as i64) - 500
}
#[derive(Debug, Clone, Serialize, Deserialize)] #[derive(Debug, Clone, Serialize, Deserialize)]
pub struct InventorySlot { pub struct InventorySlot {
pub quantity: i64, pub quantity: i64,
@ -132,14 +143,7 @@ impl InventorySlot {
match self.item_type { match self.item_type {
ItemType::Nft => { ItemType::Nft => {
if let Some(ItemData::Nft(s)) = &self.item_data { if let Some(ItemData::Nft(s)) = &self.item_data {
let mut hasher = DefaultHasher::new(); nft_value(s)
s.hash(&mut hasher);
let hash = hasher.finish();
let per_value = (hash as f64) / (u64::MAX as f64);
((2000.0 * per_value) as i64) - 500
} else { } else {
0 0
} }