-
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDiscord.swift
92 lines (74 loc) · 2.6 KB
/
Discord.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
//
// Discord.swift
// DiscordExtension
//
// Created by Wesley de Groot on 07/10/2022.
//
import Foundation
import AEExtensionKit
public class DiscordExtension: ExtensionInterface {
let rpc = SwordRPC(appId: "1023938668349640734")
var api: ExtensionAPI
var AuroraAPI: AuroraAPI = { _, _ in }
init(api: ExtensionAPI) {
rpc.connect()
self.api = api
print("Hello from Discord EXT: \(api)!")
}
public func register() -> ExtensionManifest {
return .init(
name: "Discord",
displayName: "Discord",
version: "1.0",
minAEVersion: "1.0"
)
}
public func respond(action: String, parameters: [String: Any]) -> Bool {
print("respond(action: String, parameters: [String: Any])", action, parameters)
if action == "didOpen" {
if let workspace = parameters["workspace"] as? String,
let file = parameters["file"] as? String {
print("Setting discord status")
setDiscordStatusTo(project: workspace, custom: file)
}
}
if action == "registerCallback" {
if let api = parameters["callback"] as? AuroraAPI {
AuroraAPI = api
}
print("Idling...")
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
print("Idling... SET")
self.setDiscordStatusTo(
project: "file://Aurora Editor",
custom: "file://idling"
)
}
}
return true
}
func setDiscordStatusTo(project: String, custom: String) {
rpc.clearPresence()
let pURL = NSURL(string: project)?.lastPathComponent
let cURL = NSURL(string: custom)?.lastPathComponent
let fileIcon = NSURL(string: custom)?.pathExtension ?? "Unknown"
var presence = RichPresence()
// Large (File) icon
presence.assets.largeImage = fileIcon.lowercased()
presence.assets.largeText = "\(fileIcon.uppercased()) File"
// Small (AE) Icon
presence.assets.smallImage = "auroraeditor"
presence.assets.smallText = "AuroraEditor"
// Project name
presence.details = pURL ?? project
// File name
presence.state = cURL ?? custom
rpc.setPresence(presence)
}
}
@objc(DiscordExtensionBuilder)
public class DiscordExtensionBuilder: ExtensionBuilder {
public override func build(withAPI api: ExtensionAPI) -> ExtensionInterface {
return DiscordExtension(api: api)
}
}