feat: wolfram alpha
This commit is contained in:
111
Sources/zundamon/MessageHandler.swift
Normal file
111
Sources/zundamon/MessageHandler.swift
Normal file
@@ -0,0 +1,111 @@
|
||||
import Foundation
|
||||
import FoundationNetworking
|
||||
import DiscordBM
|
||||
|
||||
struct MessageHandler {
|
||||
let ctx: Gateway.MessageCreate
|
||||
let client: any DiscordClient
|
||||
|
||||
static let prefix = ":"
|
||||
static let zundaGifData = try? Data(contentsOf: URL(filePath: "media/zundamone.gif"))
|
||||
|
||||
func handle() async throws {
|
||||
guard !(ctx.author?.bot ?? false) else { return }
|
||||
if (ctx.content.hasPrefix(MessageHandler.prefix)) {
|
||||
let split = ctx.content.split(separator: " ")
|
||||
let command = split.first?.trimmingPrefix(MessageHandler.prefix)
|
||||
let args = split[1...]
|
||||
|
||||
switch command {
|
||||
case "wow": try await handleWow(args)
|
||||
case "domath": try await Wolfram.handleMath(args, client: client, ctx: ctx)
|
||||
default: break
|
||||
}
|
||||
} else if ctx.mentions.contains(where: { $0.id == Mathsumoto.ownID }) {
|
||||
if ctx.content
|
||||
.replacingOccurrences(of: "<@\(Mathsumoto.ownID!.rawValue)>", with: "")
|
||||
.trimmingCharacters(in: .whitespacesAndNewlines)
|
||||
.count == 0,
|
||||
let zundaGif = MessageHandler.zundaGifData
|
||||
{
|
||||
try await client.createMessage(
|
||||
channelId: ctx.channel_id,
|
||||
payload: .init(
|
||||
message_reference: .init(
|
||||
type: .default,
|
||||
message_id: ctx.id,
|
||||
channel_id: ctx.channel_id,
|
||||
guild_id: ctx.guild_id,
|
||||
),
|
||||
files: [.init(data: .init(data: zundaGif), filename: "zundamone.gif")],
|
||||
attachments: [.init(index: 0, filename: "zundamone.gif")],
|
||||
)
|
||||
).guardSuccess()
|
||||
} else {
|
||||
try await handle8Ball()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static let ballResponses = [
|
||||
"It is certain.",
|
||||
"It is decidedly so.",
|
||||
"Without a doubt.",
|
||||
"Yes – definitely.",
|
||||
"You may rely on it.",
|
||||
"As I see it, yes.",
|
||||
"Most likely.",
|
||||
"Outlook good.",
|
||||
"Yes.",
|
||||
"Signs point to yes.",
|
||||
"Reply hazy, try again.",
|
||||
"Ask again later.",
|
||||
"Better not tell you now.",
|
||||
"Cannot predict now.",
|
||||
"Concentrate and ask again.",
|
||||
"Don’t count on it.",
|
||||
"My reply is no.",
|
||||
"My sources say no.",
|
||||
"Outlook not so good.",
|
||||
"Very doubtful.",
|
||||
"Ui beam",
|
||||
"We are Shigure Ui",
|
||||
"We are Shigure Ux",
|
||||
]
|
||||
func handle8Ball() async throws {
|
||||
try await client.createMessage(
|
||||
channelId: ctx.channel_id,
|
||||
payload: .init(
|
||||
content: MessageHandler.ballResponses.randomElement(),
|
||||
message_reference: .init(
|
||||
type: .default,
|
||||
message_id: ctx.id,
|
||||
channel_id: ctx.channel_id,
|
||||
guild_id: ctx.guild_id,
|
||||
),
|
||||
)
|
||||
).guardSuccess()
|
||||
}
|
||||
|
||||
static let wows = [
|
||||
"<:wow:1477062414913634334>",
|
||||
"<:wow2:1477062432357875948>",
|
||||
"<:wow4:1477062471746588713>",
|
||||
"<:wow5:1477062452804849845>"
|
||||
]
|
||||
func handleWow(_ args: ArraySlice<String.SubSequence>) async throws {
|
||||
try await client.createMessage(
|
||||
channelId: ctx.channel_id,
|
||||
payload: .init(
|
||||
content: MessageHandler.wows.randomElement(),
|
||||
message_reference: .init(
|
||||
type: .default,
|
||||
message_id: ctx.id,
|
||||
channel_id: ctx.channel_id,
|
||||
guild_id: ctx.guild_id,
|
||||
),
|
||||
)
|
||||
).guardSuccess()
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user