Add war feed command
This commit is contained in:
parent
feda6d465b
commit
dd020543de
2
Cargo.lock
generated
2
Cargo.lock
generated
@ -1100,7 +1100,7 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "wynnrobot"
|
||||
version = "0.9.1"
|
||||
version = "0.9.2"
|
||||
dependencies = [
|
||||
"diesel 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"reqwest 0.8.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -0,0 +1 @@
|
||||
DROP TABLE warfeedlisteners
|
@ -0,0 +1,3 @@
|
||||
CREATE TABLE warfeedlisteners (
|
||||
id BIGINT PRIMARY KEY
|
||||
)
|
103
src/main.rs
103
src/main.rs
@ -42,14 +42,18 @@ impl EventHandler for Handler {
|
||||
wc_status(msg);
|
||||
} else if msg.content.starts_with("wc!player ") {
|
||||
wc_player(msg);
|
||||
} else if msg.content.starts_with("wc!livefeed") {
|
||||
} else if msg.content == "wc!livefeed" {
|
||||
wc_livefeed(msg);
|
||||
} else if msg.content.starts_with("wc!unlivefeed") {
|
||||
} else if msg.content == "wc!unlivefeed" {
|
||||
wc_unlivefeed(msg);
|
||||
} else if msg.content == "wc!info" || msg.content == "wc!help" || msg.content == "wc!" {
|
||||
wc_info(msg);
|
||||
} else if msg.content.starts_with("wc!crop ") {
|
||||
wc_crop(msg);
|
||||
} else if msg.content == "wc!warfeed" {
|
||||
wc_warfeed(msg);
|
||||
} else if msg.content == "wc!unwarfeed" {
|
||||
wc_unwarfeed(msg);
|
||||
}
|
||||
}
|
||||
|
||||
@ -223,7 +227,7 @@ fn wc_livefeed(msg: Message) {
|
||||
id: msg.channel_id.0 as i64
|
||||
})
|
||||
.execute(&connection)
|
||||
.expect("Error saving new post");
|
||||
.expect("Error saving new listener");
|
||||
|
||||
msg.channel_id.say("Success!").unwrap();
|
||||
}
|
||||
@ -236,7 +240,36 @@ fn wc_unlivefeed(msg: Message) {
|
||||
let channel_id = msg.channel_id.0 as i64;
|
||||
diesel::delete(livefeedlisteners.filter(id.eq(channel_id)))
|
||||
.execute(&connection)
|
||||
.expect("Error deleting posts");
|
||||
.expect("Error deleting listener");
|
||||
|
||||
msg.channel_id.say("Success!").unwrap();
|
||||
}
|
||||
|
||||
fn wc_warfeed(msg: Message) {
|
||||
use models::WarfeedListener;
|
||||
use schema::warfeedlisteners;
|
||||
|
||||
let connection = establish_connection();
|
||||
|
||||
diesel::insert_into(warfeedlisteners::table)
|
||||
.values(&WarfeedListener {
|
||||
id: msg.channel_id.0 as i64
|
||||
})
|
||||
.execute(&connection)
|
||||
.expect("Error saving new listener");
|
||||
|
||||
msg.channel_id.say("Success!").unwrap();
|
||||
}
|
||||
|
||||
fn wc_unwarfeed(msg: Message) {
|
||||
use schema::warfeedlisteners::dsl::*;
|
||||
|
||||
let connection = establish_connection();
|
||||
|
||||
let channel_id = msg.channel_id.0 as i64;
|
||||
diesel::delete(warfeedlisteners.filter(id.eq(channel_id)))
|
||||
.execute(&connection)
|
||||
.expect("Error deleting listener");
|
||||
|
||||
msg.channel_id.say("Success!").unwrap();
|
||||
}
|
||||
@ -291,10 +324,63 @@ fn territory_livefeed() {
|
||||
}
|
||||
}
|
||||
|
||||
fn war_livefeed() {
|
||||
use models::WarfeedListener;
|
||||
use schema::warfeedlisteners::dsl::*;
|
||||
|
||||
let connection = establish_connection();
|
||||
|
||||
let resp = reqwest::get("https://api.wynncraft.com/public_api.php?action=onlinePlayers").unwrap();
|
||||
|
||||
let mut players: Value = serde_json::from_reader(resp).unwrap();
|
||||
|
||||
loop {
|
||||
thread::sleep_ms(50_000); // 50 seconds
|
||||
let resp = reqwest::get("https://api.wynncraft.com/public_api.php?action=onlinePlayers").unwrap();
|
||||
|
||||
let new_players: Value = serde_json::from_reader(resp).unwrap();
|
||||
|
||||
for key in new_players.as_object().unwrap().keys() {
|
||||
if key == "request" {
|
||||
continue;
|
||||
}
|
||||
if !key.starts_with("WAR") {
|
||||
continue;
|
||||
}
|
||||
let war_players = new_players.get(key).unwrap().as_array().unwrap();
|
||||
for player in war_players.into_iter() {
|
||||
let old_server = players.as_object().unwrap().iter().map(|(server, players)| {
|
||||
if server == "request" {
|
||||
(&**server, false)
|
||||
} else {
|
||||
(&**server, players.as_array().unwrap().contains(player))
|
||||
}
|
||||
}).filter(|&(_, is_in_it)| is_in_it).next().unwrap_or(("WC?", true)).0;
|
||||
if old_server != key {
|
||||
for listener in warfeedlisteners
|
||||
.load::<WarfeedListener>(&connection)
|
||||
.expect("Error loading listeners") {
|
||||
let _ = ChannelId(listener.id as u64).say(format!("{}: ~~{}~~ -> **{}**",
|
||||
player.as_str().unwrap(),
|
||||
old_server,
|
||||
key
|
||||
));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
players = new_players;
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
// Configure the client with your Discord bot token in the environment.
|
||||
let token = env::var("DISCORD_TOKEN").expect("DISCORD_TOKEN must be set");
|
||||
env::var("DATABASE_URL")
|
||||
.expect("DATABASE_URL must be set");
|
||||
|
||||
/*
|
||||
thread::Builder::new()
|
||||
.spawn(|| {
|
||||
loop {
|
||||
@ -302,6 +388,15 @@ fn main() {
|
||||
}
|
||||
})
|
||||
.unwrap();
|
||||
*/
|
||||
|
||||
thread::Builder::new()
|
||||
.spawn(|| {
|
||||
loop {
|
||||
println!("{:?}", panic::catch_unwind(|| war_livefeed()));
|
||||
}
|
||||
})
|
||||
.unwrap();
|
||||
|
||||
loop {
|
||||
// Create a new instance of the Client, logging in as a bot. This will
|
||||
|
@ -1,7 +1,13 @@
|
||||
use super::schema::livefeedlisteners;
|
||||
use super::schema::*;
|
||||
|
||||
#[derive(Queryable, Insertable)]
|
||||
#[table_name="livefeedlisteners"]
|
||||
pub struct LivefeedListener {
|
||||
pub id: i64
|
||||
}
|
||||
|
||||
#[derive(Queryable, Insertable)]
|
||||
#[table_name="warfeedlisteners"]
|
||||
pub struct WarfeedListener {
|
||||
pub id: i64
|
||||
}
|
@ -3,3 +3,14 @@ table! {
|
||||
id -> Int8,
|
||||
}
|
||||
}
|
||||
|
||||
table! {
|
||||
warfeedlisteners (id) {
|
||||
id -> Int8,
|
||||
}
|
||||
}
|
||||
|
||||
allow_tables_to_appear_in_same_query!(
|
||||
livefeedlisteners,
|
||||
warfeedlisteners,
|
||||
);
|
||||
|
Loading…
Reference in New Issue
Block a user