From 011ec2c9a8e24616fdba8005e5e57d196b18be14 Mon Sep 17 00:00:00 2001 From: notagoat Date: Sun, 19 May 2019 13:31:42 +0100 Subject: [PATCH] Added the ability to pin and unpin toots with the pin and unpin command. Would like to clean up code as well as possibly toot confirmation and error messages --- main.py | 5 +++-- reply.py | 33 +++++++++++++++++++++++++-------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/main.py b/main.py index 011a5b4..613e0de 100755 --- a/main.py +++ b/main.py @@ -11,8 +11,9 @@ import os, sqlite3, signal, sys, json, re, shutil import requests import functions -scopes = ["read:statuses", "read:accounts", "read:follows", "write:statuses", "read:notifications"] +scopes = ["read:statuses", "read:accounts", "read:follows", "write:statuses", "read:notifications", "write:accounts"] #cfg defaults + cfg = { "site": "https://botsin.space", "cw": None, @@ -21,10 +22,10 @@ cfg = { "mention_handling": 1, "max_thread_length": 15 } + try: cfg.update(json.load(open('config.json', 'r'))) except: - shutil.copy2("config.sample.json", "config.json") cfg.update(json.load(open('config.json', 'r'))) diff --git a/reply.py b/reply.py index 060a673..ad982ca 100755 --- a/reply.py +++ b/reply.py @@ -38,6 +38,7 @@ class ReplyListener(mastodon.StreamListener): posts = 0 for post in context['ancestors']: if post['account']['id'] == me: + pin = post["id"] #Only used if pin is called, but easier to call here posts += 1 if posts >= cfg['max_thread_length']: # stop replying @@ -45,14 +46,30 @@ class ReplyListener(mastodon.StreamListener): return mention = extract_toot(notification['status']['content']) - toot = functions.make_toot(True)['toot'] #generate a toot - toot = acct + " " + toot #prepend the @ - print(acct + " says " + mention) #logging - visibility = notification['status']['visibility'] - if visibility == "public": - visibility = "unlisted" - client.status_post(toot, post_id, visibility=visibility, spoiler_text = cfg['cw']) #send toost - print("replied with " + toot) #logging + if (mention == "pin") or (mention == "unpin"): #check for keywords + print("Found pin/unpin") + #get a list of people the bot is following + validusers = client.account_following(me) + for user in validusers: + if user["id"] == notification["account"]["id"]: #user is #valid + print("User is valid") + if mention == "pin": + print("pin received, pinning") + client.status_pin(pin) + else: + print("unpin received, unpinning") + client.status_unpin(pin) + else: + print("User is not valid") + else: + toot = functions.make_toot(True)['toot'] #generate a toot + toot = acct + " " + toot #prepend the @ + print(acct + " says " + mention) #logging + visibility = notification['status']['visibility'] + if visibility == "public": + visibility = "unlisted" + client.status_post(toot, post_id, visibility=visibility, spoiler_text = cfg['cw']) #send toost + print("replied with " + toot) #logging rl = ReplyListener() client.stream_user(rl) #go!