refactor code

This commit is contained in:
Dryusdan 2018-05-16 13:36:41 +02:00
parent a14a2af628
commit 4ae60c4abf
7 changed files with 155 additions and 46 deletions

20
TootHTMLParser.py Normal file
View File

@ -0,0 +1,20 @@
from html.parser import HTMLParser
class TootHTMLParser(HTMLParser):
def __init__(self):
super().__init__()
self.txt = ""
def handle_data(self, data):
self.txt += str(data).lstrip().rstrip().lower() + " "
#
#
# content = ""
# with open("input") as f:
# content = f.readlines()
# content = set(content)
# parser = TootHTMLParser()
# for word in content:
# parser.feed(word)
# with open("output", "w+") as f:
# f.write(parser.txt)

BIN
TootHTMLParser.pyc Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

23
activity.log Normal file
View File

@ -0,0 +1,23 @@
2018-05-16 13:24:47,830 :: DEBUG :: Starting new HTTPS connection (1): miaou.drycat.fr
2018-05-16 13:24:47,875 :: DEBUG :: https://miaou.drycat.fr:443 "GET /api/v1/instance/ HTTP/1.1" 200 None
2018-05-16 13:25:56,391 :: DEBUG :: Starting new HTTPS connection (1): miaou.drycat.fr
2018-05-16 13:25:56,444 :: DEBUG :: https://miaou.drycat.fr:443 "GET /api/v1/instance/ HTTP/1.1" 200 None
2018-05-16 13:27:04,797 :: DEBUG :: Starting new HTTPS connection (1): miaou.drycat.fr
2018-05-16 13:27:04,870 :: DEBUG :: https://miaou.drycat.fr:443 "GET /api/v1/instance/ HTTP/1.1" 200 None
2018-05-16 13:27:12,527 :: DEBUG :: Starting new HTTPS connection (1): miaou.drycat.fr
2018-05-16 13:27:12,584 :: DEBUG :: https://miaou.drycat.fr:443 "GET /api/v1/instance/ HTTP/1.1" 200 None
2018-05-16 13:27:18,744 :: DEBUG :: Starting new HTTPS connection (1): miaou.drycat.fr
2018-05-16 13:27:18,807 :: DEBUG :: https://miaou.drycat.fr:443 "GET /api/v1/instance/ HTTP/1.1" 200 None
2018-05-16 13:28:19,151 :: DEBUG :: Starting new HTTPS connection (1): miaou.drycat.fr
2018-05-16 13:28:19,324 :: DEBUG :: https://miaou.drycat.fr:443 "GET /api/v1/instance/ HTTP/1.1" 200 None
2018-05-16 13:28:26,505 :: DEBUG :: Starting new HTTPS connection (1): miaou.drycat.fr
2018-05-16 13:28:26,565 :: DEBUG :: https://miaou.drycat.fr:443 "GET /api/v1/instance/ HTTP/1.1" 200 None
2018-05-16 13:28:30,291 :: DEBUG :: Starting new HTTPS connection (1): miaou.drycat.fr
2018-05-16 13:28:30,349 :: DEBUG :: https://miaou.drycat.fr:443 "GET /api/v1/instance/ HTTP/1.1" 200 None
2018-05-16 13:28:34,072 :: DEBUG :: Starting new HTTPS connection (1): miaou.drycat.fr
2018-05-16 13:28:34,134 :: DEBUG :: https://miaou.drycat.fr:443 "GET /api/v1/instance/ HTTP/1.1" 200 None
2018-05-16 13:28:42,157 :: DEBUG :: Starting new HTTPS connection (1): miaou.drycat.fr
2018-05-16 13:28:42,224 :: DEBUG :: https://miaou.drycat.fr:443 "GET /api/v1/instance/ HTTP/1.1" 200 None
2018-05-16 13:30:44,355 :: DEBUG :: Starting new HTTPS connection (1): miaou.drycat.fr
2018-05-16 13:30:44,407 :: DEBUG :: https://miaou.drycat.fr:443 "GET /api/v1/instance/ HTTP/1.1" 200 None

152
bot.py
View File

@ -3,12 +3,55 @@
# -*- coding: utf-8 -*-
from mastodon import Mastodon, StreamListener
import requests, os, random, sys, time, json, logging, socket, multiprocessing, tempfile
from TootHTMLParser import TootHTMLParser
import requests, os, random, sys, time, json, logging, argparse
from logging.handlers import RotatingFileHandler
from pprint import pprint
# Mastodon Stream Listener defines functions to react when something happens on Mastodon. We inherit it.
class BotListener(StreamListener):
def __init__(self, mastodon):
print("init")
StreamListener.__init__(self)
self.mastodon = mastodon
pprint(vars(mastodon.stream_user(StreamListener)))
def handle_mention(self, status):
log.debug('Got a mention!')
def on_notification(self, notification):
log.debug("here")
for thread in self.threads:
if(not thread.is_alive()):
logging.info("removing thread" + str(thread))
self.threads.remove(thread)
#We react to mentions only
if(notification['type'] != 'mention'):
log.info("nevermind, it's not a mention")
return
#So there is a toot !
status = notification['status']
#And there is a text in this toot. But it is mixed with HTML we don't want so we get rid of it.
content = str(status["content"])
parser = TootHTMLParser()
parser.feed(content)
content = (parser.txt).lower()
logging.info(content)
atUser = status["account"]["acct"]
userInfo = self.associateToUser(atUser)
#If the toot is not in answer to a drawing
answerTo = status["in_reply_to_id"]
def get_parameter( parameter, file_path ):
# Check if secrets file exists
if not os.path.isfile(file_path):
print("File %s not found, exiting."%file_path)
log.error("File %s not found, exiting."%file_path)
sys.exit(0)
# Find parameter in file
@ -18,52 +61,75 @@ def get_parameter( parameter, file_path ):
return line.replace(parameter + ":", "").strip()
# Cannot find parameter, exit
print(file_path + " Missing parameter %s "%parameter)
log.critical(file_path + " Missing parameter %s "%parameter)
sys.exit(0)
def driver(mastodon, log, heartbeat_filename, pid_filename):
try:
listener = myListener(mastodon, log, heartbeat_filename, pid_filename)
log.info("Driver/listener starts, PID %s" % os.getpid())
mastodon.stream_user(listener)
except Exception as error:
log.critical("Unexpected error in the driver \"%s\"" % error)
def post_img(mastodon, text, visibility, logging):
file = random.choice(os.listdir(img_path+"/"))
image_byte = open(img_path+"/"+file, "rb").read()
secrets_filepath = "secrets/secrets.txt"
uc_client_id = get_parameter("client_id", secrets_filepath)
uc_client_secret = get_parameter("client_secret", secrets_filepath)
uc_access_token = get_parameter("access_token", secrets_filepath)
mastodon_hostname = get_parameter("mastodon_hostname", secrets_filepath)
config_file = "config.txt"
img_path = get_parameter("img_path", config_file)
mastodon = Mastodon(
client_id = uc_client_id,
client_secret = uc_client_secret,
access_token = uc_access_token,
api_base_url = 'https://' + mastodon_hostname,
)
file = random.choice(os.listdir(img_path+"/"))
image_byte = open(img_path+"/"+file, "rb").read()
if file[-3:] == "jpe":
mime = "image/jpeg"
else :
if file[-3:] == "jpg":
if file[-3:] == "jpe":
mime = "image/jpeg"
else :
if file[-3:] == "png":
mime = "image/png"
if file[-3:] == "jpg":
mime = "image/jpeg"
else :
if file[-3:] == "gif":
mime = "image/gif"
if file[-3:] == "png":
mime = "image/png"
else :
if file[-3:] == "gif":
mime = "image/gif"
media_dict = mastodon.media_post(image_byte, mime)
#text.encode('utf-8').strip()
mastodon.status_post("", None, media_ids=[media_dict], sensitive=True, visibility='', spoiler_text="#NSFW")
media_dict = mastodon.media_post(image_byte, mime)
mastodon.status_post("", None, media_ids=[media_dict], sensitive=True, visibility='', spoiler_text="#NSFW")
def init(config, secrets):
log = logging.getLogger()
log.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s :: %(levelname)s :: %(message)s')
file_handler = RotatingFileHandler('activity.log', 'a', 1000000, 1)
file_handler.setLevel(logging.DEBUG)
file_handler.setFormatter(formatter)
log.addHandler(file_handler)
stream_handler = logging.StreamHandler()
stream_handler.setLevel(logging.DEBUG)
log.addHandler(stream_handler)
uc_client_id = get_parameter("client_id", secrets)
uc_client_secret = get_parameter("client_secret", secrets)
uc_access_token = get_parameter("access_token", secrets)
mastodon_hostname = get_parameter("mastodon_hostname", secrets)
img_path = get_parameter("img_path", config)
mastodon = Mastodon(
client_id = uc_client_id,
client_secret = uc_client_secret,
access_token = uc_access_token,
api_base_url = 'https://' + mastodon_hostname,
)
def run(mastodon, log):
log.info("Start streaming")
listener = BotListener(mastodon, logging)
mastodon.stream_user(listener)
#post_img(mastodon, "NSFW", 1)
def main():
config_file = "config.txt"
secrets_filepath = "secrets/secrets.txt"
init(config_file, secrets_filepath)
parser = argparse.ArgumentParser()
parser.add_argument('command', type=str, choices=['img', 'stream'])
args = parser.parse_args()
if args.command == 'img':
post_img(mastodon, "NSFW", 1, log)
elif args.command == 'stream':
run(mastodon, log)
main()

View File

@ -1,4 +1,4 @@
client_id: 3c6ae74d9d01b03a808885a4e33a0d93466153d8face26248b8ff7437abda1b7
client_secret: 0fbfb8ce41237e40b6dac1ff56eb4e16ad2185753ad4237fc528498551bd3c32
access_token: cf4eb940c80e262a6898cdbd39c180c1af08cac11cf5b85c7613c33ae932749e
client_id: 53b2525d5723a226f903862cf725bc60d6fb3199a8cd4b85950b53924109a17f
client_secret: 9c0c5411adea85147fa35ffbfd20f4dd78af6dd999bec6a8ca9d1d27fc0f2d78
access_token: 55d80d7d594734393f2a0d845a1700743f531637130e729194dbe7537cb43ad4
mastodon_hostname: miaou.drycat.fr