Created
December 13, 2019 19:06
-
-
Save tanner0101/a8f65e6d487b1fdc7bea6d4d147f2cd1 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
protocol HookEvent { } | |
protocol HookEventHandler { | |
func handle(_ event: HookEvent) | |
} | |
protocol DiscordEventHandler: HookEventHandler { | |
func handle(_ event: DiscordEvent) | |
} | |
extension DiscordEventHandler { | |
func handle(_ event: HookEvent) { | |
guard let event as? DiscordEvent else { | |
return nil | |
} | |
self.handle(event) | |
} | |
} | |
struct Discord { | |
@propertyWrapper | |
struct GuildCreate: DiscordEventHandler { | |
var value: (Guild) -> () | |
func handle(_ event: DiscordEvent) { | |
guard case .guildCreate(let guild) = event else { | |
return | |
} | |
self.value(guild) | |
} | |
} | |
} | |
protocol MessageCreateEvent { | |
var content: String { get } | |
} | |
struct Global { | |
@propertyWrapper | |
struct MessageCreate: HookEventHandler { | |
var value: (MessageCreateEvent) -> () | |
func handle(_ event: HookEvent) { | |
guard let create = event as? MessageCreateEvent else { | |
return | |
} | |
self.value(create) | |
} | |
} | |
} | |
struct MyPlugins: Plugins { | |
@Discord.GuildCreate | |
var guildListener = { guild in | |
print("created guild \(guild)") | |
} | |
@Global.MessageCreate | |
var globalMessageListener = { message in | |
print("Global: \(message.content)") | |
} | |
} | |
// internal in swift hook | |
let event: HookEvent | |
for handler in plugins.handlers { | |
handler.handle(event) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment