├── .env
├── requirements.txt
├── assets
├── banner.png
├── header.png
└── logo.png
├── manifest.json
├── .github
├── ISSUE_TEMPLATE
│ ├── config.yml
│ ├── feature_request.yml
│ └── bug_report.yml
├── workflows
│ └── docker-image.yml
└── FUNDING.yml
├── Dockerfile
├── LICENSE
├── terms-of-service.md
├── privacy-policy.md
├── docs
├── script.js
├── index.html
└── styles.css
├── README.md
└── main.py
/.env:
--------------------------------------------------------------------------------
1 | BOT_TOKEN = "YOUR_BOT_TOKEN"
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | discord.py
2 | python-dotenv
3 | aiosqlite
4 |
--------------------------------------------------------------------------------
/assets/banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kenhendricks00/FixEmbed/HEAD/assets/banner.png
--------------------------------------------------------------------------------
/assets/header.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kenhendricks00/FixEmbed/HEAD/assets/header.png
--------------------------------------------------------------------------------
/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kenhendricks00/FixEmbed/HEAD/assets/logo.png
--------------------------------------------------------------------------------
/manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "discordpy-basic",
3 | "version": "1.0.0",
4 | "type": "python"
5 | }
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/config.yml:
--------------------------------------------------------------------------------
1 | blank_issues_enabled: false
2 | contact_links:
3 | - name: Discord
4 | url: https://discord.gg/QFxTAmtZdn
5 | about: You can ask general questions here.
6 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:3.8-slim-buster
2 |
3 | WORKDIR /app
4 |
5 | COPY requirements.txt requirements.txt
6 | RUN pip3 install -r requirements.txt
7 |
8 | COPY . .
9 |
10 | CMD ["python3", "main.py"]
--------------------------------------------------------------------------------
/.github/workflows/docker-image.yml:
--------------------------------------------------------------------------------
1 | name: Docker Image CI
2 |
3 | on:
4 | push:
5 | branches: [ "main" ]
6 | pull_request:
7 | branches: [ "main" ]
8 |
9 | jobs:
10 |
11 | build:
12 | runs-on: ubuntu-latest
13 |
14 | steps:
15 | - uses: actions/checkout@v4
16 |
17 | # Build the Docker image
18 | - name: Build the Docker image
19 | run: docker build . --file Dockerfile --tag kenhendricks00/fixembed:latest
20 |
21 | # Log in to Docker Hub using credentials stored in GitHub Secrets
22 | - name: Log in to Docker Hub
23 | uses: docker/login-action@v2
24 | with:
25 | username: ${{ secrets.DOCKER_USERNAME }}
26 | password: ${{ secrets.DOCKER_PASSWORD }}
27 |
28 | # Push the Docker image to Docker Hub
29 | - name: Push the Docker image to Docker Hub
30 | run: docker push kenhendricks00/fixembed:latest
31 |
--------------------------------------------------------------------------------
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
4 | patreon: # Replace with a single Patreon username
5 | open_collective: # Replace with a single Open Collective username
6 | ko_fi: kenhendricks # Replace with a single Ko-fi username
7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
9 | liberapay: # Replace with a single Liberapay username
10 | issuehunt: # Replace with a single IssueHunt username
11 | lfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry
12 | polar: # Replace with a single Polar username
13 | buy_me_a_coffee: kenhendricks # Replace with a single Buy Me a Coffee username
14 | custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
15 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 Kenneth Hendricks
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/terms-of-service.md:
--------------------------------------------------------------------------------
1 | # FixEmbed Terms of Service
2 |
3 | Last updated and effective: June 26, 2024
4 |
5 | This ToS applies applies to the Discord bot FixEmbed#5654.
6 |
7 | You may not use FixEmbed to violate any applicable laws or regulations, [Discord’s Terms of Service](https://discord.com/terms), or [Discord Community Guidelines](https://discord.com/guidelines). You also may not use FixEmbed to harm anyone or anything.
8 |
9 | When using bot commands that use external services, additional terms may apply to you. Here are ToSes that apply to certain commands: [X/Twitter](https://help.x.com/en/rules-and-policies), [TikTok](https://www.tiktok.com/legal/page/us/terms-of-service/en), [Reddit](https://www.redditinc.com/policies/content-policy), and [Instagram](https://about.instagram.com/blog/announcements/instagram-community-terms-of-use-faqs/). Do not use FixEmbed to violate the terms of any service.
10 |
11 | To contact me ([Kenneth Hendricks](https://github.com/kenhendricks00)), the developer of FixEmbed, you can mention strikermonkeyxd (1121099921655865375) in the official [FixEmbed Support Discord server](https://discord.gg/QFxTAmtZdn).
12 |
13 | Also see [FixEmbed’s Privacy Policy](https://github.com/kenhendricks00/FixEmbedBot/blob/main/privacy-policy.md).
14 |
15 | Thanks for using FixEmbed!
16 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.yml:
--------------------------------------------------------------------------------
1 | name: Feature Request
2 | description: Request a new feature.
3 | title: "[REQUEST] "
4 | labels: ["enhancement"]
5 | body:
6 | - type: markdown
7 | attributes:
8 | value: |
9 | Thank you for taking the time to suggest a new feature!
10 | - type: textarea
11 | id: problem-related
12 | attributes:
13 | label: Is your feature request related to a problem? Please describe.
14 | description: A clear and concise description of what the problem is.
15 | validations:
16 | required: true
17 | - type: textarea
18 | id: solution
19 | attributes:
20 | label: Describe the solution you'd like
21 | description: A clear and concise description of what you want to happen.
22 | validations:
23 | required: true
24 | - type: textarea
25 | id: alternatives
26 | attributes:
27 | label: Describe alternatives you've considered
28 | description: A clear and concise description of any alternative solutions or features you've considered.
29 | validations:
30 | required: false
31 | - type: textarea
32 | id: additional-context
33 | attributes:
34 | label: Additional context
35 | description: Add any other context or screenshots about the feature request here.
36 | validations:
37 | required: false
38 |
--------------------------------------------------------------------------------
/privacy-policy.md:
--------------------------------------------------------------------------------
1 | # FixEmbed Privacy Policy
2 |
3 | Last updated and effective: July 8, 2024
4 |
5 | This privacy policy applies to the Discord bot FixEmbed#5654.
6 |
7 | By default, FixEmbed does not store any data. If a server member with the Manage Server permission uses the activate and deactivate command to change the bot’s state of the channel, then the server’s automatically-generated Discord ID (for example, 398998849026261003) will be stored in the bot’s SQL database along with the provided state, this goes for activation/deactivation via the settings command. The conversion service's states are stored in the bot's SQL database as well, so the bot knows what links to convert. No other data relating to the server is stored. FixEmbed never stores data specific to users.
8 |
9 | The state of the channel data is stored only for the bot to function and is not shared with anyone else or used for any other reason. The data is stored in a SQL database.
10 |
11 | To contact me ([Kenneth Hendricks](https://github.com/kenhendricks00)), the developer of FixEmbed, if you want the data to be removed or for any other reason, you can mention strikermonkeyxd (1121099921655865375) in the official [FixEmbed Support Discord server](https://discord.gg/QFxTAmtZdn).
12 |
13 | Also see [Discord’s Privacy Policy](https://discord.com/privacy).
14 |
15 | Thanks for using FixEmbed!
16 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.yml:
--------------------------------------------------------------------------------
1 | name: Bug Report
2 | description: Create a report to help us improve. Write in English, please.
3 | title: "[BUG] Write a title for your bug"
4 | labels: ["bug"]
5 | body:
6 | - type: markdown
7 | attributes:
8 | value: |
9 | Thank you for creating a bug report to help us improve!
10 | - type: textarea
11 | id: bug-description
12 | attributes:
13 | label: Describe the bug
14 | description: A clear and concise description of what the bug is.
15 | validations:
16 | required: true
17 | - type: textarea
18 | id: bug-reproduce
19 | attributes:
20 | label: Steps to Reproduce
21 | description: Steps to reproduce the behavior. For example, "1. Go to '...', 2. Click on '...', 3. See error"
22 | validations:
23 | required: true
24 | - type: textarea
25 | id: expected-behavior
26 | attributes:
27 | label: Expected behavior
28 | description: A clear and concise description of what you expected to happen.
29 | validations:
30 | required: false
31 | - type: textarea
32 | id: additional-info
33 | attributes:
34 | label: Additional information and data
35 | description: |
36 | If applicable, paste "FixEmbed Stats" here.
37 | Use the /settings command, then click "Debug" in the dropdown menu, then click the copy button in the "FixEmbed Stats" text area.
38 | validations:
39 | required: false
40 | - type: input
41 | id: fixembed-version
42 | attributes:
43 | label: FixEmbed Version
44 | description: Please provide the version of FixEmbed you are using, if current, just leave blank.
45 | validations:
46 | required: false
47 | - type: checkboxes
48 | id: terms
49 | attributes:
50 | label: Before opening this Issue
51 | options:
52 | - label: I have searched the issues of this repository and believe that this is not a duplicate.
53 | required: true
54 |
--------------------------------------------------------------------------------
/docs/script.js:
--------------------------------------------------------------------------------
1 | document.addEventListener('DOMContentLoaded', function() {
2 | // Smooth scrolling for anchor links
3 | document.querySelectorAll('a[href^="#"]').forEach(anchor => {
4 | anchor.addEventListener('click', function(e) {
5 | e.preventDefault();
6 |
7 | const targetId = this.getAttribute('href');
8 | if (targetId === '#') return;
9 |
10 | const targetElement = document.querySelector(targetId);
11 | if (targetElement) {
12 | window.scrollTo({
13 | top: targetElement.offsetTop - 80,
14 | behavior: 'smooth'
15 | });
16 | }
17 | });
18 | });
19 |
20 | // Make features section visible immediately
21 | document.querySelectorAll('.feature-card').forEach(element => {
22 | element.style.opacity = '1';
23 | element.style.transform = 'translateY(0)';
24 | });
25 |
26 | // Add scroll animation for other elements
27 | const animateOnScroll = function() {
28 | const elements = document.querySelectorAll('.platform-card, .support-card, .step');
29 |
30 | elements.forEach(element => {
31 | const elementPosition = element.getBoundingClientRect().top;
32 | const screenPosition = window.innerHeight / 1.3;
33 |
34 | if (elementPosition < screenPosition) {
35 | element.style.opacity = '1';
36 | element.style.transform = 'translateY(0)';
37 | }
38 | });
39 | };
40 |
41 | // Apply initial styles for animations (excluding feature cards)
42 | const elementsToAnimate = document.querySelectorAll('.platform-card, .support-card, .step');
43 | elementsToAnimate.forEach(element => {
44 | element.style.opacity = '0';
45 | element.style.transform = 'translateY(20px)';
46 | element.style.transition = 'opacity 0.5s ease, transform 0.5s ease';
47 | });
48 |
49 | // Run animation on scroll
50 | window.addEventListener('scroll', animateOnScroll);
51 |
52 | // Run once on load
53 | setTimeout(animateOnScroll, 100);
54 | });
55 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
Enhance Your Discord with Proper Embeds for Social Media Links.
14 |
15 | # 🛠️ Usage
16 | Send a message containing a X/Twitter, Instagram, Reddit, Threads, Pixiv, Bluesky, YouTube link, and the bot will remove your message or just the embed and automatically convert it to it's fixed link respectively, replying with the fixed link and label of who sent it.
17 |
18 |
19 |
20 | You can toggle the link conversion on specific channels using /activate and /deactivate.
21 |
22 | # 🌟 Why Choose FixEmbed?
23 | - **Comprehensive Platform Support**: Supports X/Twitter, Instagram, Reddit, Threads, Pixiv, Bluesky, YouTube, and more.
24 | - **User-Friendly Configuration**: Easy setup with customizable settings for individual servers.
25 | - **Reliable Performance**: Ensures consistent embed functionality across all platforms.
26 |
27 | # 📋 Key Features
28 | 1. **Multi-Platform Support**:
29 | - **X/Twitter**
30 | - **Instagram**
31 | - **Reddit**
32 | - **Threads**
33 | - **Pixiv**
34 | - **Bluesky**
35 | - **YouTube**
36 | 2. **Customizable Settings**:
37 | - Activate or deactivate services per channel or server-wide.
38 | 3. **Direct Message Capability**:
39 | - Use the bot privately by sending links directly.
40 | 4. **Easy Hosting Options**:
41 | - Host the bot yourself using Docker.
42 |
43 | # 🚀 Invite FixEmbed to Your Server
44 | Click the following link to invite FixEmbed to your server: [Invite FixEmbed](https://discord.com/oauth2/authorize?client_id=1173820242305224764)
45 |
46 | # 🐳 Host FixEmbed Yourself
47 | You can host the bot yourself using Docker:
48 |
49 | ```bash
50 | docker pull kenhendricks00/fixembed
51 | docker run -d kenhendricks00/fixembed
52 | ```
53 | Just don't forget to set your bot's token using BOT_TOKEN
54 |
55 | # 💬 Support
56 | If you need support or have any questions, you can join the [support server](https://discord.gg/QFxTAmtZdn) or open an issue on GitHub.
57 |
58 | **Note:** If it's a technical issue, be sure to have debug info ready by using /settings, then click Debug.
59 |
60 | # 🎉 Quick Links
61 | - [Invite FixEmbed](https://discord.com/oauth2/authorize?client_id=1173820242305224764)
62 | - [Vote for FixEmbed on Top.gg](https://top.gg/bot/1173820242305224764)
63 | - [Star our Source Code on GitHub](https://github.com/kenhendricks00/FixEmbed)
64 | - [Join the Support Server](https://discord.gg/QFxTAmtZdn)
65 |
66 | # 📜 Credits
67 | - [FxTwitter](https://github.com/FixTweet/FxTwitter), the service used to fix Twitter embeds, created by FixTweet
68 | - [InstaFix](https://github.com/Wikidepia/InstaFix), the service used to fix Instagram embeds, created by Wikidepia
69 | - [vxReddit](https://github.com/dylanpdx/vxReddit), the service used to fix Reddit embeds, created by dylanpdx
70 | - [fixthreads](https://github.com/milanmdev/fixthreads), the service used to fix Threads embeds, created by milanmdev
71 | - [phixiv](https://github.com/thelaao/phixiv), the service used to fix Pixiv embeds, created by thelaao
72 | - [VixBluesky](https://github.com/Rapougnac/VixBluesky), the service used to fix Bluesky embeds, created by Rapougnac
73 | - [koutube](https://github.com/iGerman00/koutube), the service used to fix YouTube embeds, created by iGerman00
74 |
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | FixEmbed - Fix Discord Embeds for Social Media
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
Fix your Discord embeds with one bot
46 |
FixEmbed automatically transforms social media links to proper embeds in Discord