Skip to content

Commit

Permalink
Rework !whois command
Browse files Browse the repository at this point in the history
  • Loading branch information
SuperManifolds committed Apr 2, 2023
1 parent f72d260 commit c17abbd
Show file tree
Hide file tree
Showing 10 changed files with 147 additions and 65 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -138,3 +138,4 @@ xcuserdata
**/xcshareddata/WorkspaceSettings.xcsettings

# End of https://www.toptal.com/developers/gitignore/api/macos,xcode,swiftpackagemanager,swift
config.json
2 changes: 1 addition & 1 deletion .swiftpm/xcode/xcshareddata/xcschemes/mechasqueak.xcscheme
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,7 @@
</BuildableProductRunnable>
<CommandLineArguments>
<CommandLineArgument
argument = "/Users/alex/mechaconfig.json"
argument = "/Users/alex/Developer/SwiftSqueak/config.json"
isEnabled = "YES">
</CommandLineArgument>
</CommandLineArguments>
Expand Down
33 changes: 31 additions & 2 deletions Sources/mechasqueak/FuelRatsAPI/Group.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ import Foundation
import JSONAPI
import NIO
import AsyncHTTPClient
import IRCKit

enum GroupDescription: ResourceObjectDescription {
public static var jsonType: String { return "groups" }
Expand Down Expand Up @@ -121,25 +122,53 @@ typealias GroupSearchDocument = Document<ManyResourceBody<Group>, NoIncludes>
extension Group {
var groupNameMap: [String: String] {
return [
"verified": "Verified User",
"verified": "Verified",
"developer": "Developer",
"rat": "Drilled Rat",
"dispatch": "Drilled Dispatch",
"trainer": "Trainer",
"traineradmin": "Training Manager",
"merch": "Quartermaster",
"overseer": "Overseer",
"techrat": "Tech rat",
"moderator": "Moderator",
"operations": "Operations team",
"netadmin": "Network administrator",
"admin": "Network moderator"
"admin": "Network moderator",
"owner": "Special snowflake",
]
}

var groupColor: [String: IRCColor] {
return [
"verified": .Grey,
"developer": .LightBlue,
"rat": .LightGreen,
"dispatch": .Green,
"trainer": .Yellow,
"traineradmin": .Purple,
"merch": .Grey,
"overseer": .Orange,
"techrat": .LightBlue,
"moderator": .LightRed,
"operations": .Purple,
"netadmin": .LightBlue,
"admin": .Purple,
"owner": .Purple
]
}

var groupDescription: String {
return groupNameMap[self.name] ?? self.name
}

var ircRepresentation: String {
if let color = groupColor[self.name] {
return IRCFormat.color(color, groupDescription)
}
return groupDescription
}

static func getList () async throws -> GroupSearchDocument {
let request = try HTTPClient.Request(apiPath: "/groups", method: .GET)

Expand Down
10 changes: 7 additions & 3 deletions Sources/mechasqueak/FuelRatsAPI/Nickname.swift
Original file line number Diff line number Diff line change
Expand Up @@ -77,13 +77,17 @@ extension NicknameSearchDocument {
})
}) ?? []
}

var permissions: [AccountPermission] {
var groups: [Group] {
let groupIds = self.user?.relationships.groups?.ids ?? []

return self.body.includes![Group.self].filter({
groupIds.contains($0.id)
}).flatMap({
})
}

var permissions: [AccountPermission] {
self.groups.flatMap({
$0.attributes.permissions.value
})
}
Expand Down
73 changes: 26 additions & 47 deletions Sources/mechasqueak/Modules/AccountCommands.swift
Original file line number Diff line number Diff line change
Expand Up @@ -62,43 +62,32 @@ class AccountCommands: IRCBotModule {
return
}

let rats = associatedNickname.ratsBelongingTo(user: apiUser).map({ (rat: Rat) -> String in
var description = "\(rat.attributes.name.value)"

if rat.platform == .PC {
description += " (\(rat.attributes.platform.value.ircRepresentable) \(rat.attributes.expansion.value.ircRepresentable))"
} else {
description += " (\(rat.attributes.platform.value.ircRepresentable))"
}
if rat.data.permits?.contains("Pilots' Federation District") == true {
description += " (\(IRCFormat.color(.Grey, "Starter Zone")))"
}
return description
}).joined(separator: ", ")

let joinedDate = associatedNickname.ratsBelongingTo(user: apiUser).reduce(nil, { (acc: Date?, rat: Rat) -> Date? in
if acc == nil || rat.attributes.createdAt.value < acc! {
return rat.attributes.createdAt.value
}
return acc
})

let verifiedStatus = associatedNickname.permissions.contains(.UserVerified) ?
IRCFormat.color(.LightGreen, "Verified") :
IRCFormat.color(.Orange, "Unverified")

command.message.reply(key: "whoami.response", fromCommand: command, map: [
let group = associatedNickname.groups.sorted(by: {
$0.priority > $1.priority

}).first?.ircRepresentation

let output = (try? stencil.renderLine(name: "whois.stencil", context: [
"nick": command.message.user.nickname,
"account": account,
"userId": apiUser.id.rawValue.ircRepresentation,
"rats": rats,
"id": associatedNickname.user?.id.rawValue.ircRepresentation ?? "",
"group": group as Any,
"displayId": command.options.contains("@"),
"joined": joinedDate?.eliteFormattedString ?? "unknown",
"verified": verifiedStatus
])
"rats": associatedNickname.ratsBelongingTo(user: apiUser)
])) ?? ""
}

