|
28 | 28 | commandGetTodayRetrospectives: getTodayRetrospectives,
|
29 | 29 | commandGetScrumByDate: getScrumsByDate,
|
30 | 30 | commandGetRetrospectivesByDate: getRetrospectivesByDate,
|
| 31 | + commandRandomUserPick: getRandomUserByChannel, |
31 | 32 | }
|
32 | 33 | )
|
33 | 34 |
|
@@ -180,6 +181,56 @@ func getScrumsByDate(session *discordgo.Session, interaction *discordgo.Interact
|
180 | 181 | sendMessage(session, interaction, scrumsToString(date, scrums))
|
181 | 182 | }
|
182 | 183 |
|
| 184 | +// getRandomUserByChannel 채널에 있는 사용자 중 랜덤으로 한 명을 선택합니다. |
| 185 | +func getRandomUserByChannel(session *discordgo.Session, interaction *discordgo.InteractionCreate) { |
| 186 | + channel, err := session.Channel(interaction.ChannelID) |
| 187 | + // 채널 정보를 불러오는 중 오류가 발생하면 에러 메시지를 전송합니다. |
| 188 | + if err != nil { |
| 189 | + logErrorAndSendMessage(session, interaction, "채널을 불러오는 중 오류가 발생했습니다.", err) |
| 190 | + return |
| 191 | + } |
| 192 | + // 음성 채널이 아니면 에러 메시지를 전송합니다. |
| 193 | + if channel.Type != discordgo.ChannelTypeGuildVoice { |
| 194 | + sendMessage(session, interaction, "음성 채널에서만 사용할 수 있는 명령어입니다.") |
| 195 | + return |
| 196 | + } |
| 197 | + log.Printf("Channel type: %v", channel.Type) |
| 198 | + guild, err := session.State.Guild(channel.GuildID) |
| 199 | + // 서버 정보를 불러오는 중 오류가 발생하면 에러 메시지를 전송합니다. |
| 200 | + if err != nil { |
| 201 | + logErrorAndSendMessage(session, interaction, "서버 정보를 불러오는 중 오류가 발생했습니다.", err) |
| 202 | + return |
| 203 | + } |
| 204 | + var members []*discordgo.Member // 음성 채널에 있는 사용자 목록을 저장합니다. |
| 205 | + memberMap := make(map[string]*discordgo.Member) // 사용자 ID를 키로 사용자 정보를 저장합니다. |
| 206 | + for _, member := range guild.Members { |
| 207 | + memberMap[member.User.ID] = member |
| 208 | + } |
| 209 | + |
| 210 | + // 음성 채널에 있는 사용자 목록을 불러옵니다. |
| 211 | + for _, vs := range guild.VoiceStates { |
| 212 | + if vs.ChannelID == channel.ID { |
| 213 | + if member, ok := memberMap[vs.UserID]; ok { |
| 214 | + members = append(members, member) |
| 215 | + } |
| 216 | + } |
| 217 | + } |
| 218 | + // 음성 채널에 사용자가 없으면 에러 메시지를 전송합니다. |
| 219 | + if len(members) == 0 { |
| 220 | + sendMessage(session, interaction, "음성 채널에 사용자가 없습니다.") |
| 221 | + return |
| 222 | + } |
| 223 | + |
| 224 | + // 음성 채널에 있는 사용자 중 랜덤으로 한 명을 선택합니다. |
| 225 | + randomMember := members[util.PickRandomNumber(len(members))] |
| 226 | + // 사용자의 닉네임이 없으면 사용자 이름을 사용합니다. |
| 227 | + username := randomMember.Nick |
| 228 | + if username == "" { |
| 229 | + username = randomMember.User.GlobalName |
| 230 | + } |
| 231 | + sendMessage(session, interaction, fmt.Sprintf("랜덤으로 선택된 사람은 %s입니다!", username)) |
| 232 | +} |
| 233 | + |
183 | 234 | // retrospectiveToString 회고 목록을 문자열로 변환합니다.
|
184 | 235 | func retrospectiveToString(date time.Time, retrospectives []*model.RetrospectiveDto) string {
|
185 | 236 | var builder strings.Builder
|
|
0 commit comments