o76923, to random
@o76923@kitty.social avatar

I wish was documented somewhere. The play stuff would be a lot easier to work with if I had any idea what functions, syntax, and parameters were without having to look at other plays and guess.

linuxenjoyer, to random
@linuxenjoyer@blahaj.zone avatar

Presenting: Quick send, a Misskey (and forks) plugin! (Tested in Sharkey)

This plugin lets you quickly send notes to select users! ​:blobcat_spin:​

It works by adding users to a send list. Simply click the 3 dots on their profile (either on their profile page, or in the on hover preview), and at the very bottom you'll see an option to add them (or remove them).

Then, on any note, click on the 3 dots, and at the bottom you'll have a button for each user you've added. ​:neocat_bongo_down:​

There are also options for clearing the list, and in the plugin's settings you can tell it to ask for confirmation, or to show a success dialog box.

To install go to settings > plugins > install and paste the source code:

/// @0.18.0
// This is licensed under MIT
### {
    name: "Quick send"
    version: "1.0.1"
    author: "@linuxenjoyer@blahaj.zone"
    description: "Send a note to your besties quickly"
    permissions: [ "write:notes" ]
    config: {
     show_success: {
            type: "boolean"
            label: "Show success dialog"
            description: "Makes a dialog pop up saying that it was sent. I'm not exactly sure how to do error handling, this is more to make sure the plugin didn't randomly crash."
            default: false
        }

     ask_confirmation: {
            type: "boolean"
            label: "Ask for confirmation"
            description: "Asks you if your really want to send the post."
            default: false
        }
    }
}

@save(obj) {
    Mk:save("user_send_list", obj)
}


@load() {
    var ls = Mk:load("user_send_list")
    if (ls == null) {
        save({})
        ls = {}
    }

    ls
}

// Simple function to format a username
@formatUsername(user) {
    var username = `@{user.username}`

    if (user.host != null) {
        username = `{username}@{user.host}`
    }

    username
}

@sendNote(note, userId) {
    // This is based on blahaj.zone's api-doc (sharkey)
    let res = Mk:api("notes/create" {
        visibility: "specified"
        renoteId: note.id
        visibleUserIds: [ userId ]
    })

    // TODO: Figure out error handling
    true
}

@getAction(username, userId) {
    @(note) {
        var should_send = !Plugin:config.ask_confirmation
        if (!should_send) {
            should_send = Mk:confirm(`Send post to {user}?` "" "question")
        }

        if (should_send) {
            let ok = sendNote(note, userId)

            // This is a little ugly but idrk how to tidy it up
            if (ok) {
                if (Plugin:config.show_success) {
                    Mk:dialog(`Sent note to {username}`, "", "success")
                }
            } else {
                Mk:dialog(`There was an error sending the note to {username}`, "", "error")
            }
        }
    }
}

// Underscores bc it's in global scope
let __ls = load()
each (let usr, Obj:keys(__ls)) {
    Plugin:register_note_action(`Send to {usr}`, getAction(usr, __ls[usr]))
}

Plugin:register_user_action("Add user to send list", @(user) {
    let username = formatUsername(user)

    let ls = load()

    if (ls[username] != null) {
        Mk:dialog(`{username} is already on the send list`, "", "error")
    } else {
        ls[username] = user.id
        save(ls)
        Mk:dialog(`Added {username} to the send list!`, "You might have to refresh to see the changes", "success")
    }
})

Plugin:register_user_action("Remove user from send list" @(user) {
    let username = formatUsername(user)

    let ls = load()
    if (ls[username] == null) {
        Mk:dialog(`{username} is not on the send list`, "", "error")
    } else {
        ls[username] = null
        save(ls)
        Mk:dialog(`Removed {username} from the send list!`, "You might have to refresh to see the changes", "success")
    }
})

Plugin:register_note_action("Clear user send list" @(note){
    if (Mk:confirm("Are you sure you want to clear the list?", "There's no way to undo this", "warning")) {
        save({})
        Mk:dialog("List cleared", "You might have to refresh to see the changes", "success")
    }
})

Plugin:register_user_action("Clear user send list" @(user){
    if (Mk:confirm("Are you sure you want to clear the list?", "There's no way to undo this", "warning")) {
        save({})
        Mk:dialog("List cleared", "You might have to refresh to see the changes", "success")
    }
})

It'll ask for permissions to create notes (it needs this to be able to send stuff) ​:blobcat_code:​

If you found it useful or have feature ideas/patches let me know ​:neocat_melt_reach:​

salano_ym, to random

urlのエスケープ欲しい

murasa, to fediverse

Does anyone writing / Plays (coded in ) know how to set the privacy/visibility setting of the form in Ui:C:postFormButton? I know I can set a content warning with cw, but I have no idea about setting the default visibility of the note generated by the Play. ​:Blobhaj_Thinking:​

I plan to crudely recreate the "poking" function back in the good 'ol days of . What I have in mind is, the user inputs the handle of the user, and then generates a note with Direct visibility to the target handle, a CW containing I poked you! Click to see how to poke back, and then of course the text containing whatever instructions I would write. Shouldn't be too complicated I think.

box464, to random

I've collected all my work on and into one place! It should be useful to anyone using and (for now) as well.

If anyone has questions about AiScript or any of the features I've examined in blogs, happy to share what I've learned.

https://catodon.social/@box464/pages/forkey_docs

salano_ym, to random
minybolito, to random
@minybolito@peculiar.florist avatar

quelqu'un a une idée de comment écrire un script aiscript pour ouvrir un lien dans un nouvel onglet (c'est possible même ?)

j'ai regardé un peu la doc mais vraiment je trouve rien :((

c'est pour me faire un bouton en widget

ShittyKopper, to random

extremely meh workaround if your / timeline keeps jumping around every time you click on a post:

  • switch to deck layout
  • set default navigation method to "open in new window"

now every time you click on a post it'll open up as a psuedo-popup that you can then maximize. and that popup doesn't touch your timeline at all, meaning it'll stay where it is in the background

i wish there was a way to automatically maximize windows. maybe can take care of that? no idea

ShittyKopper, to fediverse

