Wip commit
This commit is contained in:
@ -13,4 +13,4 @@ lazy_static = "1.4"
|
||||
num-integer = "0.1"
|
||||
serde = "1.0"
|
||||
sqlx = { version = "0.7", features = ["runtime-tokio-rustls", "macros", "mysql", "bigdecimal", "chrono", "json"]}
|
||||
serenity = { version = "0.11", default-features = false, features = ["builder", "cache", "client", "gateway", "http", "model", "utils", "rustls_backend"] }
|
||||
serenity = { version = "0.12", default-features = false, features = ["builder", "cache", "client", "gateway", "http", "model", "utils", "rustls_backend"] }
|
||||
|
@ -8,11 +8,12 @@ use num_integer::Integer;
|
||||
use regex::{Captures, Regex};
|
||||
use serde::Deserialize;
|
||||
use serenity::{
|
||||
builder::CreateEmbed,
|
||||
all::{CreateAttachment, CreateEmbedFooter},
|
||||
builder::{CreateEmbed, CreateEmbedAuthor, CreateMessage, ExecuteWebhook},
|
||||
http::{CacheHttp, Http, HttpError},
|
||||
model::{
|
||||
channel::{Channel, Embed as SerenityEmbed},
|
||||
id::ChannelId,
|
||||
channel::Channel,
|
||||
id::{ChannelId, MessageId},
|
||||
webhook::Webhook,
|
||||
},
|
||||
Error, Result,
|
||||
@ -194,43 +195,36 @@ impl Embed {
|
||||
|
||||
impl Into<CreateEmbed> for Embed {
|
||||
fn into(self) -> CreateEmbed {
|
||||
let mut c = CreateEmbed::default();
|
||||
let mut author = CreateEmbedAuthor::new(&self.author);
|
||||
if let Some(author_icon) = &self.author_url {
|
||||
author = author.icon_url(author_icon);
|
||||
}
|
||||
|
||||
c.title(&self.title)
|
||||
let mut footer = CreateEmbedFooter::new(&self.footer);
|
||||
if let Some(footer_icon) = &self.footer_url {
|
||||
footer = footer.icon_url(footer_icon);
|
||||
}
|
||||
|
||||
let mut embed = CreateEmbed::default()
|
||||
.title(&self.title)
|
||||
.description(&self.description)
|
||||
.color(self.color)
|
||||
.author(|a| {
|
||||
a.name(&self.author);
|
||||
|
||||
if let Some(author_icon) = &self.author_url {
|
||||
a.icon_url(author_icon);
|
||||
}
|
||||
|
||||
a
|
||||
})
|
||||
.footer(|f| {
|
||||
f.text(&self.footer);
|
||||
|
||||
if let Some(footer_icon) = &self.footer_url {
|
||||
f.icon_url(footer_icon);
|
||||
}
|
||||
|
||||
f
|
||||
});
|
||||
.author(author)
|
||||
.footer(footer);
|
||||
|
||||
for field in &self.fields.0 {
|
||||
c.field(&field.title, &field.value, field.inline);
|
||||
embed = embed.field(&field.title, &field.value, field.inline);
|
||||
}
|
||||
|
||||
if let Some(image_url) = &self.image_url {
|
||||
c.image(image_url);
|
||||
embed = embed.image(image_url);
|
||||
}
|
||||
|
||||
if let Some(thumbnail_url) = &self.thumbnail_url {
|
||||
c.thumbnail(thumbnail_url);
|
||||
embed = embed.thumbnail(thumbnail_url);
|
||||
}
|
||||
|
||||
c
|
||||
embed
|
||||
}
|
||||
}
|
||||
|
||||
@ -465,8 +459,8 @@ WHERE
|
||||
.expect(&format!("Could not delete Reminder {}", self.id));
|
||||
}
|
||||
|
||||
async fn pin_message<M: Into<u64>>(&self, message_id: M, http: impl AsRef<Http>) {
|
||||
let _ = http.as_ref().pin_message(self.channel_id, message_id.into(), None).await;
|
||||
async fn pin_message<M: Into<MessageId>>(&self, message_id: M, http: impl AsRef<Http>) {
|
||||
let _ = http.as_ref().pin_message(self.channel_id.into(), message_id.into(), None).await;
|
||||
}
|
||||
|
||||
pub async fn send(
|
||||
@ -479,28 +473,24 @@ WHERE
|
||||
reminder: &Reminder,
|
||||
embed: Option<CreateEmbed>,
|
||||
) -> Result<()> {
|
||||
let channel = ChannelId(reminder.channel_id).to_channel(&cache_http).await;
|
||||
let channel = ChannelId::new(reminder.channel_id).to_channel(&cache_http).await;
|
||||
|
||||
let mut message = CreateMessage::new().content(&reminder.content).tts(reminder.tts);
|
||||
|
||||
if let (Some(attachment), Some(name)) =
|
||||
(&reminder.attachment, &reminder.attachment_name)
|
||||
{
|
||||
message =
|
||||
message.add_file(CreateAttachment::bytes(attachment as &[u8], name.as_str()));
|
||||
}
|
||||
|
||||
if let Some(embed) = embed {
|
||||
message = message.embed(embed);
|
||||
}
|
||||
|
||||
match channel {
|
||||
Ok(Channel::Guild(channel)) => {
|
||||
match channel
|
||||
.send_message(&cache_http, |m| {
|
||||
m.content(&reminder.content).tts(reminder.tts);
|
||||
|
||||
if let (Some(attachment), Some(name)) =
|
||||
(&reminder.attachment, &reminder.attachment_name)
|
||||
{
|
||||
m.add_file((attachment as &[u8], name.as_str()));
|
||||
}
|
||||
|
||||
if let Some(embed) = embed {
|
||||
m.set_embed(embed);
|
||||
}
|
||||
|
||||
m
|
||||
})
|
||||
.await
|
||||
{
|
||||
match channel.send_message(&cache_http, message).await {
|
||||
Ok(m) => {
|
||||
if reminder.pin {
|
||||
reminder.pin_message(m.id, cache_http.http()).await;
|
||||
@ -512,24 +502,7 @@ WHERE
|
||||
}
|
||||
}
|
||||
Ok(Channel::Private(channel)) => {
|
||||
match channel
|
||||
.send_message(&cache_http.http(), |m| {
|
||||
m.content(&reminder.content).tts(reminder.tts);
|
||||
|
||||
if let (Some(attachment), Some(name)) =
|
||||
(&reminder.attachment, &reminder.attachment_name)
|
||||
{
|
||||
m.add_file((attachment as &[u8], name.as_str()));
|
||||
}
|
||||
|
||||
if let Some(embed) = embed {
|
||||
m.set_embed(embed);
|
||||
}
|
||||
|
||||
m
|
||||
})
|
||||
.await
|
||||
{
|
||||
match channel.send_message(&cache_http.http(), message).await {
|
||||
Ok(m) => {
|
||||
if reminder.pin {
|
||||
reminder.pin_message(m.id, cache_http.http()).await;
|
||||
@ -551,35 +524,31 @@ WHERE
|
||||
webhook: Webhook,
|
||||
embed: Option<CreateEmbed>,
|
||||
) -> Result<()> {
|
||||
let mut builder = ExecuteWebhook::new().content(&reminder.content).tts(reminder.tts);
|
||||
|
||||
if let Some(username) = &reminder.username {
|
||||
if !username.is_empty() {
|
||||
builder = builder.username(username);
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(avatar) = &reminder.avatar {
|
||||
builder = builder.avatar_url(avatar);
|
||||
}
|
||||
|
||||
if let (Some(attachment), Some(name)) =
|
||||
(&reminder.attachment, &reminder.attachment_name)
|
||||
{
|
||||
builder =
|
||||
builder.add_file(CreateAttachment::bytes(attachment as &[u8], name.as_str()));
|
||||
}
|
||||
|
||||
if let Some(embed) = embed {
|
||||
builder = builder.embeds(vec![embed]);
|
||||
}
|
||||
|
||||
match webhook
|
||||
.execute(&cache_http.http(), reminder.pin || reminder.restartable, |w| {
|
||||
w.content(&reminder.content).tts(reminder.tts);
|
||||
|
||||
if let Some(username) = &reminder.username {
|
||||
if !username.is_empty() {
|
||||
w.username(username);
|
||||
}
|
||||
}
|
||||
|
||||
if let Some(avatar) = &reminder.avatar {
|
||||
w.avatar_url(avatar);
|
||||
}
|
||||
|
||||
if let (Some(attachment), Some(name)) =
|
||||
(&reminder.attachment, &reminder.attachment_name)
|
||||
{
|
||||
w.add_file((attachment as &[u8], name.as_str()));
|
||||
}
|
||||
|
||||
if let Some(embed) = embed {
|
||||
w.embeds(vec![SerenityEmbed::fake(|c| {
|
||||
*c = embed;
|
||||
c
|
||||
})]);
|
||||
}
|
||||
|
||||
w
|
||||
})
|
||||
.execute(&cache_http.http(), reminder.pin || reminder.restartable, builder)
|
||||
.await
|
||||
{
|
||||
Ok(m) => {
|
||||
@ -613,8 +582,10 @@ WHERE
|
||||
let result = if let (Some(webhook_id), Some(webhook_token)) =
|
||||
(self.webhook_id, &self.webhook_token)
|
||||
{
|
||||
let webhook_res =
|
||||
cache_http.http().get_webhook_with_token(webhook_id, webhook_token).await;
|
||||
let webhook_res = cache_http
|
||||
.http()
|
||||
.get_webhook_with_token(webhook_id.into(), webhook_token)
|
||||
.await;
|
||||
|
||||
if let Ok(webhook) = webhook_res {
|
||||
send_to_webhook(cache_http, &self, webhook, embed).await
|
||||
@ -630,7 +601,7 @@ WHERE
|
||||
|
||||
if let Err(e) = result {
|
||||
if let Error::Http(error) = e {
|
||||
if let HttpError::UnsuccessfulRequest(http_error) = *error {
|
||||
if let HttpError::UnsuccessfulRequest(http_error) = error {
|
||||
match http_error.error.code {
|
||||
10003 => {
|
||||
self.log_error(
|
||||
|
Reference in New Issue
Block a user