@@ -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