Skip to content

Instantly share code, notes, and snippets.

@bbstilson
Created December 1, 2020 22:19
Show Gist options
  • Save bbstilson/f6a3c4ae9e50152be7df445444979f8d to your computer and use it in GitHub Desktop.
Save bbstilson/f6a3c4ae9e50152be7df445444979f8d to your computer and use it in GitHub Desktop.
import $ivy.`io.circe::circe-core:0.12.3`
import $ivy.`io.circe::circe-generic:0.12.3`
import $ivy.`io.circe::circe-parser:0.12.3`
import $ivy.`org.scala-lang.modules::scala-parallel-collections:1.0.0`
import ammonite.ops._
import scala.collection.parallel.CollectionConverters._
import io.circe._, io.circe.generic.auto._, io.circe.parser._, io.circe.syntax._
import scala.jdk.CollectionConverters._
import scala.util._
object EmojiMover {
val envvars = System.getenv().asScala
val emojiDir = {
val d = os.pwd / "emojis"
if (!os.exists(d)) os.makeDir(d)
d
}
// User Token Scopes -> OAuth Scope -> emoji:read
val slackToken = envvars("SLACK_TOKEN")
val mattermostUrl = envvars("MATTERMOST_SERVER_URL")
val mattermostToken = envvars("MATTERMOST_TOKEN")
val mattermostId = envvars("MATTERMOST_CREATOR_ID")
case class SlackResponse(emoji: Map[String, String])
def run(): Unit = {
downloadFromSlack()
uploadToMattermost()
}
def uploadToMattermost(): Unit = {
os.list(emojiDir).par.map { img =>
val emoji = Map(
"name" -> img.last.split('.').head,
"creator_id" -> mattermostId
).asJson.noSpaces
Try { requests.post(
s"https://$mattermostUrl/api/v4/emoji",
headers = Map(
"Authorization" -> s"Bearer $mattermostToken"
),
data = requests.MultiPart(
requests.MultiItem("emoji", emoji),
requests.MultiItem("image", os.read.bytes(img), "image")
)
) }
}.collect { case Failure(ex) => ex.getMessage }
.foreach(println)
}
def downloadFromSlack(): Unit = {
val resp = requests.get(
"https://slack.com/api/emoji.list",
headers = Map(
"Authorization" -> s"Bearer $slackToken"
)
).text()
val emojis = decode[SlackResponse](resp).right.get.emoji.toList
emojis
.filterNot { case (_, url) => url.startsWith("alias") }
.par
.foreach { case (name, url) =>
val ext = url.split('.').last
os.write(
emojiDir / s"$name.$ext",
requests.get.stream(url)
)
}
}
}
EmojiMover.run()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment