Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
75 commits
Select commit Hold shift + click to select a range
161673d
Create .gitkeep
BowGaming Jun 27, 2026
8eb5984
Create main.py
BowGaming Jun 27, 2026
4cb4ba2
Update main.py
BowGaming Jun 27, 2026
49c834c
Update main.py
BowGaming Jun 27, 2026
ba45f07
Update main.py
BowGaming Jun 27, 2026
f3c0e1f
Update main.py
BowGaming Jun 27, 2026
e4c267a
Update main.py
BowGaming Jun 27, 2026
b818ee8
Update main.py
BowGaming Jun 27, 2026
9608441
Update main.py
BowGaming Jun 27, 2026
2fc7a2b
Update main.py
BowGaming Jun 27, 2026
971b88a
Update main.py
BowGaming Jun 27, 2026
5ce10c1
Create review.py
BowGaming Jun 28, 2026
cfe5067
Create config.py
BowGaming Jun 28, 2026
77c2000
Update main.py
BowGaming Jun 28, 2026
22028c1
Update config.py
BowGaming Jun 28, 2026
adfb968
soup
BowGaming Jun 28, 2026
356afc2
Update review.py
BowGaming Jun 28, 2026
35e6081
Update main.py
BowGaming Jun 28, 2026
31491dc
Update review.py
BowGaming Jun 28, 2026
66d4365
Update review.py
BowGaming Jun 28, 2026
ae323b5
Update review.py
BowGaming Jun 28, 2026
c8c4795
Update review.py
BowGaming Jun 28, 2026
a7d1d42
Update review.py
BowGaming Jun 28, 2026
1a704b2
Update config.py
BowGaming Jun 28, 2026
3fde4cd
Update review.py
BowGaming Jun 28, 2026
2a25e37
Update review.py
BowGaming Jun 28, 2026
cdeb795
Update review.py
BowGaming Jun 28, 2026
ba3de11
Update review.py
BowGaming Jun 28, 2026
614a660
Update review.py
BowGaming Jun 28, 2026
a00ce92
Update review.py
BowGaming Jun 28, 2026
d470426
Update review.py
BowGaming Jun 28, 2026
747cb60
Update review.py
BowGaming Jun 28, 2026
95cd856
Update review.py
BowGaming Jun 29, 2026
20329a5
Update review.py
BowGaming Jun 29, 2026
bc2b972
Update review.py
BowGaming Jun 29, 2026
8cf37e5
Update review.py
BowGaming Jun 29, 2026
1ac48b3
Update review.py
BowGaming Jun 29, 2026
8869ca8
Update review.py
BowGaming Jun 29, 2026
21ae120
Update review.py
BowGaming Jun 29, 2026
553e37d
Delete __pycache__/config.cpython-313.pyc
BowGaming Jun 29, 2026
6f8ef72
Update review.py
BowGaming Jun 30, 2026
b66df65
Update review.py
BowGaming Jul 3, 2026
4c97c5b
Merge pull request #1 from BowGaming/edit-message-branch
BowGaming Jul 3, 2026
c186975
Update review.py
BowGaming Jul 3, 2026
d380050
Update review.py
BowGaming Jul 3, 2026
77da40c
Update review.py
BowGaming Jul 3, 2026
80b23e9
Update review.py
BowGaming Jul 7, 2026
3d5ee36
Update review.py
BowGaming Jul 7, 2026
a903215
Update review.py
BowGaming Jul 7, 2026
a5f60e5
Create threads.py
BowGaming Jul 7, 2026
4783889
Update review.py
BowGaming Jul 8, 2026
8b252df
Update threads.py
BowGaming Jul 8, 2026
deeae71
Update main.py
BowGaming Jul 8, 2026
b47230d
Update review.py
BowGaming Jul 8, 2026
68b60ae
Update threads.py
BowGaming Jul 8, 2026
bc1b69e
Update threads.py
BowGaming Jul 9, 2026
b029591
Update threads.py
BowGaming Jul 9, 2026
b7bf3a3
Update threads.py
BowGaming Jul 9, 2026
71d452e
Update threads.py
BowGaming Jul 9, 2026
febd702
Update threads.py
BowGaming Jul 9, 2026
8e7ba47
Update threads.py
BowGaming Jul 9, 2026
842f5e8
Update threads.py
BowGaming Jul 9, 2026
0f66365
Update threads.py
BowGaming Jul 9, 2026
1fad850
Update threads.py
BowGaming Jul 9, 2026
9d44ee8
Ignore DMs in review message listener
JulianInvictus Jul 9, 2026
d8f5c48
Handle None results in review message retrieval
JulianInvictus Jul 9, 2026
1f2bbb4
Handle additional exceptions in review forwarding
JulianInvictus Jul 9, 2026
cbdeb21
Ignore DMs in review edits
JulianInvictus Jul 9, 2026
9727875
Check if mirror_channel is None before fetching
JulianInvictus Jul 9, 2026
a43733c
Add None checks for parent_channel in threads.py
JulianInvictus Jul 9, 2026
21ab031
Merge pull request #2 from JulianInvictus/patch-1
BowGaming Jul 9, 2026
f840cd9
Update review.py
BowGaming Jul 9, 2026
513df3b
Update threads.py
BowGaming Jul 9, 2026
255b9cf
Merge pull request #3 from BowGaming/BowGaming-patch-1
BowGaming Jul 9, 2026
86ad228
Add README with bot functionality and setup details
JulianInvictus Jul 9, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
108 changes: 108 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Amalgam

