Skip to content

Instantly share code, notes, and snippets.

@cablehead
Created September 4, 2024 23:52
Show Gist options
  • Save cablehead/a36bdb2ee8a7c98b8a00aaa6784728ef to your computer and use it in GitHub Desktop.
Save cablehead/a36bdb2ee8a7c98b8a00aaa6784728ef to your computer and use it in GitHub Desktop.
nushell - discord - bot - bookmarklet prototype
use xs2.nu *
.cat | stateful filter {messages: {} marked: {}} {
|state frame|
if $frame == null {
return {out: $state}
}
if $frame.topic != "discord.ws.recv" { return {} }
let message = ($frame | .cas $in.hash | from json)
if $message.op != 0 { return {} }
mut state = $state
match $message.t {
"MESSAGE_CREATE" => (
$state.messages = ($state.messages | insert $message.d.id $message.d.content))
"MESSAGE_UPDATE" => (
$state.messages = ($state.messages | upsert $message.d.id $message.d.content))
"MESSAGE_DELETE" => (
$state.marked = ($state.marked | reject -i $message.d.id))
"MESSAGE_REACTION_ADD" => (
if $message.d.emoji.name == "๐Ÿ”–" {
$state.marked = ($state.marked | insert $message.d.message_id true) }
)
"MESSAGE_REACTION_REMOVE" => (
if $message.d.emoji.name == "๐Ÿ”–" {
$state.marked = ($state.marked | reject -i $message.d.message_id) }
)
}
let messages = $state.messages
{state: $state}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment