Skip to content

Instantly share code, notes, and snippets.

@jerodsanto
Created March 11, 2021 15:19
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jerodsanto/126132dd65a8fe07951ce1f1e365bdbe to your computer and use it in GitHub Desktop.
Save jerodsanto/126132dd65a8fe07951ce1f1e365bdbe to your computer and use it in GitHub Desktop.
Deno/js code to pick 3 random winners from a channel using the Slack API
// connect to the Slack API
let slack = "https://changelog.slack.com/api"
let token = Deno.env.get("SLACK_TOKEN")
let channel = "C1YNE3WUX"
let url = new URL(`${slack}/conversations.members`)
url.searchParams.set("token", token)
url.searchParams.set("channel", channel)
// get a list of members from the jsparty channel
let response = await fetch(url)
let json = await response.json()
let members = json.members
while (json.response_metadata.next_cursor) {
url.searchParams.set("cursor", json.response_metadata.next_cursor)
response = await fetch(url)
json = await response.json()
members = members.concat(json.members)
}
console.log(members.length)
// select 3 random people from that list
let luckies = members.sort((a, b) => 0.5 - Math.random()).slice(0, 3)
// resolve user names from ids
url = new URL(`${slack}/users.info`)
url.searchParams.set("token", token)
for (let i = 0; i < luckies.length; i++) {
url.searchParams.set("user", luckies[i])
response = await fetch(url)
json = await response.json()
console.log(json.user.name)
}
@jerodsanto
Copy link
Author

Run with deno run --allow-env --allow-net giveaway.js

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment