mirror of
https://github.com/ahmadk953/poixpixel-discord-bot.git
synced 2025-06-07 15:39:30 +00:00
Added Basic Fact of the Day Feature
This commit is contained in:
parent
2139f2efa0
commit
40942e2539
9 changed files with 544 additions and 27 deletions
69
src/util/factManager.ts
Normal file
69
src/util/factManager.ts
Normal file
|
@ -0,0 +1,69 @@
|
|||
import { EmbedBuilder, Client } from 'discord.js';
|
||||
|
||||
import { getRandomUnusedFact, markFactAsUsed } from '../db/db.js';
|
||||
import { loadConfig } from './configLoader.js';
|
||||
|
||||
export async function scheduleFactOfTheDay(client: Client) {
|
||||
try {
|
||||
const now = new Date();
|
||||
const tomorrow = new Date();
|
||||
tomorrow.setDate(now.getDate() + 1);
|
||||
tomorrow.setHours(0, 0, 0, 0);
|
||||
|
||||
const timeUntilMidnight = tomorrow.getTime() - now.getTime();
|
||||
|
||||
setTimeout(() => {
|
||||
postFactOfTheDay(client);
|
||||
scheduleFactOfTheDay(client);
|
||||
}, timeUntilMidnight);
|
||||
|
||||
console.log(
|
||||
`Next fact of the day scheduled in ${Math.floor(timeUntilMidnight / 1000 / 60)} minutes`,
|
||||
);
|
||||
} catch (error) {
|
||||
console.error('Error scheduling fact of the day:', error);
|
||||
setTimeout(() => scheduleFactOfTheDay(client), 60 * 60 * 1000);
|
||||
}
|
||||
}
|
||||
|
||||
export async function postFactOfTheDay(client: Client) {
|
||||
try {
|
||||
const config = loadConfig();
|
||||
const guild = client.guilds.cache.get(config.guildId);
|
||||
|
||||
if (!guild) {
|
||||
console.error('Guild not found');
|
||||
return;
|
||||
}
|
||||
|
||||
const factChannel = guild.channels.cache.get(config.channels.factOfTheDay);
|
||||
if (!factChannel?.isTextBased()) {
|
||||
console.error('Fact channel not found or is not a text channel');
|
||||
return;
|
||||
}
|
||||
|
||||
const fact = await getRandomUnusedFact();
|
||||
if (!fact) {
|
||||
console.error('No facts available');
|
||||
return;
|
||||
}
|
||||
|
||||
const embed = new EmbedBuilder()
|
||||
.setTitle('🌟 Fact of the Day 🌟')
|
||||
.setDescription(fact.content)
|
||||
.setColor(0xffaa00)
|
||||
.setTimestamp();
|
||||
|
||||
if (fact.source) {
|
||||
embed.setFooter({ text: `Source: ${fact.source}` });
|
||||
}
|
||||
|
||||
await factChannel.send({
|
||||
content: `<@&${config.roles.factPingRole}>`,
|
||||
embeds: [embed],
|
||||
});
|
||||
await markFactAsUsed(fact.id!);
|
||||
} catch (error) {
|
||||
console.error('Error posting fact of the day:', error);
|
||||
}
|
||||
}
|
|
@ -5,6 +5,7 @@ import {
|
|||
ActionRowBuilder,
|
||||
GuildChannel,
|
||||
} from 'discord.js';
|
||||
|
||||
import {
|
||||
LogActionPayload,
|
||||
ModerationLogAction,
|
||||
|
@ -22,10 +23,12 @@ import {
|
|||
getPermissionDifference,
|
||||
getPermissionNames,
|
||||
} from './utils.js';
|
||||
import { loadConfig } from '../configLoader.js';
|
||||
|
||||
export default async function logAction(payload: LogActionPayload) {
|
||||
const logChannel = payload.guild.channels.cache.get('1007787977432383611');
|
||||
if (!logChannel || !(logChannel instanceof TextChannel)) {
|
||||
const config = loadConfig();
|
||||
const logChannel = payload.guild.channels.cache.get(config.channels.logs);
|
||||
if (!logChannel?.isTextBased()) {
|
||||
console.error('Log channel not found or is not a Text Channel.');
|
||||
return;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue