prima aggiunta

This commit is contained in:
jops 2020-11-23 00:41:23 +01:00
parent e6e8944516
commit bf7cf01392
5 changed files with 99 additions and 0 deletions

14
.env.sample Normal file
View file

@ -0,0 +1,14 @@
# Mastodon Instance Base URL
INSTANCE_BASE="https://yourmastodon.instance"
# Values from Development Application
CLIENT_ID="xxxxxx"
CLIENT_SECRET="xxxxxx"
ACCESS_TOKEN="xxxxxx"
# Welcome message format string.
# {username} will put the user's name.
# {useracct} will use the user's acct value, which on local instances should be identical to the {username}.
WELCOME_MESSAGE="Welcome, @{username}, to this instance!"
# Welcome message visibility: 'direct', 'private', 'unlisted', 'public'
MESSAGE_VISIBILITY="unlisted"
# How long in seconds to wait between checks
WAIT_TIME=300

15
Dockerfile Normal file
View file

@ -0,0 +1,15 @@
FROM python:3
RUN mkdir /data
WORKDIR "/usr/src/app"
ENV IS_DOCKER 1
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD [ "python", "./bot.py" ]
VOLUME /data

1
last_id.txt Normal file
View file

@ -0,0 +1 @@
0

2
requirements.txt Normal file
View file

@ -0,0 +1,2 @@
Mastodon.py==1.3.1
python-dotenv==0.9.1

67
welcomebot.py Normal file
View file

@ -0,0 +1,67 @@
from mastodon import Mastodon
from dotenv import load_dotenv
from pathlib import Path
import os
import time
load_dotenv()
INSTANCE_BASE = os.getenv('INSTANCE_BASE')
CLIENT_ID = os.getenv('CLIENT_ID')
CLIENT_SECRET = os.getenv('CLIENT_SECRET')
ACCESS_TOKEN = os.getenv('ACCESS_TOKEN')
WELCOME_MESSAGE = os.getenv('WELCOME_MESSAGE', 'Welcome to the instance, @{username}!').replace("\\n","\n")
MESSAGE_VISIBILITY = os.getenv('MESSAGE_VISIBILITY', 'unlisted')
WAIT_TIME = int(os.getenv('WAIT_TIME', 300))
IS_DOCKER = os.getenv('IS_DOCKER', False)
def contains_local_account(accounts):
for account in accounts:
if account.username == account.acct:
return True
return False
def is_local_account(account):
return account.username == account.acct
def send_welcome_message(mastodon, account):
formatted_message = WELCOME_MESSAGE.format(username=account.username, useracct=account.acct)
mastodon.status_post(formatted_message)
last_id_file = Path('.') / 'last_id.txt'
last_id = 0
if IS_DOCKER:
last_id_file = Path('/data') / 'last_id'
if last_id_file.is_file():
with open(str(last_id_file)) as f:
last_id = int(f.read())
print('Botvenon is starting...')
print('Welcoming any users after id %d' % last_id)
mastodon = Mastodon(
client_id=CLIENT_ID,
client_secret=CLIENT_SECRET,
access_token=ACCESS_TOKEN,
api_base_url=INSTANCE_BASE)
user = mastodon.account_verify_credentials() # Get the current user
followers = mastodon.account_followers(user) # Get the latest followers
# print(
# f'''Followed by: {account.username}
# (Acct value: {account.acct}, id: {account.id})''')
while True:
for account in mastodon.account_followers(user):
if is_local_account(account) and account.id > last_id and not account.bot:
last_id = account.id
with open(str(last_id_file), 'w+') as f:
f.write(str(last_id))
print('Welcoming %s...' % account.username)
send_welcome_message(mastodon, account)
time.sleep(WAIT_TIME)