@BotCommand(
["whois", "ratid", "who", "id"],
[.param("nickname", "SpaceDawg")],
[.param("nickname", "SpaceDawg"), .options(["@"])],
category: .account,
description: "Check the Fuel Rats account information the bot is associating with someone's nick.",
permission: .RatReadOwn,
Expand Down Expand Up @@ -142,39 +131,29 @@ class AccountCommands: IRCBotModule {
return
}

let rats = associatedNickname.ratsBelongingTo(user: apiUser).map({ (rat: Rat) -> String in
var description = "\(rat.attributes.name.value)"

if rat.platform == .PC {
description += " (\(rat.attributes.platform.value.ircRepresentable) \(rat.attributes.expansion.value.ircRepresentable))"
} else {
description += " (\(rat.attributes.platform.value.ircRepresentable))"
}
if rat.data.permits?.contains("Pilots' Federation District") == true {
description += " (\(IRCFormat.color(.Grey, "Starter Zone")))"
}
return description
}).joined(separator: ", ")

let joinedDate = associatedNickname.ratsBelongingTo(user: apiUser).reduce(nil, { (acc: Date?, rat: Rat) -> Date? in
if acc == nil || rat.attributes.createdAt.value < acc! {
return rat.attributes.createdAt.value
}
return acc
})

let verifiedStatus = associatedNickname.permissions.contains(.UserVerified) ?
IRCFormat.color(.LightGreen, "Verified") :
IRCFormat.color(.Orange, "Unverified")

command.message.reply(key: "whois.response", fromCommand: command, map: [
let group = associatedNickname.groups.sorted(by: {
$0.priority > $1.priority

}).first?.ircRepresentation

let output = (try? stencil.renderLine(name: "whois.stencil", context: [
"nick": nick,
"account": account,
"userId": apiUser.id.rawValue.ircRepresentation,
"rats": rats,
"id": associatedNickname.user?.id.rawValue.ircRepresentation ?? "",
"group": group as Any,
"displayId": command.options.contains("@"),
"joined": joinedDate?.eliteFormattedString ?? "unknown",
"verified": verifiedStatus
])
"rats": associatedNickname.ratsBelongingTo(user: apiUser)
])) ?? ""

command.message.reply(message: output)
}

@BotCommand(
Expand Down
2 changes: 1 addition & 1 deletion Sources/mechasqueak/Modules/HelpCommands.swift
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ class HelpCommands: IRCBotModule {
])
let permissionGroups = helpCommand.permission?.groups
.sorted(by: { $0.priority < $1.priority })
.map({ $0.groupDescription }) ?? []
.map({ $0.ircRepresentation }) ?? []

var secondLine = ""
if helpCommand.commands.count > 1 {
Expand Down
39 changes: 39 additions & 0 deletions Sources/mechasqueak/Templating/Stencil.swift
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,45 @@ private func generateEnvironment () -> Environment {
return nil
}

ext.registerFilter("platform") { (value: Any?) in
if let rat = value as? Rat {
if rat.platform == .PC {
return "\(rat.attributes.platform.value.ircRepresentable) \(rat.attributes.expansion.value.ircRepresentable)"
}
return rat.attributes.platform.value.ircRepresentable
}

if let rescue = value as? Rescue {
return rescue.platformExpansion
}

return nil
}

ext.registerFilter("isStarterRat") { (value: Any?) in
if let rat = value as? Rat {
return rat.data.permits?.contains("Pilots' Federation District")
}

return false
}

ext.registerFilter("name") { (value: Any?) in
if let rat = value as? Rat {
return rat.name
}

return nil
}

ext.registerFilter("id") { (value: Any?) in
if let rat = value as? Rat {
return rat.id.rawValue.ircRepresentation
}

return nil
}

return environment
}

Expand Down
26 changes: 15 additions & 11 deletions commandref.html
Original file line number Diff line number Diff line change
Expand Up @@ -1165,7 +1165,7 @@ <h3>
</p>
<br/><h3>
<span style="color: rgb(0,0,0);text-decoration: none;">
<span style="text-decoration: none;">!renameid <span style="color: rgb(122,134,154);">&lt;rescue uuid&gt; &lt;client name&gt; </span></span></span></h3> <p>
<span style="text-decoration: none;">!renameid <span style="color: rgb(122,134,154);">&lt;rescue uuid&gt; &lt;client name...&gt; </span></span></span></h3> <p>
<span style="color: rgb(0,0,0);text-decoration: none;">
<span style="text-decoration: none;">
<strong>Permissions</strong>: Overseer, Tech rat, Moderator, Operations team, Network moderator, Network administrator
Expand Down Expand Up @@ -1793,7 +1793,7 @@ <h3>
</p> <p>
<span style="color: rgb(0,0,0);text-decoration: none;">
<span style="text-decoration: none;">
<strong>Permissions</strong>: Verified User
<strong>Permissions</strong>: Verified
</span>
</span>
</p> <p style="margin-left: 30.0px;">
Expand Down Expand Up @@ -2017,7 +2017,7 @@ <h3>
</p>
<br/><h3>
<span style="color: rgb(0,0,0);text-decoration: none;">
<span style="text-decoration: none;">!whois <span style="color: rgb(122,134,154);">&lt;nickname&gt; </span></span></span></h3> <p>
<span style="text-decoration: none;">!whois <span style="color: rgb(122,134,154);"><em>[-@] </em>&lt;nickname&gt; </span></span></span></h3> <p>
<span style="color: rgb(0,0,0);text-decoration: none;">
<span style="text-decoration: none;">
<strong>Aliases</strong>: !ratid !who !id
Expand All @@ -2026,11 +2026,15 @@ <h3>
</p> <p>
<span style="color: rgb(0,0,0);text-decoration: none;">
<span style="text-decoration: none;">
<strong>Permissions</strong>: Verified User
<strong>Permissions</strong>: Verified
</span>
</span>
</p> <p style="margin-left: 30.0px;">
<span style="color: rgb(0,0,0);text-decoration: none;">Check the Fuel Rats account information the bot is associating with someone's nick.</span>
</p> <p style="margin-left: 30.0px;">
<span style="color: rgb(0,0,0);text-decoration: none;">Options:</span>
</p> <p style="margin-left: 60.0px;">
<span style="color: rgb(0,0,0);text-decoration: none;"><strong>-@</strong> Display user and rat UUIDs</span>
</p> <p style="margin-left: 30.0px;">
<span style="color: rgb(0,0,0);">
<span style="text-decoration: none;">
Expand All @@ -2056,7 +2060,7 @@ <h3>
</p> <p>
<span style="color: rgb(0,0,0);text-decoration: none;">
<span style="text-decoration: none;">
<strong>Permissions</strong>: Verified User
<strong>Permissions</strong>: Verified
</span>
</span>
</p> <p style="margin-left: 30.0px;">
Expand Down Expand Up @@ -2086,7 +2090,7 @@ <h3>
</p> <p>
<span style="color: rgb(0,0,0);text-decoration: none;">
<span style="text-decoration: none;">
<strong>Permissions</strong>: Verified User
<strong>Permissions</strong>: Verified
</span>
</span>
</p> <p style="margin-left: 30.0px;">
Expand All @@ -2110,7 +2114,7 @@ <h3>
<span style="text-decoration: none;">!permits <span style="color: rgb(122,134,154);"></span></span></span></h3> <p>
<span style="color: rgb(0,0,0);text-decoration: none;">
<span style="text-decoration: none;">
<strong>Permissions</strong>: Verified User
<strong>Permissions</strong>: Verified
</span>
</span>
</p> <p style="margin-left: 30.0px;">
Expand Down Expand Up @@ -2140,7 +2144,7 @@ <h3>
</p> <p>
<span style="color: rgb(0,0,0);text-decoration: none;">
<span style="text-decoration: none;">
<strong>Permissions</strong>: Verified User
<strong>Permissions</strong>: Verified
</span>
</span>
</p> <p style="margin-left: 30.0px;">
Expand Down Expand Up @@ -2170,7 +2174,7 @@ <h3>
</p> <p>
<span style="color: rgb(0,0,0);text-decoration: none;">
<span style="text-decoration: none;">
<strong>Permissions</strong>: Verified User
<strong>Permissions</strong>: Verified
</span>
</span>
</p> <p style="margin-left: 30.0px;">
Expand Down Expand Up @@ -2200,7 +2204,7 @@ <h3>
</p> <p>
<span style="color: rgb(0,0,0);text-decoration: none;">
<span style="text-decoration: none;">
<strong>Permissions</strong>: Verified User
<strong>Permissions</strong>: Verified
</span>
</span>
</p> <p style="margin-left: 30.0px;">
Expand Down Expand Up @@ -2241,7 +2245,7 @@ <h3>
</p> <p>
<span style="color: rgb(0,0,0);text-decoration: none;">
<span style="text-decoration: none;">
<strong>Permissions</strong>: Verified User
<strong>Permissions</strong>: Verified
</span>
</span>
</p> <p style="margin-left: 30.0px;">
Expand Down
4 changes: 4 additions & 0 deletions localisation/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,10 @@
"help.command.quiet.mode": "Shows last time for another PC game version (l / h / o)",
"sendhelp.nouser": "Could not find %{nick} in the channel",


"help.command.whoami.@": "Display user and rat UUIDs",
"help.command.whois.@": "Display user and rat UUIDs",

"help.command.addcase.pc": "Set platform to PC",
"help.command.addcase.xb": "Set platform to Xbox",
"help.command.addcase.ps": "Set platform to PS4",
Expand Down
Loading

0 comments on commit c17abbd

Please sign in to comment.