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.
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! 😉
@youronlyone@Catonauts Also kind of off topic but when I was trying to learn the basics of #AiScript 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.
My #CalckeyPlugin is working! Figured out a few more things
#TIL that Calckey utilizes #AiScript version 0.11.1, which helped guide me to some issues I was having with syntax.
I figured out how to add debug lines (console.log) and have them appear in the Developer's Console, which helped debug immensely.
Going to document all my findings, create my first Codeberg repo, and release it soon - I do have a day job and a need for sleep, so it may be a few days. Bear with me. 😅
#TIL how to use the Mk:api call in AiScript, and then how to save a value to local storage. I have no idea if #AiScript 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. 😅
extremely meh workaround if your #CalcKey / #FireFish 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 #AiScript can take care of that? no idea
Calckey Plugins are an overlooked component of the platform. Mostly because documentation is scarce about them. No more! Here's my first post in a series on plugins, introducing the concept and providing a guide to ensure users can make informed decisions about installing plugins they find in the community....
Didn't get quite as far as I wanted with a #Calckey#AiScript plugin tonight, but I'm close! This plugin will intake a phrase, then set a background and sparkle effect on the phrase in posts where it is found.
Calckey Plugins are an overlooked component of the platform. Mostly because documentation is scarce about what they are and how to use them. No more!
Here's my first post in a series on plugins, introducing the concept and providing a guide to ensure users can make informed decisions about installing plugins they find in the community.
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!
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. 🗑️ 💎
Listen, do you have lists of lists? Listless for efficiency? The Lister Calckey plugin is made for you. Quickly add users to a list right from a note in just two clicks and improve your efficiency quotas by…some large boring amount. Or just try it for fun....
I wish #AiScript 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.
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
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:
Does anyone writing #Misskey / #Sharkey Plays (coded in #AiScript) 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 #Facebook. 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.
Understanding Calckey Plugins (box464.com)
Calckey Plugins are an overlooked component of the platform. Mostly because documentation is scarce about them. No more! Here's my first post in a series on plugins, introducing the concept and providing a guide to ensure users can make informed decisions about installing plugins they find in the community....
Lister for Calckey (box464.com)
Listen, do you have lists of lists? Listless for efficiency? The Lister Calckey plugin is made for you. Quickly add users to a list right from a note in just two clicks and improve your efficiency quotas by…some large boring amount. Or just try it for fun....