msg collecting
This commit is contained in:
Generated
+1
@@ -563,6 +563,7 @@ dependencies = [
|
|||||||
name = "bot"
|
name = "bot"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"entities",
|
||||||
"migration",
|
"migration",
|
||||||
"sea-orm",
|
"sea-orm",
|
||||||
"serenity",
|
"serenity",
|
||||||
|
|||||||
@@ -9,3 +9,4 @@ serenity = "0.12"
|
|||||||
tokio = {workspace = true}
|
tokio = {workspace = true}
|
||||||
sea-orm = {workspace = true}
|
sea-orm = {workspace = true}
|
||||||
migration ={workspace = true}
|
migration ={workspace = true}
|
||||||
|
entities = {workspace = true}
|
||||||
|
|||||||
+72
-4
@@ -1,22 +1,88 @@
|
|||||||
use std::env;
|
use std::env;
|
||||||
use std::error::Error;
|
use std::error::Error;
|
||||||
|
|
||||||
|
use entities::{content, members, messages, server};
|
||||||
use migration::{Migrator, MigratorTrait};
|
use migration::{Migrator, MigratorTrait};
|
||||||
use sea_orm::{Database, DatabaseConnection};
|
use sea_orm::{
|
||||||
|
ActiveModelTrait, ColumnTrait, Database, DatabaseConnection, EntityTrait, QueryFilter,
|
||||||
|
};
|
||||||
use serenity::async_trait;
|
use serenity::async_trait;
|
||||||
use serenity::model::channel::Message;
|
use serenity::model::channel::Message;
|
||||||
|
use serenity::model::guild;
|
||||||
use serenity::prelude::*;
|
use serenity::prelude::*;
|
||||||
|
|
||||||
struct Handler;
|
struct Bot {
|
||||||
|
db: DatabaseConnection,
|
||||||
|
}
|
||||||
|
|
||||||
#[async_trait]
|
#[async_trait]
|
||||||
impl EventHandler for Handler {
|
impl EventHandler for Bot {
|
||||||
async fn message(&self, ctx: Context, msg: Message) {
|
async fn message(&self, ctx: Context, msg: Message) {
|
||||||
if msg.content == "!ping" {
|
if msg.content == "!ping" {
|
||||||
if let Err(why) = msg.channel_id.say(&ctx.http, "Pong!").await {
|
if let Err(why) = msg.channel_id.say(&ctx.http, "Pong!").await {
|
||||||
println!("Error sending message: {why:?}");
|
println!("Error sending message: {why:?}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// This is a mess, it should be split into its on function(s)
|
||||||
|
msg.channel(&ctx.http).await.unwrap();
|
||||||
|
let activeModel = content::ActiveModel {
|
||||||
|
id: sea_orm::ActiveValue::NotSet,
|
||||||
|
content: sea_orm::ActiveValue::Set(msg.content.clone()),
|
||||||
|
r#type: sea_orm::ActiveValue::Set("Content".into()),
|
||||||
|
};
|
||||||
|
let content = activeModel.insert(&self.db).await.unwrap();
|
||||||
|
|
||||||
|
let member = members::Entity::find()
|
||||||
|
.filter(members::Column::IdDiscord.eq(msg.author.id.get() as i32))
|
||||||
|
.one(&self.db)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
if member.is_none() {
|
||||||
|
let activeModel = members::ActiveModel {
|
||||||
|
id: sea_orm::ActiveValue::NotSet,
|
||||||
|
id_discord: sea_orm::ActiveValue::Set(msg.author.id.get() as i32),
|
||||||
|
name: sea_orm::ActiveValue::Set(msg.author.name.clone()),
|
||||||
|
};
|
||||||
|
let member = activeModel.insert(&self.db).await.unwrap();
|
||||||
|
}
|
||||||
|
|
||||||
|
let server_id = msg.guild_id.unwrap().get();
|
||||||
|
let server_id_i32 = server_id.clone() as i32;
|
||||||
|
let guild_name = msg
|
||||||
|
.channel(&ctx.http)
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
.guild()
|
||||||
|
.unwrap()
|
||||||
|
.name
|
||||||
|
.clone();
|
||||||
|
let server = entities::server::Entity::find()
|
||||||
|
.filter(entities::server::Column::IdDiscord.eq(server_id_i32))
|
||||||
|
.one(&self.db)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let server = match server {
|
||||||
|
Some(x) => x,
|
||||||
|
None => {
|
||||||
|
let activeModel = server::ActiveModel {
|
||||||
|
id: sea_orm::ActiveValue::NotSet,
|
||||||
|
name: sea_orm::ActiveValue::Set(guild_name.to_string()),
|
||||||
|
id_discord: sea_orm::ActiveValue::Set(server_id.clone() as i32),
|
||||||
|
};
|
||||||
|
activeModel.insert(&self.db).await.unwrap()
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
let activeModel = messages::ActiveModel {
|
||||||
|
id: sea_orm::ActiveValue::NotSet,
|
||||||
|
id_discord: sea_orm::ActiveValue::Set(msg.id.get() as i32),
|
||||||
|
id_sender: sea_orm::ActiveValue::Set(member.unwrap().id),
|
||||||
|
id_server: sea_orm::ActiveValue::Set(server.id),
|
||||||
|
id_content: sea_orm::ActiveValue::Set(content.id),
|
||||||
|
};
|
||||||
|
activeModel.insert(&self.db).await.unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -33,9 +99,11 @@ async fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
| GatewayIntents::DIRECT_MESSAGES
|
| GatewayIntents::DIRECT_MESSAGES
|
||||||
| GatewayIntents::MESSAGE_CONTENT;
|
| GatewayIntents::MESSAGE_CONTENT;
|
||||||
|
|
||||||
|
let bot = Bot { db: dbc };
|
||||||
|
|
||||||
// Create a new instance of the Client, logging in as a bot.
|
// Create a new instance of the Client, logging in as a bot.
|
||||||
let mut client = Client::builder(&token, intents)
|
let mut client = Client::builder(&token, intents)
|
||||||
.event_handler(Handler)
|
.event_handler(bot)
|
||||||
.await
|
.await
|
||||||
.expect("Err creating client");
|
.expect("Err creating client");
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ use sea_orm::entity::prelude::*;
|
|||||||
pub struct Model {
|
pub struct Model {
|
||||||
#[sea_orm(primary_key)]
|
#[sea_orm(primary_key)]
|
||||||
pub id: i32,
|
pub id: i32,
|
||||||
|
#[sea_orm(unique)]
|
||||||
pub id_discord: i32,
|
pub id_discord: i32,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,7 +7,8 @@ use sea_orm::entity::prelude::*;
|
|||||||
pub struct Model {
|
pub struct Model {
|
||||||
#[sea_orm(primary_key)]
|
#[sea_orm(primary_key)]
|
||||||
pub id: i32,
|
pub id: i32,
|
||||||
pub id_discord: String,
|
#[sea_orm(unique)]
|
||||||
|
pub id_discord: i32,
|
||||||
pub name: String,
|
pub name: String,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ impl MigrationTrait for Migration {
|
|||||||
.table(Server::Table)
|
.table(Server::Table)
|
||||||
.if_not_exists()
|
.if_not_exists()
|
||||||
.col(pk_auto(Server::Id))
|
.col(pk_auto(Server::Id))
|
||||||
.col(string(Server::IdDiscord))
|
.col(integer(Server::IdDiscord).unique_key())
|
||||||
.col(string(Server::Name))
|
.col(string(Server::Name))
|
||||||
.to_owned(),
|
.to_owned(),
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ impl MigrationTrait for Migration {
|
|||||||
.table(Members::Table)
|
.table(Members::Table)
|
||||||
.if_not_exists()
|
.if_not_exists()
|
||||||
.col(pk_auto(Members::Id))
|
.col(pk_auto(Members::Id))
|
||||||
.col(integer(Members::IdDiscord))
|
.col(integer(Members::IdDiscord).unique_key())
|
||||||
.col(string(Members::Name))
|
.col(string(Members::Name))
|
||||||
.to_owned(),
|
.to_owned(),
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user