exploring (? ? no idea what features come from where) rn, so far:

  • the birthday input uses mm/dd/yyyy, 0/10 absolutely unplayable
  • the no notifications bird is judging me and I Do Not Like It (/s)
  • THERE'S AN RSS READER HERE?!
  • DRIVE????
  • tbf after seeing this has file uploads pages seems like no big deal. yeah sure why not
  • the follow requests menu wants my attention despite being empty (i think this is the only bug i've seen so far)
  • i have no idea if i'm supposed to be allowed to see the server metrics widget
  • i have no idea what is but it seems vaguely threatening (in an "i will accidentally mess something up" kinda way)
  • rose pine is such a comfy color scheme

i am so lost and i kinda like it

box464, to random

Happy 20th Birthday to Calckey's own @kainoa
If you can, celebrate the day by showing your appreciation with a $20 contribution to Calckey.

​:ablobbonetada:​ 🎂 ​:ablobbonetada:​

box464, to random

Sooo I'm sitting in a hotel room kind of bored, decided to poke around with Calckey Pages and AiScript.

I'm not 100% sure this is going to work for y'all...but...try this out. It SHOULD list your own pages that you've created. Right now, there's a bug in Calckey where the pages kind of disappear 👻 after you save.

Would love to know what forgotten trash or treasures you find if it does work! I need some entertainment. 🗑️ 💎

https://calckey.social/@box464/pages/yourpages

box464, to random
@box464@mastodon.social avatar

Finishing up my Calckey Plugins week with a fun one. MFM (Misskey Flavoured Markdown) is quite an expressive art form and a great entry to coding, math, and styling (but having fun and not realizing your'e learning something) 🤫

Here I've created a plugin generator, which writes the AiScript code based on a few pieces of information provided by a user in a form.

https://box464.com/posts/calckey-snippets/

box464, to random

I'm happy to announce my final Calckey Plugin for this series. It's actually more than a plugin. It's a plugin generator!

Create a plugin that stores your favorite MFM art, a signature, your favorite emoji chain, or common replies (great for admins, I think!)

I appreciate the input I received from the MFM creator community and I'm already seeing some great stuff being built based on this code.

Keep creating and keep having fun. 💗

https://box464.com/posts/calckey-snippets/

jovikowi, to random

Test.

Output of @Kiko 's cool Python 3 script. 🎉

🦊 🦊
🦊 🦊
🦊 🦊
🦊 🦊

Output of the MFM_World.aiscript plugin based on that script (to be uploaded later when the server is happier about uploads). Pretty similar! 🎉

🦊 🦊
🦊 🦊
🦊 🦊
🦊 🦊

(618 chars center to /center)

jovikowi,

@Kiko

Here's the MFM_World.aiscript script.

Catonauts, to random

I wondered what´s "AiScript" in the settings and whether it has anything to do with Artificial Intelligence. Yeah, laugh at me all you want, I laugh with you! 😉

Anyway, I´m smarter now thanks to the following article about by @box464

https://box464.com/posts/calckey-plugins/

youronlyone,

@Catonauts @box464

I first encountered it in and I understood it as “LoveScript”. ​:cat_boost:​

The transliteration of the Nihongo word for love “あい” is “Ai”, since Misskey was created by a Japanese, I actually thought it was “LoveScript”. 😅

Though, if you think about it, or are better names than and . ​:blobboneblewobblehyper:​

(Anyway, off-topic LOL.)

box464,

@youronlyone @Catonauts Also kind of off topic but when I was trying to learn the basics of and having no luck, I gave in and tried ChatGPT to see what it knew about it. Which was a very confident nothing. I tried feeding it the documentation first and then asking questions but it spit out JavaScript mostly.

box464, to random

Are Calckey Pages and Misskey Pages the same thing? Or has Misskey gone in a different direction since the fork. Hard to follow what's happening here because it's mostly Japanese. Looks interesting tho! @kainoa @freeplay

https://misskey.io/play/9dy97kg3k0

box464, to random
@box464@mastodon.social avatar

Continuing my discovery of AiScript and Calckey Plugins with a new entry - “Lister”, which adds post actions in your timelines for adding accounts to your lists in a few clicks.

Check out the end of my blog post for some insights into the development process.

https://box464.com/posts/calckey-plugins-addtolist/

box464, to random

Are your Calckey lists listless? Do you yearn for 25% productivity gains in your everyday Calckey usage? Probably not, but my latest plugin may still be worth a look.

Add accounts to your favorite lists in just two clicks, directly from the timeline. 🖱 Setup is..a thing..but once it's done you're golden.

https://box464.com/posts/calckey-plugins-addtolist

box464, (edited ) to random
@box464@mastodon.social avatar

Continuing my dive into Calckey's Plugins with a "Share to Mastodon" action item. Using the plugin framework, I can add new menu items to various parts of the Calckey UI. And then open a new window to my generated url.

An interesting aspect is that the framework allows access to the Calckey API. Check the end of the post for the developer details if you're so inclined.

https://box464.com/posts/calckey-share-to-mastodon/

box464, to random

Did you know there are other platforms outside of Calckey ​:calckey:​? There's one called Mastodon ​:mastodon:​, and if you'd like to share posts from your Calckey timeline to Mastodon, I've got just the plugin for you!

https://box464.com/posts/calckey-share-to-mastodon/

box464,

This plugin is also a good demonstration of the possibilities of using and is my first dip into using the Mk:api call to retrieve data from the Calckey API and pass it through as data in the plugin. Additionally, I store variables in local storage and retrieve it as needed. Nifty!

box464, to random

how to use the Mk:api call in AiScript, and then how to save a value to local storage. I have no idea if is here to stay or not, there's certainly a lot going on with Calckey right now.

But having fun learning the language - it's almost like solving a mystery because the documentation is in a foreign language mostly and the good stuff is scattered all over. 😅

  • All
  • Subscribed
  • Moderated
  • Favorites
  • Leos
  • ngwrru68w68
  • magazineikmin
  • modclub
  • thenastyranch
  • hgfsjryuu7
  • Youngstown
  • slotface
  • everett
  • mdbf
  • rosin
  • kavyap
  • khanakhh
  • DreamBathrooms
  • provamag3
  • Backrooms
  • InstantRegret
  • normalnudes
  • ethstaker
  • cisconetworking
  • cubers
  • tacticalgear
  • osvaldo12
  • Durango
  • anitta
  • tester
  • GTA5RPClips
  • JUstTest
  • All magazines