A Discord bot that mirrors comic book reviews between two servers, keeping both communities in sync.

## What It Does

When a member posts a review in the review channel, Amalgam:

- Validates it against the required format — invalid posts are deleted and the author is DM'd their original content to fix
- Creates a discussion thread on the review in both servers simultaneously
- Forwards the review to the partner server
- Keeps a sticky format guide pinned at the bottom of both channels at all times
- Propagates edits and deletions across both servers
- Forwards thread replies from the original reviewer
- Respects bans — a user banned in the destination server won't have their review forwarded

## Review Format

Posts that don't match this structure are deleted. The author receives a DM with their original text so they can repost.

```
## Comic Name
**Year and writer:**
**Rating:** x/10
**Review:** Your thoughts here. Use ||spoiler tags|| for spoilers.
**MU/DCUI link:** (optional)
```

All four main fields are required. The MU/DCUI link is optional. The pattern is matched case-insensitively.

## Setup

1. **Clone the repository**

```bash
git clone https://github.com/BowGaming/Amalgam.git
cd Amalgam
```

2. **Install dependencies**

```bash
pip install discord.py python-dotenv
```

3. **Create a `.env` file** in the project root — see [Configuration](#configuration) below.

4. **Run the bot**

```bash
python main.py
```

## Configuration

All configuration is read from a `.env` file at startup.

| Variable | Required | Description |
|---|---|---|
| `DISCORD_TOKEN` | Yes | Bot token from the Discord Developer Portal |
| `BOT_PREFIX` | No | Command prefix — defaults to `~` |
| `GUILD_MD` | Yes | Server ID for the first server (MD) |
| `GUILD_DCO` | Yes | Server ID for the second server (DCO) |
| `COMIC_REVIEW_CHANNEL_MD` | Yes | Channel ID for the review channel in MD |
| `COMIC_REVIEW_CHANNEL_DCO` | Yes | Channel ID for the review channel in DCO |
| `REVIEW_REACTION_EMOJI_MD` | Yes | Emoji ID for the reaction added to reviews in MD |
| `REVIEW_REACTION_EMOJI_DCO` | Yes | Emoji ID for the reaction added to reviews in DCO |

**Example `.env`:**

```env
# Bot credentials
DISCORD_TOKEN=your-token-here
BOT_PREFIX=~

# Server IDs (right-click server → Copy Server ID)
GUILD_MD=123456789012345678
GUILD_DCO=987654321098765432

# Review channel IDs
COMIC_REVIEW_CHANNEL_MD=111111111111111111
COMIC_REVIEW_CHANNEL_DCO=222222222222222222

# Custom emoji IDs (right-click emoji → Copy ID)
REVIEW_REACTION_EMOJI_MD=333333333333333333
REVIEW_REACTION_EMOJI_DCO=444444444444444444
```

## Bot Permissions

Grant these permissions in both servers when adding the bot:

- Read Messages / View Channels
- Send Messages
- Manage Messages
- Add Reactions
- Create Public Threads
- Send Messages in Threads
- Read Message History
- Ban Members

In the Discord Developer Portal, enable both **Server Members Intent** and **Message Content Intent** under Privileged Gateway Intents.

## Requirements

- Python 3.10+
- discord.py 2.x
- python-dotenv
Loading