Compare commits

..

No commits in common. "198a25d145eab98f5d9af679c3148310ed200609" and "a5eab2f7be5c6d3ac0e4d481b301f89ed72f6cd9" have entirely different histories.

3 changed files with 14 additions and 38 deletions

View File

@ -1,4 +1,4 @@
import { ApplicationCommandOptionType, Guild, GuildMember, Message, MessageCreateOptions, MessageReaction, Role, TextChannel, User } from 'discord.js' import { Guild, GuildMember, Message, MessageCreateOptions, MessageReaction, Role, TextChannel, User } from 'discord.js'
import { v4 as uuid } from 'uuid' import { v4 as uuid } from 'uuid'
import { client } from '../..' import { client } from '../..'
import { config } from '../configuration' import { config } from '../configuration'
@ -13,24 +13,12 @@ let task: ScheduledTask
export default new Command({ export default new Command({
name: 'announce', name: 'announce',
description: 'Neues announcement im announcement Channel an alle senden.', description: 'Neues announcement im announcement Channel an alle senden.',
options: [{ options: [],
name: "typ",
type: ApplicationCommandOptionType.String,
description:"Was für ein announcement?",
choices: [{name: "initial", value:"initial"},{name: "votepls", value:"votepls"},{name: "cancel", value:"cancel"}],
required: true
}],
run: async (interaction: RunOptions) => { run: async (interaction: RunOptions) => {
const command = interaction.interaction const command = interaction.interaction
const requestId = uuid() const requestId = uuid()
const guildId = command.guildId! const guildId = command.guildId!
const announcementType = command.options.data.find(option => option.name.includes("typ")) logger.info("Got command for announcing!", { guildId, requestId })
logger.info(`Got command for announcing ${announcementType?.value}!`, { guildId, requestId })
if(!announcementType) {
logger.error("Did not get an announcement type!", { guildId, requestId })
return
}
if (!isAdmin(command.member)) { if (!isAdmin(command.member)) {
logger.info(`Announcement was requested by ${command.member.displayName} but they are not an admin! Not sending announcement.`, { guildId, requestId }) logger.info(`Announcement was requested by ${command.member.displayName} but they are not an admin! Not sending announcement.`, { guildId, requestId })
@ -38,13 +26,8 @@ export default new Command({
} else { } else {
logger.info(`User ${command.member.displayName} seems to be admin`) logger.info(`User ${command.member.displayName} seems to be admin`)
} }
sendAnnouncement(guildId, requestId)
if((<string>announcementType.value).includes("initial")) {
sendInitialAnnouncement(guildId, requestId)
command.followUp("Ist rausgeschickt!") command.followUp("Ist rausgeschickt!")
} else {
command.followUp(`${announcementType.value} ist aktuell noch nicht implementiert`)
}
} }
}) })
@ -52,15 +35,15 @@ function isAdmin(member: GuildMember): boolean {
return member.roles.cache.find((role, _) => role.id === config.bot.jf_admin_role) !== undefined return member.roles.cache.find((role, _) => role.id === config.bot.jf_admin_role) !== undefined
} }
async function sendInitialAnnouncement(guildId: string, requestId: string): Promise<void> { async function sendAnnouncement(guildId: string, requestId: string): Promise<void> {
logger.info("Sending initial announcement") logger.info("Sending announcement")
const announcementChannel: TextChannel = client.getAnnouncementChannelForGuild(guildId) const announcementChannel: TextChannel = client.getAnnouncementChannelForGuild(guildId)
const currentPinnedAnnouncementMessages = (await announcementChannel.messages.fetchPinned()).filter(message => message.cleanContent.includes("[initial]")) const currentPinnedAnnouncementMessages = (await announcementChannel.messages.fetchPinned()).filter(message => message.cleanContent.includes("[announcement]"))
currentPinnedAnnouncementMessages.forEach(async (message) => await message.unpin()) currentPinnedAnnouncementMessages.forEach(async (message) => await message.unpin())
currentPinnedAnnouncementMessages.forEach(message => message.delete()) currentPinnedAnnouncementMessages.forEach(message => message.delete())
const body = `[initial] Hey! @everyone! Hier ist der Watchparty Bot vom Hartzarett. const body = `[announcement] Hey! @everyone! Hier ist der Watchparty Bot vom Hartzarett.
Wir machen in Zukunft regelmäßig Watchparties! Falls du mitmachen möchtest, reagiere einfach auf diesen Post mit 🎫, dann bekommst du automatisch eine Rolle zugewiesen und wirst benachrichtigt sobald es in der Zukunft weitere Watchparties und Filme zum abstimmen gibt. Wir machen in Zukunft regelmäßig Watchparties! Falls du mitmachen möchtest, reagiere einfach auf diesen Post mit 🎫, dann bekommst du automatisch eine Rolle zugewiesen und wirst benachrichtigt sobald es in der Zukunft weitere Watchparties und Filme zum abstimmen gibt.

View File

@ -61,16 +61,15 @@ export async function closePoll(guild: Guild, requestId: string) {
} }
async function updateMessage(movie: string, message: Message, guildId: string, requestId: string) { async function updateMessage(movie: string, message: Message, guildId: string, requestId: string) {
const role = (await message.guild!.roles.fetch()).find(role => role.id === config.bot.announcement_role)
const body = `[Abstimmung beendet] Gewonnen hat: ${movie}` const body = `[Abstimmung beendet] Gewonnen hat: ${movie}`
.concat(message.content.substring("[Abstimmung]".length)) .concat(message.cleanContent.substring("[Abstimmung]".length))
const options: MessageEditOptions = { const options: MessageEditOptions = {
content: body, content: body,
allowedMentions: { parse: ["roles"] }
} }
logger.info("Updating message.", { guildId, requestId }) logger.info("Updating message.", { guildId, requestId })
message.edit(options) message.edit(options)
} }
async function updateEvent(votes: Vote[], guild: Guild, guildId: string, requestId: string) { async function updateEvent(votes: Vote[], guild: Guild, guildId: string, requestId: string) {

View File

@ -1,4 +1,4 @@
import { GuildScheduledEvent, Message, MessageCreateOptions, TextChannel } from "discord.js"; import { GuildScheduledEvent, Message, TextChannel } from "discord.js";
import { ScheduledTask, schedule } from "node-cron"; import { ScheduledTask, schedule } from "node-cron";
import { v4 as uuid } from "uuid"; import { v4 as uuid } from "uuid";
import { client, jellyfinHandler } from "../.."; import { client, jellyfinHandler } from "../..";
@ -30,20 +30,14 @@ export async function execute(event: GuildScheduledEvent) {
const announcementChannel: TextChannel = client.getAnnouncementChannelForGuild(event.guildId) const announcementChannel: TextChannel = client.getAnnouncementChannelForGuild(event.guildId)
logger.debug(`Found channel ${JSON.stringify(announcementChannel, null, 2)}`, { guildId: event.guildId, requestId }) logger.debug(`Found channel ${JSON.stringify(announcementChannel, null, 2)}`, { guildId: event.guildId, requestId })
const role = (await event.guild!.roles.fetch()).find(role => role.id === config.bot.announcement_role)
let message = `[Abstimmung]\n<@&${role ? role.id : "hab die Rolle nicht gefunden"}> Es gibt eine neue Abstimmung für die nächste Watchparty! Stimme hierunter für den nächsten Film ab!\n` let message = "[Abstimmung]\nEs gibt eine neue Abstimmung für die nächste Watchparty! Stimme hierunter für den nächsten Film ab!\n"
for (let i = 0; i < movies.length; i++) { for (let i = 0; i < movies.length; i++) {
message = message.concat(Emotes[i]).concat(": ").concat(movies[i].name!).concat("\n") message = message.concat(Emotes[i]).concat(": ").concat(movies[i].name!).concat("\n")
} }
const options: MessageCreateOptions = { const sentMessage: Message<true> = await (await announcementChannel.fetch()).send(message)
allowedMentions: { parse: ["roles"]},
content: message
}
const sentMessage: Message<true> = await (await announcementChannel.fetch()).send(options)
for (let i = 0; i < movies.length; i++) { for (let i = 0; i < movies.length; i++) {
sentMessage.react(Emotes[i]) sentMessage.react(Emotes[i])