67 lines
2 KiB
Python
67 lines
2 KiB
Python
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)
|