package social.gensokyo.discordbot
package listeners
import ackcord.EventListenerMessage.findCache
import ackcord.requests._
import ackcord.syntax._
import ackcord.data.{ Guild, PartialEmoji, RoleId }
import ackcord.{ APIMessage, DiscordClient, EventListener, EventsController, TextChannelEventListenerMessage }
import ackcord.requests.{ AddGuildMemberRole, Requests }
import akka.NotUsed
import social.gensokyo.discordbot.roleassign.RoleAssign
class Reactions(requests: Requests)(implicit client: DiscordClient) extends EventsController(requests) {
private def getEmojiName(emoji: PartialEmoji): Option[String] = emoji match {
case PartialEmoji(None, emojiName, None) => emojiName
case PartialEmoji(Some(_), emojiName, None) => emojiName.map(en => s":$en:")
case _ => None
}
val onUserReactAddRole: EventListener[APIMessage.MessageReactionAdd, NotUsed] = TextChannelEvent.on[APIMessage.MessageReactionAdd].withRequestOpt { m =>
m.event.messageId match {
case id if id.toString == RoleAssign.textId =>
getEmojiName(m.event.emoji)
.flatMap { emojiName =>
RoleAssign.getRole(emojiName).flatMap { roleId =>
m.event.guild.map { guild =>
AddGuildMemberRole(guild.id, m.event.userId, RoleId(roleId))
}
}
}
case _ => None
}
}
val onUserReactRemoveRole: EventListener[APIMessage.MessageReactionRemove, NotUsed] = TextChannelEvent.on[APIMessage.MessageReactionRemove].withRequestOpt { m =>
m.event.messageId match {
case id if id.toString == RoleAssign.textId =>
getEmojiName(m.event.emoji)
.flatMap { emojiName =>
RoleAssign.getRole(emojiName).flatMap { roleId =>
m.event.guild.map { guild =>
RemoveGuildMemberRole(guild.id, m.event.userId, RoleId(roleId))
}
}
}
case _ => None
}
}
}