- Bug: Handle exception when media attachments are geoblocked (403 Unauthorized)
- Regression: Take into account new structure of Twitter's archive (tweet.js changed to tweets.js)
- Bug: Handle special media types that don't include link to media in some cases. Thanks @tewhalen!
- Bug: Align max_tweets minimum value (10) with the warning message and actual value. Thanks @nemobis!
- Bug: Multiple video attachments cause HTTP 422 on Mastodon when posting.
- Bug: Exception when post was manually pinned on the Fedi account and later one was pinned on the Twitter account. Thanks @selyod-ka!
- Archive offline support, you no longer need a Twitter developer account or access to their API to process an archive.
- Mastodon limits, make URLs count as 23 characters (or the instance configured value) when determining if truncating is necessary
- Added progress bars when gathering, processing and posting tweets
- Pleroma and Mastodon rate limits, handle HTTP 429 more gracefully (wait until they reset and continue)
- RSS support, you can now use an RSS feed as a source of tweets to post. Take a look at the docs for more info.
- Thread support, now mirrored users should be able to reply to their own posts and create reply threads.
- Native retweet support, now users in your config should be able to reblog their own and each other's posts if they are on the same instance.
bot
config mapping, for setting the bot flag on the target account.--lockerfile
argument, for specifying the path of the locker file that prevents collisions between multiple concurrent bot executions.guest
mapping, for enabling the use of Guest Tokens (so you don't need a Twitter Developer account). If notwitter_token
is present in your config it will default totrue
proxy_pool
mapping, list of proxies to use when being rate limited with Guest Tokensproxy
mapping, for enabling or disabling the use of proxies when using guest tokens- Caching IDs of posts published and skip mirroring tweet if associated published post is found to avoid duplicates. You can change this with the
avoid_duplicates
mapping. application_name
mapping, for specifying the Fediverse application name to use as a filter when getting the date of the latest published post by the bot. Thanks @reorx!- Configuration wizard, which generates a minimal config if none is found
content_warnings
, for specifying keywords that if found will add a content warning to the Fediverse postcustom_replacements
for replacing any text (Twitter handles that differ from the Fedi handle, for example) Thanks @selyod-ka!software
config mapping, for sidestepping the automatic detection of the type of software (mastodon, pleroma, misskey) running on the target instance and forcing a specific value. If your target is a fork of another project, for example, you would be able to force the bot to use whichever software (mastodon, pleroma, misskey) is the closest match for their API.
- Bug: Tweet media getting dropped if one of the attachments returned 404 Not Found
- Regression:
visibility
's value not being honored when defined as a global mapping in the config - Bug: Handle exception when the tweet is empty (no attachments, polls or body) due to dropping malformed attachments
- Bug: Handle exception when expanded URL is unreachable or returns any code other than 200
- Regression: Not asking for date when passing a specific Twitter username with
--forceDate
- Bug: Trying to find previously pinned post on empty Fediverse account resulted in an unhandled exception
- Bug: Truncating when exceeding post max length resulted in signature links being broken if original date was enabled
- Bug: Videos not being mirrored in some cases with extended tweets
- Target instance's character limits when posting are taken into account and posts text are truncated if necessary
- The rest of the users of the config are processed, even if another one fails (errors will be logged accordingly and pleroma-bot will exit with non-zero exit code)
- Recover from hitting rate limits for Twitter's API (HTTP 429 Too Many Requests)
- Twitter bio links are now expanded by default if the Fedi instance bio's maximum length is not exceeded
- Maximum number of attachments allowed per post are now taken into account depending on the instance type (Mastodon, Pleroma or Misskey)
- Alt text/Image descriptions are now mirrored on the Fediverse post image description/comment
include_quotes
config mapping, for including or excluding quoted tweetsrandom_user_order
global config mapping, for randomizing the order in which users are processed{{ website }}
can be used on the metadata fields config and will be replaced with the website listed on the Twitter's account profileno_profile
config mapping, for skipping profile update (picture, banner, display name and bio) on a per-user basis
- Support for Misskey instances! 🎉
- Logger standard output for systems not using UTF-8 encoding
- Profile update: Regression when Twitter account does not have a profile image or banner
- Media attachments being added to the Fediverse post in the wrong order in some cases
- RTs text no longer gets truncated
- Info message when media upload returns 422 (Unprocessable Entity) due to Paperclip/file identifying the wrong mimetype
- Locale issue on Mac if the LANG environment variables were not set
- RTs media attachments being duplicated if the referenced tweet was nested too deep
- Pinned tweets being posted twice if they were part of the more recent batch of retrieved tweets
pleroma-bot
can be run as a daemon now by using the flag--daemon
.- A systemd service is automatically installed with the AUR package (and can be found in the repo as
pleroma-bot.service
)
max_tweets
not accepting values higher than 100- Video: Not getting the best bitrate version of video attachments in some cases
- Polls: not being retrieved for accounts with protected tweets
- RTs: not getting original tweet media attachments
twitter_username
value can be a list now, for having multiple Twitter accounts as sources for one target Fediverse account.- A Twitter archive can be provided with
--archive
(more info in the docs) - Links to Twitter attachments (video, images) are no longer explicitly included on the post's body text by default. You can choose to keep adding them with
keep_media_links
. This option does not affect the upload of attachments. - Youtube links can be replaced with
invidious
andinvidious_base_url
bio_text
is no longer a mandatory mapping on the config- Hugely improved performance (around 4x) when processing tweets
- Implemented safety measures for avoiding collision with multiple instances of the bot running at the same time
original_date
andoriginal_date_format
for adding the original tweet's creation date to the post body
- URL expansion when regex match doesn't include protocol (http, https)
twitter_bio
for allowing the user to choose if they want to retrieve and append the Twitter bio to their Fediverse user or not.
delay_post
mapping, for setting how long to wait (in seconds) between each post request to avoid hitting rate limits of the target Fediverse instancehashtags
mapping (list), for filtering out tweets which don't match any of themtweet_ids
mapping, for listing specific tweets to retrieve and post on the Fediverse account
- Provide a more meaningful exception message when an HTTP error code 422 is returned when updating the Fediverse profile
- Referenced more directly in the documentation the need to use an account ID instead of a username when targeting a Mastodon instance
- Log file handler not being attached when running as a module
- Argument
--config
, the user can specify a custom path for the config.yml file to be parsed - Argument
--log
, the user can specify a custom path for the error.log to create during execution - Support for localization
- Created a package in the Arch User Repository: python-pleroma-bot
- Added es_ES translation
- Created documentation site
- Support for OAuth 1.0a authentication (needed if retrieving tweets from protected accounts)
- Verbose argument
-v
for debugging twitter_username
can take a list as a value. They are internally broken apart into multipleUser
objects
- HTML character entities incorrect escaping in tweet's body
- First run skip condition if the Fediverse had no posts/tweets published as a result of a manual first run
- Provide feedback when long operations are running (speeen)
- Color output based on logging level
- New and shiny help page
- Checks for first run (no posts/toots on the Fediverse account, or no user folder present)
- Argument
--forceDate
to allow setting a starting date for tweet retrieval (optionally forcing it on a user-by-user basis by providingtwitter_username
to identify the user on the config file)
- Handle instances being unreachable when trying to get version info to identify their platform
- Reworked how arguments are parsed and processed with
argparse
- Pagination implemented for tweet retrieval (which allows tweets older than one week to be retrieved)
- New config attribute added (
include_replies
) which allows filtering tweets which are replies. Users now can choose whether to drop reply tweets or not (by defaultinclude_replies
istrue
)
- Exception when Twitter display name is longer than 30 Characters and target instance platform is Mastodon (which supports only up to 30)
- Refactored and aligned the format of old code
- More readable console output when mirroring multiple users
profile_banner_url
returns a 404 for some users. Now we specifically request the biggest size (1500x500)
- New attribute
include_rts
allows choosing whether if retweets are to be posted or ignored. - New attribute
file_max_size
allows setting a maximum size limit for attachments. If exceeded, the attachment will be dropped and won't be uploaded to the Fediverse instance. - Settings to use different nitter instances (thanks zoenglinghou!)
- Timestamp format for Mastodon instances adjustments
- Sensitivity boolean ignored by Mastodon instances if capitalized
- Improved Mastodon compatibility
- Support for using the original tweet sensitivity (nsfw flag) when posting on the Fediverse account
- Exception when no tweets are found within the last week (
/tweets/search/recent
)
- Added tests and 100% code coverage
- Remove the attribute '
sensitive
' from your user section in yourconfig.yml
if you want to honor the original tweet's sensitivity instead of forcing it globally for all the posts by that user.
- Added support for polls 🎉 (thanks zoenglinghou!)
- Migrated to Twitter API v2 (falling back to v1.1 for video attachments)
- Refactored and packaged the code for easy installation. Link to project at PyPI.
- Fixed posting only the first media element in a multiple media tweet
- Fixed video attachments not being downloaded (and uploaded to the Fediverse post)
- Fixed the exception when Twitter user has no profile and/or banner images (thanks zoenglinghou!)
- Place/move your
config.yml
to whichever path you want to runpleroma-bot
- If you were using cron, change:
python3 /path/to/updateInfoPleroma.py noProfile
- to
cd /path/to/your/venv/ && . bin/activate && pleroma-bot noProfile
- Dynamic attribute loading for the User object from the config file
- Rich text for linking mentions to their Twitter profile
- Allow visibility and sensitivity to be set in the config file
- Replacing the wrong strings in tweet body while expanding URLs
- nitter.net replacement in twitter.com links misbehaviour
- Default to retrieve tweets from the last 48h if Pleroma user has no posts (thanks zoenglinghou!)
- Replace the field name
pleroma_url
withpleroma_base_url
on yourconfig.yml
- Replace the field name
twitter_url
withtwitter_base_url
on yourconfig.yml
- Support for tweet attachments
- Allow different usernames for Pleroma and Twitter accounts
- Expand shortened URLs on tweets body
- Support for pinned tweets
- nitter.net URL replacement
- Metadata fields can be defined in
config.yml
- RTs only shown body text, with no indication of being RTs
- Update
config.yml
values and fields as described in theREADME.md
TEXT-ONLY
This release is good enough for text-only tweet mirroring. All media associated with the tweets will be dropped.