mirror of
https://github.com/WCBROW01/zblock.git
synced 2025-12-12 04:28:07 -05:00
Remove all feeds associated with a guild when the bot leaves
This commit is contained in:
23
feed_info.c
23
feed_info.c
@ -195,6 +195,29 @@ zblock_feed_info_err zblock_feed_info_delete(PGconn *conn, const char *url, u64s
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// deletes all feeds associated with a guild from the database
|
||||||
|
zblock_feed_info_err zblock_feed_info_delete_all_guild(PGconn *conn, u64snowflake guild_id) {
|
||||||
|
if (!conn) return ZBLOCK_FEED_INFO_INVALID_ARGS;
|
||||||
|
|
||||||
|
uint64_t guild_id_be = htobe64(guild_id);
|
||||||
|
const char *const params[] = {(char *) &guild_id_be};
|
||||||
|
const int param_lengths[] = {sizeof(guild_id_be)};
|
||||||
|
const int param_formats[] = {1};
|
||||||
|
PGresult *res = PQexecParams(conn,
|
||||||
|
"DELETE FROM feeds WHERE guild_id = $1::bigint",
|
||||||
|
1, NULL, params, param_lengths, param_formats, 1
|
||||||
|
);
|
||||||
|
|
||||||
|
zblock_feed_info_err result = ZBLOCK_FEED_INFO_OK;
|
||||||
|
if (PQresultStatus(res) != PGRES_COMMAND_OK) {
|
||||||
|
log_error(PQresultErrorMessage(res));
|
||||||
|
result = ZBLOCK_FEED_INFO_DBERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
PQclear(res);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
// updates the last_pubDate field of a given feed in the database
|
// updates the last_pubDate field of a given feed in the database
|
||||||
zblock_feed_info_err zblock_feed_info_update(PGconn *conn, zblock_feed_info_minimal *feed) {
|
zblock_feed_info_err zblock_feed_info_update(PGconn *conn, zblock_feed_info_minimal *feed) {
|
||||||
if (!conn || !feed) return ZBLOCK_FEED_INFO_INVALID_ARGS;
|
if (!conn || !feed) return ZBLOCK_FEED_INFO_INVALID_ARGS;
|
||||||
|
|||||||
@ -60,6 +60,9 @@ zblock_feed_info_err zblock_feed_info_insert(PGconn *conn, zblock_feed_info *fee
|
|||||||
// deletes feed from the database
|
// deletes feed from the database
|
||||||
zblock_feed_info_err zblock_feed_info_delete(PGconn *conn, const char *url, u64snowflake channel_id);
|
zblock_feed_info_err zblock_feed_info_delete(PGconn *conn, const char *url, u64snowflake channel_id);
|
||||||
|
|
||||||
|
// deletes all feeds associated with a guild from the database
|
||||||
|
zblock_feed_info_err zblock_feed_info_delete_all_guild(PGconn *conn, u64snowflake guild_id);
|
||||||
|
|
||||||
// updates the last_pubDate field of a given feed in the database
|
// updates the last_pubDate field of a given feed in the database
|
||||||
zblock_feed_info_err zblock_feed_info_update(PGconn *conn, zblock_feed_info_minimal *feed);
|
zblock_feed_info_err zblock_feed_info_update(PGconn *conn, zblock_feed_info_minimal *feed);
|
||||||
|
|
||||||
|
|||||||
8
main.c
8
main.c
@ -513,6 +513,13 @@ static void on_interaction(struct discord *client, const struct discord_interact
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void on_guild_delete(struct discord *client, const struct discord_guild *event) {
|
||||||
|
(void) client;
|
||||||
|
if (zblock_feed_info_delete_all_guild(database_conn, event->id)) {
|
||||||
|
log_error("Unable to delete all feeds from guild %" PRIu64 ". You probably want to clean this up.", event->id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// delay before the first feed retrieval (in ms)
|
// delay before the first feed retrieval (in ms)
|
||||||
#define FEED_TIMER_DELAY 15000
|
#define FEED_TIMER_DELAY 15000
|
||||||
|
|
||||||
@ -538,6 +545,7 @@ int main(void) {
|
|||||||
|
|
||||||
discord_set_on_ready(client, &on_ready);
|
discord_set_on_ready(client, &on_ready);
|
||||||
discord_set_on_interaction_create(client, &on_interaction);
|
discord_set_on_interaction_create(client, &on_interaction);
|
||||||
|
discord_set_on_guild_delete(client, &on_guild_delete);
|
||||||
discord_timer_interval(client, timer_retrieve_feeds, NULL, NULL, FEED_TIMER_DELAY, FEED_TIMER_INTERVAL, -1);
|
discord_timer_interval(client, timer_retrieve_feeds, NULL, NULL, FEED_TIMER_DELAY, FEED_TIMER_INTERVAL, -1);
|
||||||
discord_run(client);
|
discord_run(client);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user