Added command to check for reputation

main
David 2023-01-08 10:20:44 +01:00
parent 5921a6aa5f
commit 425b9f81b5
1 changed files with 28 additions and 9 deletions

View File

@ -30,7 +30,7 @@ pub mod bot {
swear_list: Vec<String>,
database_handle: sled::Db,
spam_info: SpamInfo,
members_list: Vec<RoomMember>
members_list: Vec<String>
}
impl Bot {
@ -92,12 +92,15 @@ pub mod bot {
// Syncs members list of the joined room
joined_room.sync_members().await.unwrap();
let members_list = client
let members_list: Vec<String> = client
.get_joined_room(joined_room.room_id())
.unwrap()
.joined_members()
.await
.expect("Cannot get members");
.unwrap()
.iter()
.map(|x| x.user_id().as_str().to_string())
.collect();
let path = "members_database";
let db = sled::open(path).unwrap();
@ -107,7 +110,7 @@ pub mod bot {
let bytes = convert_to_bytes_sled(timestamp, default_reputation);
for member in members_list.clone() {
dbg!(
db.insert(member.user_id().as_str(), &bytes).unwrap()
db.insert(member.as_str(), &bytes).unwrap()
);
};
@ -137,8 +140,18 @@ pub mod bot {
// Standard text message
if let Some(text) = get_message_event_text(&event) {
let member = room.get_member(&event.sender).await.unwrap().unwrap();
let member_user_id = member.user_id().as_str().to_string();
let id = &event.event_id;
if !bot.members_list.contains(&member_user_id) {
bot.members_list.push(member_user_id.clone());
let default_reputation: i64 = 0;
let utc: DateTime<Utc> = Utc::now();
let timestamp: i64 = utc.timestamp();
let bytes = convert_to_bytes_sled(timestamp, default_reputation);
dbg!(bot.database_handle.insert(member_user_id.as_str(), &bytes).unwrap());
};
if bot.info.allow_swear && detect_swear_from_message(&bot.swear_list, &text) {
bot.delete_message_from_room(id, "Swearing").await;
bot.update_reputation_for_member(&member, -1).await.expect("Failed to subtract reputation from member");
@ -175,8 +188,7 @@ pub mod bot {
}
fn check_if_member_exists(&self, user_id: &str) -> bool {
let user_id_list: Vec<&str> = self.members_list.iter().map(|x| x.user_id().as_str()).collect();
if user_id_list.contains(&user_id) {
if self.members_list.contains(&user_id.to_string()) {
true
}
else {
@ -252,7 +264,7 @@ pub mod bot {
}
async fn detect_command(&self, message: &str) {
async fn detect_command(&self, event: &OriginalSyncRoomMessageEvent, message: &str) {
let words: Vec<&str> = message.split_whitespace().collect();
if words.first().unwrap().deref() == "!modbot" {
if words[1] == "award" {
@ -280,11 +292,18 @@ pub mod bot {
}
}
},
Err(_) => {
self.send_message("Cannot find user. Check if the User ID provided is correct").await;
}
}
}
};
};
if words[1] == "reputation" {
let author = self.joined_room.get_member(&event.sender).await.unwrap().unwrap();
let user_data = dbg!(self.database_handle.get(author.user_id().as_str()).unwrap().unwrap());
let (_, reputation) = convert_from_bytes_sled(&user_data);
self.send_message(format!("Your current reputation is: {}", reputation).as_str()).await;
};
}
}