Skip to content

Commit

Permalink
fix: handle message updates in NoEmbed
Browse files Browse the repository at this point in the history
  • Loading branch information
tim-smart committed May 8, 2023
1 parent 269060a commit e8a79b5
Showing 1 changed file with 28 additions and 8 deletions.
36 changes: 28 additions & 8 deletions src/NoEmbed.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { Discord, DiscordREST } from "dfx"
import { DiscordGateway } from "dfx/gateway"

class NotValidMessageError extends Data.TaggedClass("NotValidMessageError")<{
readonly reason: "disabled" | "no-embed"
readonly reason: "disabled" | "no-embed" | "already-supressed"
}> {}

export interface NoEmbedOptions {
Expand All @@ -25,34 +25,54 @@ const make = ({ topicKeyword }: NoEmbedOptions) =>
: Effect.succeed(_),
)

const handleMessages = gateway.handleDispatch("MESSAGE_CREATE", message =>
const handleMessage = (message: Discord.MessageCreateEvent) =>
pipe(
getChannel(message.guild_id!, message.channel_id),
Effect.Do(),
Effect.bind("channel", () =>
getChannel(message.guild_id!, message.channel_id),
),
Effect.filterOrFail(
channel => channel.topic?.includes(topicKeyword) === true,
({ channel }) => channel.topic?.includes(topicKeyword) === true,
() => new NotValidMessageError({ reason: "disabled" }),
),
Effect.bind("message", () =>
message.content
? Effect.succeed(message)
: Effect.flatMap(
rest.getChannelMessage(message.channel_id, message.id),
_ => _.json,
),
),
Effect.filterOrFail(
({ message }) =>
(Number(message.flags) & Discord.MessageFlag.SUPPRESS_EMBEDS) === 0,
() => new NotValidMessageError({ reason: "already-supressed" }),
),
Effect.filterOrFail(
() =>
({ message }) =>
message.embeds.length > 0 &&
!!message.embeds[0].url &&
message.content.includes(message.embeds[0].url),
() => new NotValidMessageError({ reason: "no-embed" }),
),
Effect.zipRight(
rest.editMessage(message.channel_id, message.id, {
flags: Discord.MessageFlag.SUPPRESS_EMBEDS,
flags: Number(message.flags) | Discord.MessageFlag.SUPPRESS_EMBEDS,
}),
),
Effect.catchTags({
NotValidMessageError: () => Effect.unit(),
DiscordRESTError: logRESTError,
}),
Effect.catchAllCause(Effect.logErrorCause),
)

yield* _(
Effect.allPar(
gateway.handleDispatch("MESSAGE_CREATE", handleMessage),
gateway.handleDispatch("MESSAGE_UPDATE", handleMessage),
),
)

yield* _(handleMessages)
})

export const makeLayer = (config: Config.Config.Wrap<NoEmbedOptions>) =>
Expand Down

0 comments on commit e8a79b5

Please sign in to comment.