Skip to content

Commit f66aa7d

Browse files
committed
Use property wrappers for binding parameters
1 parent 06fe4cf commit f66aa7d

20 files changed

+56
-56
lines changed

Diff for: Sources/D2Commands/fun/HaikusCommand.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@ public class HaikusCommand: StringCommand {
1010
@Binding private var configuration: HaikuConfiguration
1111
private var subcommands: [String: (CommandOutput, ChannelID) -> Void] = [:]
1212

13-
public init(configuration: Binding<HaikuConfiguration>) {
14-
self._configuration = configuration
13+
public init(@Binding configuration: HaikuConfiguration) {
14+
self._configuration = _configuration
1515

1616
subcommands = [
1717
"enable": { [unowned self] output, channelId in

Diff for: Sources/D2Commands/misc/CityCommand.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class CityCommand: StringCommand {
99

1010
@Binding private var config: CityConfiguration
1111

12-
public init(config _config: Binding<CityConfiguration>) {
12+
public init(@Binding config: CityConfiguration) {
1313
self._config = _config
1414
}
1515

Diff for: Sources/D2Commands/misc/WeatherCommand.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class WeatherCommand: StringCommand {
1212

1313
@Binding private var config: CityConfiguration
1414

15-
public init(config _config: Binding<CityConfiguration>) {
15+
public init(@Binding config: CityConfiguration) {
1616
self._config = _config
1717
}
1818

Diff for: Sources/D2Commands/moderation/MessagePreviewsCommand.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,8 @@ public class MessagePreviewsCommand: StringCommand {
1111
@Binding private var configuration: MessagePreviewsConfiguration
1212
private var subcommands: [String: (CommandOutput, GuildID) -> Void] = [:]
1313

14-
public init(configuration: Binding<MessagePreviewsConfiguration>) {
15-
self._configuration = configuration
14+
public init(@Binding configuration: MessagePreviewsConfiguration) {
15+
self._configuration = _configuration
1616
subcommands = [
1717
"enable": { [unowned self] output, guildId in
1818
self.configuration.enabledGuildIds.insert(guildId)

Diff for: Sources/D2Commands/moderation/PronounRoleCommand.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public class PronounRoleCommand: StringCommand {
1616
)
1717
@Binding private var config: PronounRoleConfiguration
1818

19-
public init(config _config: Binding<PronounRoleConfiguration>) {
19+
public init(@Binding config: PronounRoleConfiguration) {
2020
self._config = _config
2121
}
2222

Diff for: Sources/D2Commands/moderation/PronounsCommand.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class PronounsCommand: StringCommand {
1414
)
1515
@Binding private var config: PronounRoleConfiguration
1616

17-
public init(config _config: Binding<PronounRoleConfiguration>) {
17+
public init(@Binding config: PronounRoleConfiguration) {
1818
self._config = _config
1919
}
2020

Diff for: Sources/D2Commands/moderation/RoleReactionsCommand.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ public class RoleReactionsCommand: StringCommand {
1414
@Binding private var configuration: RoleReactionsConfiguration
1515
private var subcommands: [String: (CommandOutput, Sink, ChannelID, MessageID, String) -> Void] = [:]
1616

17-
public init(configuration: Binding<RoleReactionsConfiguration>) {
18-
self._configuration = configuration
17+
public init(@Binding configuration: RoleReactionsConfiguration) {
18+
self._configuration = _configuration
1919
subcommands = [
2020
"attach": { [unowned self] output, sink, channelId, messageId, args in
2121
guard let guild = sink.guildForChannel(channelId) else {

Diff for: Sources/D2Commands/moderation/SpammerRoleCommand.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ public class SpammerRoleCommand: StringCommand {
1414
)
1515
@Binding private var spamConfiguration: SpamConfiguration
1616

17-
public init(spamConfiguration: Binding<SpamConfiguration>) {
18-
self._spamConfiguration = spamConfiguration
17+
public init(@Binding spamConfiguration: SpamConfiguration) {
18+
self._spamConfiguration = _spamConfiguration
1919
}
2020

2121
public func invoke(with input: String, output: any CommandOutput, context: CommandContext) {

Diff for: Sources/D2Commands/moderation/StreamerRoleCommand.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ public class StreamerRoleCommand: Command {
88
)
99
@Binding private var streamerRoleConfiguration: StreamerRoleConfiguration
1010

11-
public init(streamerRoleConfiguration: Binding<StreamerRoleConfiguration>) {
12-
self._streamerRoleConfiguration = streamerRoleConfiguration
11+
public init(@Binding streamerRoleConfiguration: StreamerRoleConfiguration) {
12+
self._streamerRoleConfiguration = _streamerRoleConfiguration
1313
}
1414

1515
public func invoke(with input: RichValue, output: any CommandOutput, context: CommandContext) {

Diff for: Sources/D2Commands/moderation/ThreadCommand.swift

+4-4
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,27 @@ public class ThreadCommand: StringCommand {
1313
@Binding private var config: ThreadConfiguration
1414
private var subcommands: [String: (CommandOutput, Channel, CommandContext) -> Void] = [:]
1515

16-
public init(config _config: Binding<ThreadConfiguration>) {
16+
public init(@Binding config: ThreadConfiguration) {
1717
self._config = _config
1818

1919
subcommands = [
20-
"enable-keepalive": { [unowned self] output, channel, _ in
20+
"enable-keepalive": { output, channel, _ in
2121
guard channel.type == .text else {
2222
output.append(errorText: "Thread keepalives can only be enabled in guild text channels (whose child threads are considered)")
2323
return
2424
}
2525
config.keepaliveParentChannelIds.insert(channel.id)
2626
output.append("Added `\(channel.name)` to thread keepalive parent channels.")
2727
},
28-
"disable-keepalive": { [unowned self] output, channel, _ in
28+
"disable-keepalive": { output, channel, _ in
2929
guard channel.type == .text else {
3030
output.append(errorText: "Thread keepalives can only be disabled in guild text channels (whose child threads are considered)")
3131
return
3232
}
3333
config.keepaliveParentChannelIds.remove(channel.id)
3434
output.append("Removed `\(channel.name)` from thread keepalive parent channels.")
3535
},
36-
"archive": { [unowned self] output, channel, context in
36+
"archive": { output, channel, context in
3737
guard channel.isThread else {
3838
output.append(errorText: "Only thread channels can be archived, please make sure that you are in a thread")
3939
return

Diff for: Sources/D2Handlers/D2Receiver.swift

+17-17
Original file line numberDiff line numberDiff line change
@@ -76,29 +76,29 @@ public class D2Receiver: Receiver {
7676
MentionSomeoneRewriter()
7777
]
7878
messageHandlers = [
79-
SpamHandler(config: $spamConfiguration),
79+
SpamHandler($config: $spamConfiguration),
8080
CommandHandler(commandPrefix: commandPrefix, hostInfo: hostInfo, registry: registry, permissionManager: permissionManager, subscriptionManager: subscriptionManager, eventLoopGroup: eventLoopGroup, mostRecentPipeRunner: _mostRecentPipeRunner),
8181
SubscriptionHandler(commandPrefix: commandPrefix, hostInfo: hostInfo, registry: registry, manager: subscriptionManager, eventLoopGroup: eventLoopGroup),
8282
MentionD2Handler(conversator: FollowUpConversator(messageDB: messageDB)),
8383
MentionSomeoneHandler(),
84-
MessagePreviewHandler(configuration: $messagePreviewsConfiguration),
85-
TriggerReactionHandler(configuration: $triggerReactionConfiguration, cityConfiguration: $cityConfiguration),
84+
MessagePreviewHandler($configuration: $messagePreviewsConfiguration),
85+
TriggerReactionHandler($configuration: $triggerReactionConfiguration, $cityConfiguration: $cityConfiguration),
8686
CountToNHandler(),
8787
UniversalSummoningHandler(hostInfo: hostInfo),
88-
HaikuHandler(configuration: $haikuConfiguration, inventoryManager: inventoryManager),
88+
HaikuHandler($configuration: $haikuConfiguration, inventoryManager: inventoryManager),
8989
LuckyNumberHandler(luckyNumber: 69, minimumNumberCount: 2),
9090
MessageDatabaseHandler(messageDB: messageDB) // Below other handlers so as to not pick up on commands
9191
]
9292
reactionHandlers = [
93-
RoleReactionHandler(configuration: $roleReactionsConfiguration),
93+
RoleReactionHandler($configuration: $roleReactionsConfiguration),
9494
SubscriptionReactionHandler(commandPrefix: commandPrefix, registry: registry, manager: subscriptionManager, eventLoopGroup: eventLoopGroup),
9595
MessageDatabaseReactionHandler(messageDB: messageDB)
9696
]
9797
presenceHandlers = [
98-
StreamerRoleHandler(streamerRoleConfiguration: $streamerRoleConfiguration)
98+
StreamerRoleHandler($streamerRoleConfiguration: $streamerRoleConfiguration)
9999
]
100100
channelHandlers = [
101-
ThreadKeepaliveHandler(config: $threadConfiguration),
101+
ThreadKeepaliveHandler($config: $threadConfiguration),
102102
MessageDatabaseChannelHandler(messageDB: messageDB)
103103
]
104104
interactionHandlers = [
@@ -124,8 +124,8 @@ public class D2Receiver: Receiver {
124124
registry["say"] = SayCommand()
125125
registry["campus"] = CampusCommand()
126126
registry["type"] = TriggerTypingCommand()
127-
registry["city"] = CityCommand(config: $cityConfiguration)
128-
registry["weather"] = WeatherCommand(config: $cityConfiguration)
127+
registry["city"] = CityCommand($config: $cityConfiguration)
128+
registry["weather"] = WeatherCommand($config: $cityConfiguration)
129129
registry["lightning", aka: ["l", "zap"]] = LightningCommand()
130130
registry["sunrisesunset", aka: ["sunrise", "sunset", "twilight", "dawn", "dusk"]] = SunriseSunsetCommand()
131131
registry["webcam"] = WebcamCommand()
@@ -141,16 +141,16 @@ public class D2Receiver: Receiver {
141141
registry["grant"] = GrantPermissionCommand(permissionManager: permissionManager)
142142
registry["revoke"] = RevokePermissionCommand(permissionManager: permissionManager)
143143
registry["simulate"] = SimulatePermissionCommand(permissionManager: permissionManager)
144-
registry["spammerrole"] = SpammerRoleCommand(spamConfiguration: $spamConfiguration)
145-
registry["streamerrole", aka: ["twitchrole"]] = StreamerRoleCommand(streamerRoleConfiguration: $streamerRoleConfiguration)
146-
registry["messagepreviews"] = MessagePreviewsCommand(configuration: $messagePreviewsConfiguration)
147-
registry["haikus"] = HaikusCommand(configuration: $haikuConfiguration)
148-
registry["thread"] = ThreadCommand(config: $threadConfiguration)
144+
registry["spammerrole"] = SpammerRoleCommand($spamConfiguration: $spamConfiguration)
145+
registry["streamerrole", aka: ["twitchrole"]] = StreamerRoleCommand($streamerRoleConfiguration: $streamerRoleConfiguration)
146+
registry["messagepreviews"] = MessagePreviewsCommand($configuration: $messagePreviewsConfiguration)
147+
registry["haikus"] = HaikusCommand($configuration: $haikuConfiguration)
148+
registry["thread"] = ThreadCommand($config: $threadConfiguration)
149149
registry["threads"] = ThreadsCommand()
150150
registry["permissions"] = ShowPermissionsCommand(permissionManager: permissionManager)
151151
registry["userinfo", aka: ["user"]] = UserInfoCommand()
152152
registry["clear"] = ClearCommand()
153-
registry["rolereactions"] = RoleReactionsCommand(configuration: $roleReactionsConfiguration)
153+
registry["rolereactions"] = RoleReactionsCommand($configuration: $roleReactionsConfiguration)
154154
registry["logs"] = LogsCommand(logBuffer: logBuffer)
155155
registry["embeddescription", aka: ["description"]] = EmbedDescriptionCommand()
156156
registry["embedfooter", aka: ["footer"]] = EmbedFooterCommand()
@@ -433,8 +433,8 @@ public class D2Receiver: Receiver {
433433
registry["guildinfo", aka: ["stats", "server", "serverstats", "serverinfo", "guild", "guildstats"]] = GuildInfoCommand(messageDB: messageDB)
434434
registry["guildchannels", aka: ["channels", "serverchannels"]] = GuildChannelsCommand()
435435
registry["peekchannel", aka: ["peek", "peekmessages"]] = PeekChannelCommand()
436-
registry["pronouns"] = PronounsCommand(config: $pronounRoleConfiguration)
437-
registry["pronounrole"] = PronounRoleCommand(config: $pronounRoleConfiguration)
436+
registry["pronouns"] = PronounsCommand($config: $pronounRoleConfiguration)
437+
registry["pronounrole"] = PronounRoleCommand($config: $pronounRoleConfiguration)
438438
registry["guilds"] = GuildsCommand()
439439
registry["searchchannel", aka: ["findchannel", "sc"]] = SearchChannelCommand()
440440
registry["whatsup"] = WhatsUpCommand()

Diff for: Sources/D2Handlers/channel/handler/ThreadKeepaliveHandler.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ fileprivate let log = Logger(label: "D2Handlers.ThreadKeepaliveHandler")
88
public struct ThreadKeepaliveHandler: ChannelHandler {
99
@Binding private var config: ThreadConfiguration
1010

11-
public init(config _config: Binding<ThreadConfiguration>) {
11+
public init(@Binding config: ThreadConfiguration) {
1212
self._config = _config
1313
}
1414

Diff for: Sources/D2Handlers/message/handler/HaikuHandler.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,12 @@ public struct HaikuHandler: MessageHandler {
1313
private let inventoryManager: InventoryManager
1414

1515
public init(
16-
configuration: Binding<HaikuConfiguration>,
16+
@Binding configuration: HaikuConfiguration,
1717
inventoryManager: InventoryManager,
1818
syllableCounts: [Int] = [5, 7, 5]
1919
) {
2020
self.syllableCounts = syllableCounts
21-
self._configuration = configuration
21+
self._configuration = _configuration
2222
self.inventoryManager = inventoryManager
2323
}
2424

Diff for: Sources/D2Handlers/message/handler/MessagePreviewHandler.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ fileprivate let messageLinkPattern = try! Regex(from: "https?://discord(?:app)?.
1717
public struct MessagePreviewHandler: MessageHandler {
1818
@Binding private var configuration: MessagePreviewsConfiguration
1919

20-
public init(configuration: Binding<MessagePreviewsConfiguration>) {
21-
self._configuration = configuration
20+
public init(@Binding configuration: MessagePreviewsConfiguration) {
21+
self._configuration = _configuration
2222
}
2323

2424
public func handle(message: Message, sink: any Sink) -> Bool {

Diff for: Sources/D2Handlers/message/handler/SpamHandler.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ public struct SpamHandler: MessageHandler {
1919
private let lastSpamMessages: ExpiringList<Message>
2020
private var cautionedSpammers = Set<UserID>()
2121

22-
public init(config: Binding<SpamConfiguration>, dateProvider: @escaping () -> Date = Date.init) {
23-
self._config = config
22+
public init(@Binding config: SpamConfiguration, dateProvider: @escaping () -> Date = Date.init) {
23+
self._config = _config
2424
self.dateProvider = dateProvider
2525
lastSpamMessages = ExpiringList(dateProvider: dateProvider)
2626
}

Diff for: Sources/D2Handlers/message/handler/TriggerReactionHandler.swift

+7-7
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,13 @@ public struct TriggerReactionHandler: MessageHandler {
1414
}
1515

1616
public init(
17-
configuration: Binding<TriggerReactionConfiguration>,
18-
cityConfiguration: Binding<CityConfiguration>
17+
@Binding configuration: TriggerReactionConfiguration,
18+
@Binding cityConfiguration: CityConfiguration
1919
) {
2020
self.init(
21-
configuration: { configuration.wrappedValue },
21+
$configuration: $configuration,
2222
weatherEmojiProvider: {
23-
guard let city = cityConfiguration.wrappedValue.city else { throw ReactionTriggerError.other("No city specified") }
23+
guard let city = cityConfiguration.city else { throw ReactionTriggerError.other("No city specified") }
2424
return OpenWeatherMapQuery(city: city).perform()
2525
.mapCatching {
2626
guard let emoji = $0.emoji else { throw ReactionTriggerError.other("No weather emoji") }
@@ -31,7 +31,7 @@ public struct TriggerReactionHandler: MessageHandler {
3131
}
3232

3333
public init(
34-
configuration: @escaping () -> TriggerReactionConfiguration,
34+
@Binding configuration: TriggerReactionConfiguration,
3535
weatherEmojiProvider: @escaping () throws -> Promise<String, any Error>
3636
) {
3737
self.init(triggers: [
@@ -47,7 +47,7 @@ public struct TriggerReactionHandler: MessageHandler {
4747
Promise.catchingThen {
4848
guard goodMorningOrEveningPattern.matchCount(in: message.content) > 0 else { throw ReactionTriggerError.mismatchingKeywords }
4949

50-
if configuration().dateSpecificReactions {
50+
if configuration.dateSpecificReactions {
5151
let calendar = Calendar.current
5252
let todayComponents = calendar.dateComponents([.month, .day], from: Date())
5353

@@ -77,7 +77,7 @@ public struct TriggerReactionHandler: MessageHandler {
7777
}
7878
}
7979

80-
if configuration().weatherReactions {
80+
if configuration.weatherReactions {
8181
return try weatherEmojiProvider()
8282
}
8383

Diff for: Sources/D2Handlers/presence/handler/StreamerRoleHandler.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ fileprivate let log = Logger(label: "D2Handlers.StreamerRoleHandler")
1212
public struct StreamerRoleHandler: PresenceHandler {
1313
@Binding private var streamerRoleConfiguration: StreamerRoleConfiguration
1414

15-
public init(streamerRoleConfiguration: Binding<StreamerRoleConfiguration>) {
16-
self._streamerRoleConfiguration = streamerRoleConfiguration
15+
public init(@Binding streamerRoleConfiguration: StreamerRoleConfiguration) {
16+
self._streamerRoleConfiguration = _streamerRoleConfiguration
1717
}
1818

1919
public func handle(presenceUpdate presence: Presence, sink: any Sink) {

Diff for: Sources/D2Handlers/reaction/handler/RoleReactionHandler.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ fileprivate let log = Logger(label: "D2Handlers.RoleReactionHandler")
88
public struct RoleReactionHandler: ReactionHandler {
99
@Binding private var configuration: RoleReactionsConfiguration
1010

11-
public init(configuration: Binding<RoleReactionsConfiguration>) {
12-
self._configuration = configuration
11+
public init(@Binding configuration: RoleReactionsConfiguration) {
12+
self._configuration = _configuration
1313
}
1414

1515
public func handle(createdReaction emoji: Emoji, to messageId: MessageID, on channelId: ChannelID, by userId: UserID, sink: any Sink) {

Diff for: Tests/D2HandlersTests/message/handler/SpamHandlerTests.swift

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ final class SpamHandlerTests: XCTestCase {
1515
override func setUp() {
1616
timestamp = Date()
1717
@Box var config = SpamConfiguration()
18-
handler = SpamHandler(config: $config) { [unowned self] in
18+
handler = SpamHandler($config: $config) { [unowned self] in
1919
timestamp
2020
}
2121
output = TestOutput()

Diff for: Tests/D2HandlersTests/message/handler/TriggerReactionHandlerTests.swift

+2-2
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ final class TriggerReactionHandlers: XCTestCase {
1717

1818
private func messageTriggersWeather(_ content: String) -> Bool {
1919
let emoji = ":test:"
20-
let handler = TriggerReactionHandler {
20+
let handler = TriggerReactionHandler($configuration: .constant(
2121
TriggerReactionConfiguration(
2222
dateSpecificReactions: false,
2323
weatherReactions: true
2424
)
25-
} weatherEmojiProvider: {
25+
)) {
2626
Promise(emoji)
2727
}
2828
let output = TestOutput()

0 commit comments

Comments
 (0)