Skip to content

Commit d135411

Browse files
committed
assignment stability enhancement
1 parent 7b49816 commit d135411

1 file changed

Lines changed: 23 additions & 13 deletions

File tree

src/main/kotlin/dev/robothanzo/werewolf/service/impl/RoleServiceImpl.kt

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -114,15 +114,16 @@ class RoleServiceImpl(
114114
val playersList = ArrayList(session.players.values)
115115
playersList.sortBy { it.id }
116116

117-
val tasks: MutableList<ActionTask> = ArrayList()
117+
val priorityTasks: MutableList<ActionTask> = ArrayList()
118+
val notificationTasks: MutableList<ActionTask> = ArrayList()
118119

119120
for (player in playersList) {
120121
val member = pending[player.id - 1]
121122

122123
// 1. Prepare Discord Role Task
123124
val playerRole = guild.getRoleById(player.roleId)
124125
if (playerRole != null) {
125-
tasks.add(
126+
priorityTasks.add(
126127
ActionTask(
127128
guild.addRoleToMember(member, playerRole),
128129
"已套用身分組: " + playerRole.name + "" + member.effectiveName
@@ -185,12 +186,16 @@ class RoleServiceImpl(
185186
// 3. Prepare Nickname Task
186187
val newNickname = player.nickname
187188
if (member.effectiveName != newNickname) {
188-
tasks.add(
189-
ActionTask(
190-
member.modifyNickname(newNickname),
191-
"已更新暱稱: $newNickname"
189+
if (guild.selfMember.canInteract(member)) {
190+
priorityTasks.add(
191+
ActionTask(
192+
member.modifyNickname(newNickname),
193+
"已更新暱稱: $newNickname"
194+
)
192195
)
193-
)
196+
} else {
197+
statusLogger(" - [警告] 無法更新 ${member.effectiveName} 的暱稱 (權限不足)")
198+
}
194199
}
195200

196201
statusLogger(" - 已分配身分: " + rs.joinToString(", ") + if (player.jinBaoBao) " (金寶寶)" else "")
@@ -230,7 +235,7 @@ class RoleServiceImpl(
230235
ch?.sendMessage("身分順序已鎖定")?.queue()
231236
}, 120000)
232237
}
233-
tasks.add(
238+
notificationTasks.add(
234239
ActionTask(
235240
action,
236241
"已發送私密頻道訊息予 " + member.effectiveName
@@ -265,7 +270,7 @@ class RoleServiceImpl(
265270
if (channelId != 0L) {
266271
val channel = guild.getTextChannelById(channelId)
267272
if (channel != null) {
268-
tasks.add(
273+
notificationTasks.add(
269274
ActionTask(
270275
channel.sendMessage(notificationMsg).setEmbeds(summaryEmbed.build()),
271276
"已發送身分列表與控制台連結至頻道: " + channel.name
@@ -275,11 +280,16 @@ class RoleServiceImpl(
275280
}
276281
}
277282

278-
if (tasks.isNotEmpty()) {
279-
statusLogger("正在執行 Discord 變更 (共 " + tasks.size + " 項)...")
280-
tasks.runActions(statusLogger, progressCallback, 10, 95, 60)
283+
if (priorityTasks.isNotEmpty()) {
284+
statusLogger("正在執行 Discord 變更: 身分與暱稱 (共 " + priorityTasks.size + " 項)...")
285+
priorityTasks.runActions(statusLogger, progressCallback, 10, 60, 60)
286+
}
287+
288+
if (notificationTasks.isNotEmpty()) {
289+
statusLogger("正在執行 Discord 變更: 發送通知 (共 " + notificationTasks.size + " 項)...")
290+
notificationTasks.runActions(statusLogger, progressCallback, 60, 95, 120)
281291
} else {
282-
statusLogger("沒有偵測到需要執行的 Discord 變更")
292+
statusLogger("沒有偵測到需要執行的通知任務")
283293
progressCallback(95)
284294
}
285295

0 commit comments

Comments
 (0)