mirror of
https://github.com/Lynnesbian/FediBooks/
synced 2024-11-25 16:48:58 +00:00
Compare commits
9 commits
fc8be5db40
...
001dbadf9e
Author | SHA1 | Date | |
---|---|---|---|
001dbadf9e | |||
c9dbc6fba4 | |||
a34cf43f75 | |||
|
aebe495282 | ||
03da5cb44f | |||
|
4cddfdd50b | ||
421cc04e74 | |||
e8c666c711 | |||
f46e954f5a |
8 changed files with 67 additions and 7 deletions
6
.dockerignore
Normal file
6
.dockerignore
Normal file
|
@ -0,0 +1,6 @@
|
|||
__pycache__
|
||||
config.json
|
||||
planning.txt
|
||||
README.md
|
||||
.git
|
||||
.vscode
|
4
Dockerfile
Normal file
4
Dockerfile
Normal file
|
@ -0,0 +1,4 @@
|
|||
FROM python:3.7-slim-buster
|
||||
WORKDIR /fedibooks
|
||||
COPY . fedibooks
|
||||
RUN pip install -r requirements.txt
|
15
docker-compose.yml
Normal file
15
docker-compose.yml
Normal file
|
@ -0,0 +1,15 @@
|
|||
version: '3'
|
||||
services:
|
||||
fedibooks:
|
||||
build: .
|
||||
links:
|
||||
- db
|
||||
ports:
|
||||
5000:5000
|
||||
db:
|
||||
image: mariadb/server:10.4
|
||||
environment:
|
||||
MARIADB_ROOT_PASSWORD: root
|
||||
MARIADB_DATABASE: fedibooks
|
||||
MARIADB_USER: fedibooks
|
||||
MARIADB_PASSWORD: fedibooks
|
|
@ -1,6 +1,6 @@
|
|||
Mastodon.py==1.4.6
|
||||
markovify==0.7.1
|
||||
beautifulsoup4==4.7.1
|
||||
markovify==0.7.2
|
||||
beautifulsoup4==4.8.0
|
||||
requests==2.22.0
|
||||
Flask==1.1.1
|
||||
flask-mysqldb==0.2.0
|
||||
|
|
39
service.py
39
service.py
|
@ -1,11 +1,35 @@
|
|||
#!/usr/bin/env python3
|
||||
import MySQLdb
|
||||
from mastodon import Mastodon
|
||||
from multiprocessing import Pool
|
||||
import json
|
||||
import functions
|
||||
|
||||
cfg = json.load(open('config.json'))
|
||||
|
||||
def update_icon(bot):
|
||||
db = MySQLdb.connect(
|
||||
host = cfg['db_host'],
|
||||
user=cfg['db_user'],
|
||||
passwd=cfg['db_pass'],
|
||||
db=cfg['db_name'],
|
||||
use_unicode=True,
|
||||
charset="utf8mb4"
|
||||
)
|
||||
|
||||
print("Updating cached icon for {}".format(bot['handle']))
|
||||
client = Mastodon(
|
||||
client_id = bot['client_id'],
|
||||
client_secret = bot['client_secret'],
|
||||
access_token = bot['secret'],
|
||||
api_base_url = "https://{}".format(bot['handle'].split("@")[2])
|
||||
)
|
||||
|
||||
avatar = client.account_verify_credentials()['avatar']
|
||||
c = db.cursor()
|
||||
c.execute("UPDATE bots SET icon = %s, icon_update_time = CURRENT_TIMESTAMP() WHERE handle = %s", (avatar, bot['handle']))
|
||||
db.commit()
|
||||
|
||||
print("Establishing DB connection")
|
||||
db = MySQLdb.connect(
|
||||
host = cfg['db_host'],
|
||||
|
@ -23,12 +47,23 @@ cursor.execute("DELETE FROM fedi_accounts WHERE handle NOT IN (SELECT fedi_id FR
|
|||
db.commit()
|
||||
|
||||
print("Generating posts")
|
||||
cursor.execute("SELECT handle FROM bots WHERE enabled = TRUE AND TIMESTAMPDIFF(MINUTE, last_post, CURRENT_TIMESTAMP()) > post_frequency")
|
||||
cursor.execute("SELECT handle FROM bots WHERE enabled = TRUE AND TIMESTAMPDIFF(MINUTE, last_post, CURRENT_TIMESTAMP()) >= post_frequency")
|
||||
bots = cursor.fetchall()
|
||||
|
||||
with Pool(cfg['service_threads']) as p:
|
||||
p.map(functions.make_post, bots)
|
||||
|
||||
#TODO: other cron tasks should be done here, like updating profile pictures
|
||||
print("Updating cached icons")
|
||||
dc = db.cursor(MySQLdb.cursors.DictCursor)
|
||||
dc.execute("""
|
||||
SELECT handle, instance_type, client_id, client_secret, secret
|
||||
FROM bots
|
||||
INNER JOIN credentials
|
||||
ON bots.credentials_id = credentials.id
|
||||
WHERE TIMESTAMPDIFF(HOUR, icon_update_time, CURRENT_TIMESTAMP()) > 2""")
|
||||
bots = dc.fetchall()
|
||||
|
||||
with Pool(cfg['service_threads']) as p:
|
||||
p.map(update_icon, bots)
|
||||
|
||||
db.commit()
|
||||
|
|
|
@ -75,7 +75,7 @@ body {
|
|||
}
|
||||
.panel-text {
|
||||
flex-grow: 1;
|
||||
margin: 0 0 10px 10px;
|
||||
margin: 0 0 10px 15px;
|
||||
}
|
||||
.panel-name {
|
||||
font-size: 1.8em;
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
<div class="container" style="min-height: 300px;">
|
||||
{% for bot in bots %}
|
||||
<div class="row light">
|
||||
<div class="panel-icon {{ "online" if bot['enabled'] else "offline"}}"></div>
|
||||
<div class="panel-icon {{ "online" if bot['enabled'] else "offline"}}" style="{{ "background-image: url('" + bot['icon'] + "')" if bot['icon'] else "" }}"></div>
|
||||
<div class="panel-text">
|
||||
{% set handle_list = bot['handle'].split('@') %}
|
||||
<div class="panel-name">@{{ handle_list[1] }}<span class="subtle tiny">@{{ handle_list[2] }}</span></div>
|
||||
|
|
2
webui.py
2
webui.py
|
@ -44,7 +44,7 @@ def home():
|
|||
c.execute("SELECT COUNT(*) FROM `bots` WHERE user_id = %s AND enabled = TRUE", (session['user_id'],))
|
||||
active_count = c.fetchone()[0]
|
||||
dc = mysql.connection.cursor(MySQLdb.cursors.DictCursor)
|
||||
dc.execute("SELECT `handle`, `enabled`, `last_post`, `post_frequency` FROM `bots` WHERE user_id = %s", (session['user_id'],))
|
||||
dc.execute("SELECT `handle`, `enabled`, `last_post`, `post_frequency`, `icon` FROM `bots` WHERE user_id = %s", (session['user_id'],))
|
||||
bots = dc.fetchall()
|
||||
dc.close()
|
||||
|
||||
|
|
Loading…
Reference in a new issue