Create demo serenity/poise integration

This commit is contained in:
Elnu 2023-06-18 18:00:46 -07:00
parent 381c2b282d
commit 244e66cfa3
4 changed files with 425 additions and 6 deletions

View file

@ -2,7 +2,9 @@
extern crate rocket;
use chrono::{Duration, Utc};
use poise::serenity_prelude::{GatewayIntents, Client, Http};
use core::panic;
use std::ops::Deref;
use derive_more::From;
use reqwest::StatusCode;
use rocket::form::Form;
@ -10,7 +12,7 @@ use rocket::fs::{relative, FileServer};
use rocket::http::{Cookie, CookieJar};
use rocket::request::FromRequest;
use rocket::response::{content::RawHtml, Redirect};
use rocket::{request, Request};
use rocket::{request, Request, State};
use rocket_dyn_templates::{context, Template};
use sass_rocket_fairing::SassFairing;
use serde::ser::SerializeStruct;
@ -173,6 +175,20 @@ fn logout(cookies: &CookieJar<'_>, referer: Referer) -> Redirect {
Redirect::to(redirect_url)
}
#[get("/testing")]
async fn testing(cookies: &CookieJar<'_>, http: &State<Http>) -> String {
// Get logged in user's join date in 字ちゃん server
format!("{:?}", http.get_guild(814700630958276649).await
.expect("Failed to get testing guild")
.member(http.deref(), User::get(cookies).await
.expect("Failed to get logged in user data")
.expect("No logged in user")
.id
).await
.expect("Failed to fetch user in server")
.joined_at)
}
#[derive(Default, Deserialize)]
struct User {
#[serde(deserialize_with = "deserialize_id")]
@ -308,15 +324,20 @@ impl User {
}
#[launch]
fn rocket() -> _ {
async fn rocket() -> _ {
dotenv::dotenv().expect("Failed to load .env file");
let token = env::var("DISCORD_TOKEN").expect("Expected a token in the environment");
let http = Http::new(&token);
let config = rocket::Config::figment()
.merge(("port", 1313))
.merge(("secret_key", env::var("SECRET").expect("Must have SECRET defined in .env for private cookie persistence")));
rocket::custom(config)
.manage(http)
.mount(
"/",
routes![get_challenge, login, post_login, success, logout],
routes![get_challenge, login, post_login, success, logout, testing],
)
.mount("/css", FileServer::from(relative!("styles/css")))
.attach(Template::fairing())