Skip to content

Commit 7151b22

Browse files
author
sherlocksometimes
committed
feat: add config to set scanner cooldown by role
Allow users to set specific cooldown by roles
1 parent 8be85b6 commit 7151b22

File tree

6 files changed

+63
-11
lines changed

6 files changed

+63
-11
lines changed

packages/types/lib/server.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ export interface Permissions {
174174
scanner: string[]
175175
areaRestrictions: string[]
176176
webhooks: string[]
177+
scannerCooldowns: Record<string, number>
177178
}
178179

179180
export interface Waypoint {

server/src/configs/default.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -615,6 +615,7 @@
615615
"pokemon": false,
616616
"gmf": true,
617617
"scanNextInstance": "scanNext",
618+
"rules": [],
618619
"scanNextDevice": "Device01",
619620
"scanNextSleeptime": 5,
620621
"userCooldownSeconds": 0,
@@ -634,6 +635,7 @@
634635
"gmf": false,
635636
"scanZoneMaxSize": 10,
636637
"userCooldownSeconds": 0,
638+
"rules": [],
637639
"advancedScanZoneOptions": false,
638640
"scanZoneRadius": {
639641
"pokemon": 70,
@@ -1025,4 +1027,4 @@
10251027
"tracesSampleRate": 0.1
10261028
}
10271029
}
1028-
}
1030+
}

server/src/graphql/resolvers.js

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -384,15 +384,19 @@ const resolvers = {
384384
gymRadius: scanner.scanZone.scanZoneRadius.gym,
385385
spacing: scanner.scanZone.scanZoneSpacing,
386386
maxSize: scanner.scanZone.scanZoneMaxSize,
387-
cooldown: scanner.scanZone.userCooldownSeconds,
387+
cooldown:
388+
perms?.scannerCooldowns?.[mode] ??
389+
scanner.scanZone.userCooldownSeconds,
388390
refreshQueue: scanner.backendConfig.queueRefreshInterval,
389391
enabled: scanner[mode].enabled,
390392
}
391393
: {
392394
scannerType: scanner.backendConfig.platform,
393395
showScanCount: scanner.scanNext.showScanCount,
394396
showScanQueue: scanner.scanNext.showScanQueue,
395-
cooldown: scanner.scanNext.userCooldownSeconds,
397+
cooldown:
398+
perms?.scannerCooldowns?.[mode] ??
399+
scanner.scanNext.userCooldownSeconds,
396400
refreshQueue: scanner.backendConfig.queueRefreshInterval,
397401
enabled: scanner[mode].enabled,
398402
}
@@ -597,11 +601,11 @@ const resolvers = {
597601
(!req.session.cooldown || req.session.cooldown < Date.now())
598602
) {
599603
const validCoords = getValidCoords(category, data?.scanCoords, perms)
600-
604+
const cooldownSeconds =
605+
perms?.scannerCooldowns?.[category] ||
606+
config.getSafe(`scanner.${category}.userCooldownSeconds`)
601607
const cooldown =
602-
config.getSafe(`scanner.${category}.userCooldownSeconds`) *
603-
validCoords.filter(Boolean).length *
604-
1000 +
608+
cooldownSeconds * validCoords.filter(Boolean).length * 1000 +
605609
Date.now()
606610
req.session.cooldown = cooldown
607611
return scannerApi(

server/src/services/DiscordClient.js

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -131,15 +131,20 @@ class DiscordClient {
131131
blockedGuildNames: new Set(),
132132
}
133133
const scanner = config.getSafe('scanner')
134+
perms.scannerCooldowns = {}
135+
134136
try {
135137
const guilds = user.guilds.map((guild) => guild.id)
136138
if (this.strategy.allowedUsers.includes(user.id)) {
137139
Object.keys(this.perms).forEach((key) => (perms[key] = true))
138140
perms.admin = true
139141
config.getSafe('webhooks').forEach((x) => permSets.webhooks.add(x.name))
140-
Object.keys(scanner).forEach(
141-
(x) => scanner[x]?.enabled && permSets.scanner.add(x),
142-
)
142+
Object.keys(scanner).forEach((x) => {
143+
if (scanner[x]?.enabled) {
144+
permSets.scanner.add(x)
145+
perms.scannerCooldowns[x] = 0
146+
}
147+
})
143148
log.info(
144149
HELPERS.custom(this.rmStrategy, '#7289da'),
145150
`User ${user.username} (${user.id}) in allowed users list, skipping guild and role check.`,
@@ -188,7 +193,21 @@ class DiscordClient {
188193
(x) => permSets.webhooks.add(x),
189194
)
190195
scannerPerms(userRoles, 'discordRoles', trialActive).forEach(
191-
(x) => permSets.scanner.add(x),
196+
(x) => {
197+
permSets.scanner.add(x)
198+
perms.scannerCooldowns[x] = scanner[x].rules.reduce(
199+
(acc, rule) => {
200+
if (
201+
userRoles.includes(rule?.role) &&
202+
rule.cooldown < acc
203+
) {
204+
return rule.cooldown
205+
}
206+
return acc
207+
},
208+
scanner[x].userCooldownSeconds,
209+
)
210+
},
192211
)
193212
}
194213
}),

server/src/services/TelegramClient.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,10 +112,28 @@ class TelegramClient {
112112
areaRestrictions: areaPerms(groups),
113113
webhooks: webhookPerms(groups, 'telegramGroups', trialActive),
114114
scanner: scannerPerms(groups, 'telegramGroups', trialActive),
115+
scannerCooldowns: {},
115116
},
116117
}
117118
if (this.strategy.allowedUsers?.includes(newUserObj.id)) {
118119
newUserObj.perms.admin = true
120+
Object.keys(newUserObj.perms.scanner).forEach((x) => {
121+
newUserObj.perms.scannerCooldowns[x] = 0
122+
})
123+
} else {
124+
const scanner = config.getSafe('scanner')
125+
126+
Object.keys(newUserObj.perms.scanner).forEach((mode) => {
127+
newUserObj.perms.scannerCooldowns[mode] = scanner[mode].rules.reduce(
128+
(acc, rule) => {
129+
if (rule.cooldown < acc) {
130+
return rule.cooldown
131+
}
132+
return acc
133+
},
134+
scanner[mode].userCooldownSeconds,
135+
)
136+
})
119137
}
120138
return newUserObj
121139
}

server/src/services/config.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,14 @@ if (Array.isArray(config.webhooks)) {
340340
}
341341
Object.keys(config.scanner || {}).forEach((key) => {
342342
config.scanner[key] = replaceBothAliases(config.scanner[key] || {})
343+
config.scanner[key]?.rules?.forEach((rule) => {
344+
rule.role = replaceAliases(rule.role)
345+
})
346+
if (config.scanner[key]?.rules) {
347+
config.scanner[key].rulesObj = Object.fromEntries(
348+
config.scanner[key]?.rules?.map((rule) => [rule.role, rule.cooldown]),
349+
)
350+
}
343351
})
344352

345353
if (

0 commit comments

Comments
 (0)