Mastodon: Difference between revisions

2,684 bytes added ,  18:31, 12 November 2022
no edit summary
(→‎Discord: new section)
 
No edit summary
Line 1: Line 1:
* API Documentation: https://docs.joinmastodon.org/api/ (scroll down, the different API endpoints are listed in the TOC under API Methods)
== Code Samples ==
Using [[Depends On::Mastodon.py]]
=== Make Masto Token ===
Most of the interesting parts of the API need you to log in underneath an account, and so for that you need to make an auth token:
From your masto instance's homepage...
* Preferences (in hamburger menu top right if page is narrow)
* Development tab
* New Application
The bot needs permissions (I'm honestly not sure you need to give all of <code>read</code>, but
Mastodon.py's <code>me()</code> method seems to need a lot of them. idk.)
- <code>read</code>
- <code>write:lists</code> - the bot only streams your posts by making a list with just you on it
- <code>write:statuses</code> - to xpost, dummy!
Then copy the resulting access token for use in configuration...
<syntaxhighlight lang="python">
from mastodon import Mastodon
client = Mastodon(
    access_token=MASTO_TOKEN,
    api_base_url=MASTO_URL
)
</syntaxhighlight>
'''''hacker voice:''''' ''I'm in''
=== Post! ===
Posting v easy.
<syntaxhighlight lang="python">
post = client.status_post("my post")
</syntaxhighlight>
And then to thread:
<syntaxhighlight lang="python">
second_post = client.status_post(
    "second post",
    in_reply_to_id=post
)
</syntaxhighlight>
=== Listen to a list of users ===
You can also listen to all the accounts that your profile follows, but usually on public instances you want to be respectful and have some sort of opt-in mechanism, and usually that means making a list of accounts that follow you.
Assuming you've already made a list named "my_list"... (see https://git.jon-e.net/jonny/masto-gitsocial-bridge/src/commit/6c65eaa30180dfa1a5995cead10d8ce3f9b2af49/masto_git_bridge/bot.py#L91-L95 for an example of making a list, in this case just with the ID of the bot on it, but you can also list accounts following the bot using [https://mastodonpy.readthedocs.io/en/stable/#mastodon.Mastodon.account_followers account_followers()])
Subclass the StreamListener and override its <code>on_update</code> method to handle new statuses. Then initialize it using the client we logged in with above
<syntaxhighlight lang="python">
from mastodon import StreamListener
class Listener(StreamListener):
    def on_update(self, status:dict):
        # do something....
        pass
# get our list
my_list = [l for l in client.lists() if l.get('title', '') == 'my_list'][0]
# start streaming our list, responding using on_update when there's a post
listener = Listener()
client.stream_list(
    my_list['id'],
    listener = listener
)
</syntaxhighlight>
== Discord ==
== Discord ==