7 Commits

Author SHA1 Message Date
9a6b65f3a3 Don't delete guild data when guild becomes unavailable 2024-09-17 23:47:27 +01:00
b6ff149d51 Fix macro list/delete 2024-09-14 12:07:09 +01:00
748e33566b Fix patreon not sharing between guild members 2024-08-19 21:50:14 +01:00
d7e90614c8 Bump ver 2024-07-07 16:35:32 +01:00
b5dbfe336d Don't set activity in ready event 2024-07-07 16:31:23 +01:00
218be2f0b1 Bump ver 2024-06-18 19:32:47 +01:00
d7515f3611 Don't require View Channel permission 2024-06-18 19:28:53 +01:00
8 changed files with 26 additions and 21 deletions

2
Cargo.lock generated
View File

@ -2431,7 +2431,7 @@ checksum = "adad44e29e4c806119491a7f06f03de4d1af22c3a680dd47f1e6e179439d1f56"
[[package]]
name = "reminder-rs"
version = "1.7.22"
version = "1.7.26"
dependencies = [
"base64 0.22.1",
"chrono",

View File

@ -1,6 +1,6 @@
[package]
name = "reminder-rs"
version = "1.7.22"
version = "1.7.27"
authors = ["Jude Southworth <judesouthworth@pm.me>"]
edition = "2021"
license = "AGPL-3.0 only"

View File

@ -1,8 +1,7 @@
import { ChannelSelector } from "./ChannelSelector";
import { DateTime } from "luxon";
import { IntervalSelector } from "./IntervalSelector";
import { useQuery } from "react-query";
import { fetchUserInfo } from "../../api";
import { fetchGuildInfo, fetchUserInfo } from "../../api";
import { useReminder } from "./ReminderContext";
import { Attachment } from "./Attachment";
import { TTS } from "./TTS";
@ -11,11 +10,12 @@ import { useGuild } from "../App/useGuild";
export const Settings = () => {
const guild = useGuild();
const { isSuccess: userFetched, data: userInfo } = useQuery(fetchUserInfo());
const { isSuccess: userFetched, data: userInfo } = useQuery({ ...fetchUserInfo() });
const { isSuccess: guildFetched, data: guildInfo } = useQuery({ ...fetchGuildInfo(guild) });
const [reminder, setReminder] = useReminder();
if (!userFetched) {
if (!userFetched || !guildFetched) {
return <></>;
}
@ -59,7 +59,13 @@ export const Settings = () => {
<div class="collapses split-controls">
<div>
<div class={userInfo.patreon ? "patreon-only" : "patreon-only is-locked"}>
<div
class={
userInfo.patreon || guildInfo.patreon
? "patreon-only"
: "patreon-only is-locked"
}
>
<div class="patreon-invert foreground">
Intervals available on <a href="https://patreon.com/jellywx">Patreon</a>{" "}
or{" "}

View File

@ -20,7 +20,7 @@ pub async fn delete_macro(
SELECT m.id
FROM command_macro m
INNER JOIN guilds
ON guilds.guild = m.guild_id
ON guilds.id = m.guild_id
WHERE guild = ?
AND m.name = ?
",

View File

@ -13,9 +13,6 @@ pub async fn listener(
data: &Data,
) -> Result<(), Error> {
match event {
FullEvent::Ready { .. } => {
ctx.set_activity(Some(ActivityData::watching("for /remind")));
}
FullEvent::ChannelDelete { channel, .. } => {
sqlx::query!("DELETE FROM channels WHERE channel = ?", channel.id.get())
.execute(&data.database)
@ -58,9 +55,11 @@ To stay up to date on the latest features and fixes, join our [Discord](https://
}
}
FullEvent::GuildDelete { incomplete, .. } => {
let _ = sqlx::query!("DELETE FROM guilds WHERE guild = ?", incomplete.id.get())
.execute(&data.database)
.await;
if !incomplete.unavailable {
let _ = sqlx::query!("DELETE FROM guilds WHERE guild = ?", incomplete.id.get())
.execute(&data.database)
.await;
}
}
FullEvent::InteractionCreate { interaction } => {
if let Some(component) = interaction.clone().message_component() {

View File

@ -73,7 +73,6 @@ async fn check_self_permissions(ctx: Context<'_>) -> bool {
if let Some(permissions) = app_permissions {
return if permissions.send_messages()
&& permissions.embed_links()
&& permissions.view_channel()
&& manage_webhooks
{
true
@ -82,14 +81,12 @@ async fn check_self_permissions(ctx: Context<'_>) -> bool {
.send(CreateReply::default().content(format!(
"The bot appears to be missing some permissions:
{} **View Channel**
{} **Send Message**
{} **Embed Links**
{} **Manage Webhooks**
Please check the bot's roles, and any channel overrides. Alternatively, giving the bot
\"Administrator\" will bypass permission checks",
if permissions.view_channel() { "" } else { "" },
if permissions.send_messages() { "" } else { "" },
if permissions.embed_links() { "" } else { "" },
if manage_webhooks { "" } else { "" },

View File

@ -39,6 +39,7 @@ use poise::serenity_prelude::{
},
ClientBuilder,
};
use serenity::all::ActivityData;
use sqlx::{MySql, Pool};
use tokio::sync::{broadcast, broadcast::Sender, RwLock};
@ -283,8 +284,10 @@ async fn _main(tx: Sender<()>) -> Result<(), Box<dyn StdError + Send + Sync>> {
.options(options)
.build();
let mut client =
ClientBuilder::new(&discord_token, GatewayIntents::GUILDS).framework(framework).await?;
let mut client = ClientBuilder::new(&discord_token, GatewayIntents::GUILDS)
.framework(framework)
.activity(ActivityData::watching("for /remind"))
.await?;
client.start_autosharded().await?;

View File

@ -68,7 +68,7 @@ impl Data {
guild_id: GuildId,
) -> Result<Vec<CommandMacro>, Error> {
let rows = sqlx::query!(
"SELECT name, description, commands FROM macro WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?)",
"SELECT name, description, commands FROM command_macro WHERE guild_id = (SELECT id FROM guilds WHERE guild = ?)",
guild_id.get()
)
.fetch_all(&self.database)
@ -76,7 +76,7 @@ impl Data {
guild_id,
name: row.name.clone(),
description: row.description.clone(),
commands: serde_json::from_str(&row.commands).unwrap(),
commands: serde_json::from_str(&row.commands.to_string()).unwrap(),
}).collect();
Ok(rows)