|
|
|
@ -8,9 +8,8 @@ __date__ = '25 November 2022'
|
|
|
|
|
__version__ = '1.0'
|
|
|
|
|
__copyright__ = 'Copyright © 2022 Paco Hope. See LICENSE for details.'
|
|
|
|
|
|
|
|
|
|
from mastodon import Mastodon
|
|
|
|
|
import mastodon
|
|
|
|
|
import toml
|
|
|
|
|
import os
|
|
|
|
|
import time
|
|
|
|
|
import argparse
|
|
|
|
|
import sys
|
|
|
|
@ -18,11 +17,12 @@ from pathlib import Path
|
|
|
|
|
import random
|
|
|
|
|
import re
|
|
|
|
|
import logging
|
|
|
|
|
from tootapalooza.userdata.names import usernames
|
|
|
|
|
|
|
|
|
|
args=None
|
|
|
|
|
logger=None
|
|
|
|
|
|
|
|
|
|
class Tooter(Mastodon):
|
|
|
|
|
class Tooter(mastodon.Mastodon):
|
|
|
|
|
credentials: dict = {}
|
|
|
|
|
hostname : str = ''
|
|
|
|
|
files : dict = {}
|
|
|
|
@ -37,14 +37,30 @@ class Tooter(Mastodon):
|
|
|
|
|
self.displayname = cred_dict['name']
|
|
|
|
|
self.cred_file = f'.tootapalooza-usercred-{self.acct}.env'
|
|
|
|
|
|
|
|
|
|
super().__init__(client_id=self.client_id)
|
|
|
|
|
super().__init__(access_token = self.cred_file,
|
|
|
|
|
client_id=self.client_id,
|
|
|
|
|
user_agent = "tootapalooza")
|
|
|
|
|
|
|
|
|
|
# Try a basic call to ensure we are logged in
|
|
|
|
|
try:
|
|
|
|
|
account = self.me()
|
|
|
|
|
except mastodon.errors.MastodonUnauthorizedError:
|
|
|
|
|
logger.warn(f"Warning {self.acct} not logged in. Logging in.")
|
|
|
|
|
self.revoke_access_token()
|
|
|
|
|
try:
|
|
|
|
|
self.log_in(
|
|
|
|
|
self.username,
|
|
|
|
|
self.password,
|
|
|
|
|
to_file=self.cred_file
|
|
|
|
|
)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
logger.critical( f"Failed to login as {self.acct}" )
|
|
|
|
|
return None
|
|
|
|
|
# if logging in worked, this will work
|
|
|
|
|
account = self.me()
|
|
|
|
|
|
|
|
|
|
self.id = account['id']
|
|
|
|
|
|
|
|
|
|
self.log_in(
|
|
|
|
|
self.username,
|
|
|
|
|
self.password,
|
|
|
|
|
to_file=self.cred_file
|
|
|
|
|
)
|
|
|
|
|
self.id = self.me()['id']
|
|
|
|
|
@classmethod
|
|
|
|
|
def load_credentials(cls, file: str) -> None:
|
|
|
|
|
as_dict = toml.load(file)
|
|
|
|
@ -280,23 +296,30 @@ class Tooter(Mastodon):
|
|
|
|
|
logger.debug(f"{self.acct} report_random_local")
|
|
|
|
|
return( 0 )
|
|
|
|
|
|
|
|
|
|
def set_display_name(self) -> int:
|
|
|
|
|
newname = random.choice(usernames)
|
|
|
|
|
logger.debug(f"{self.acct} set_display_name to {newname}")
|
|
|
|
|
self.account_update_credentials(display_name=newname)
|
|
|
|
|
return( 0 )
|
|
|
|
|
|
|
|
|
|
def random_interaction(self):
|
|
|
|
|
"""Choose one possible interaction according to the weights, and do it."""
|
|
|
|
|
interactions = {
|
|
|
|
|
self.reply_random_local: 4,
|
|
|
|
|
self.reply_random_home: 4,
|
|
|
|
|
self.reply_random_public: 4,
|
|
|
|
|
self.follow_random_local: 2,
|
|
|
|
|
self.unfollow_random: 1,
|
|
|
|
|
self.toot_plain_public: 1,
|
|
|
|
|
self.toot_tagged_public: 4,
|
|
|
|
|
self.toot_plain_unlisted: 1,
|
|
|
|
|
self.favourite_random_local: 2,
|
|
|
|
|
self.favourite_random_home: 2,
|
|
|
|
|
self.favourite_random_public: 2,
|
|
|
|
|
self.boost_random_local: 2,
|
|
|
|
|
self.boost_random_home: 2,
|
|
|
|
|
self.boost_random_public: 2,
|
|
|
|
|
self.reply_random_local: 0,
|
|
|
|
|
self.reply_random_home: 0,
|
|
|
|
|
self.reply_random_public: 0,
|
|
|
|
|
self.follow_random_local: 0,
|
|
|
|
|
self.unfollow_random: 0,
|
|
|
|
|
self.toot_plain_public: 0,
|
|
|
|
|
self.toot_tagged_public: 0,
|
|
|
|
|
self.toot_plain_unlisted: 0,
|
|
|
|
|
self.favourite_random_local: 0,
|
|
|
|
|
self.favourite_random_home: 0,
|
|
|
|
|
self.favourite_random_public: 0,
|
|
|
|
|
self.boost_random_local: 0,
|
|
|
|
|
self.boost_random_home: 0,
|
|
|
|
|
self.boost_random_public: 0,
|
|
|
|
|
self.set_display_name: 1,
|
|
|
|
|
self.report_random_local: 0
|
|
|
|
|
}
|
|
|
|
|
chosen = random.choices(population=list(interactions.keys()),
|
|
|
|
|