From af0252f476f641bad7ec32b079c39467ab7c4395 Mon Sep 17 00:00:00 2001 From: Lynne Date: Sat, 27 Oct 2018 23:27:04 +1000 Subject: [PATCH] first working version (i hope) --- main.py | 59 +++++++++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 47 insertions(+), 12 deletions(-) diff --git a/main.py b/main.py index 9cd17b0..0660fbe 100755 --- a/main.py +++ b/main.py @@ -9,24 +9,59 @@ import requests from mastodon import Mastodon import json +cfg = json.load(open('config.json', 'r')) + client = Mastodon( client_id=cfg['client']['id'], client_secret = cfg['client']['secret'], access_token=cfg['secret'], api_base_url=cfg['site']) +def extract_toot(toot): + #copied from main.py, see there for comments + soup = BeautifulSoup(toot, "html.parser") + for lb in soup.select("br"): + lb.insert_after("\n") + lb.decompose() + for p in soup.select("p"): + p.insert_after("\n") + p.unwrap() + for ht in soup.select("a.hashtag"): + ht.unwrap() + for link in soup.select("a"): + link.insert_after(link["href"]) + link.decompose() + text = map(lambda a: a.strip(), soup.get_text().strip().split("\n")) + text = "\n".join(list(text)) + text = re.sub("https?://([^/]+)/(@[^ ]+)", r"\2@\1", text) #put mentions back in + text = re.sub("^@[^@]+@[^ ]+ *", r"", text) #...but remove the initial one + text = text.lower() #for easier matching + return text -kind = 'general' -if kind == 'images': - r = requests.get("https://searx.lynnesbian.space/?category_images=1&q={}&format=json".format(q)) -else: - r = requests.get("https://searx.lynnesbian.space/?q={}&format=json".format(q)) -j = r.json() +class ReplyListener(mastodon.StreamListener): + def on_notification(self, notification): + if notification['type'] == 'mention': + acct = "@" + notification['account']['acct'] + post_id = notification['status']['id'] + mention = extract_toot(notification['status']['content']) + print(acct + " says " + mention) -if kind == 'images': - text = "Here's what I found by searching for images with the query \"{}\".".format(q) -else: - result = j['results'][0] - text = result['title'] + "\n" + result['url'] + "\n" + result['content'] + "\n" + "(Score: {})".format(result['score']) + kind = 'general' #todo: support for images + if kind == 'images': + r = requests.get("https://searx.lynnesbian.space/?category_images=1&q={}&format=json".format(q)) + else: + r = requests.get("https://searx.lynnesbian.space/?q={}&format=json".format(q)) + j = r.json() -print(text) + if kind == 'images': + toot = "Here's what I found by searching for images with the query \"{}\".".format(q) + else: + result = j['results'][0] + toot = result['title'] + "\n" + result['url'] + "\n" + result['content'] + "\n" + "(Score: {})\nMore results: {}{}".format(result['score'], "https://searx.lynnesbian.space/?q=", q) + + toot = acct + " " + toot + visibility = notification['status']['visibility'] + if visibility == "public": + visibility = "unlisted" + client.status_post(toot, post_id, visibility=visibility) + print("replied with " + toot)