https://github.com/jiri-otoupal/threadsbot
https://github.com/jiri-otoupal/threadsbot
Last synced: 7 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/jiri-otoupal/threadsbot
- Owner: jiri-otoupal
- License: other
- Created: 2024-12-30T20:50:40.000Z (10 months ago)
- Default Branch: master
- Last Pushed: 2025-01-16T18:19:58.000Z (9 months ago)
- Last Synced: 2025-09-29T18:55:00.184Z (18 days ago)
- Language: Python
- Size: 9.77 KB
- Stars: 1
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Funding: .github/FUNDING.yml
- License: LICENSE
Awesome Lists containing this project
README
# Threads Bot
This repository contains a bot designed to automatically post content to Threads. The bot operates using a modular structure with asynchronous
capabilities, making it efficient and extensible.---
## Features
- **Automatic Post Scheduling:** Ensures minimum intervals between posts to avoid spam.
- **Dynamic Post Generation:** Generates batches of posts based on a role description.
- **Customizable Post Frequency:** Specify the frequency of posts in seconds via command-line options.
- **Progress Tracking:** Displays progress until the next post using a CLI progress bar.
- **Error Handling:** Handles file and configuration errors gracefully.
- **Asynchronous Architecture:** Utilizes asyncio for efficient and scalable operations.---
## Requirements
- Python 3.7 or higher
- Dependencies specified in `requirements.txt`
- `.env` file for environment-specific configuration---
## Installation
1. Install dependencies:
```bash
pip install -r requirements.txt
```
2. Create openssl certs for https```
# Generate a private key
openssl genpkey -algorithm RSA -out threads.key -pkeyopt rsa_keygen_bits:2048# Generate a certificate signing request (CSR)
openssl req -new -key threads.key -out threads.csr# Generate a self-signed certificate valid for 1 year
openssl x509 -req -days 365 -in threads.csr -signkey threads.key -out threads.crt
```3. Create a Threads app in Meta
4. Create a `.env` file for storing sensitive or environment-specific data.```
Example:THREADS_APP_ID=123123123
THREADS_API_SECRET=SomethingSecret
THREADS_SSL_CERT_FILEPATH="threads.crt"
THREADS_SSL_KEY_FILEPATH="threads.key"
# You need this page to only capture the threads post callback and copy paste this into the script if asked for it
THREADS_REDIRECT_URI="https://your-callback-url/callback"
OPENAI_API_KEY="sk-supersecretopenai-key-which-will-be-used-for-requests"
```---
## Usage
Run the bot using the following command:
```bash
python bot.py [OPTIONS]
```### Arguments:
- ``: The unique name of the bot (required).
### Options:
- `-r, --role-txt-path`: Path to a file containing a role description for generating posts (optional).
- `-c, --creds-file-path`: Path to a credentials file for authentication (optional).
- `-f, --post-frequency`: Post frequency in seconds (optional, defaults to 7200 seconds).### Example:
```bash
python bot.py "MyThreadsBot" -r "role_description.txt" -c "creds.json" -f 3600
```---
## Key Components
### 1. `main_func`
The entry point of the bot. Handles command-line arguments, reads optional files, and initializes the main asynchronous function.
### 2. `main`
The core loop of the bot:
- Checks for existing posts.
- Generates new posts if none are available.
- Schedules and publishes posts while ensuring proper intervals.### 3. `api.py`
Handles the API communication for posting content to Threads.
### 4. `fetcher.py`
Manages post generation, saving, and retrieval.
### 5. `data_log.py`
Handles loading and saving the last posted time for ensuring intervals between posts.
### 6. `logging_setup.py`
Sets up structured logging for monitoring and debugging.
### 7. `text_constants.py`
Sets up model behaviour and role
---
## Configuration
### Logging
Logging is configured in `logging_setup.py` to ensure all activities are recorded. Modify the logging level and output format as needed.
### Minimum Timespan
The default interval between posts is set in the script:
```python
MINIMUM_TIMESPAN_BETWEEN_POSTS = 60 * 60 * 2 # 2 hours in seconds
```You can override this using the `-f` or `--post-frequency` command-line option.
---
## Development
To contribute or modify the bot:
1. Create a new branch:
```bash
git checkout -b feature/new-feature
```2. Make changes and test locally:
```bash
python bot.py [OPTIONS]
```3. Submit a pull request to the `main` branch.
---
## License
This project is licensed under the specific License. See the `LICENSE` file for details.
---