Metadata-Version: 2.4
Name: CustomModules
Version: 1.0.2
Summary: A collection of custom Python modules for Discord bots and utilities
Home-page: https://github.com/Serpensin/CustomModules-Python
Author: Serpensin
License-Expression: AGPL-3.0-or-later
Project-URL: Homepage, https://github.com/Serpensin/CustomModules-Python
Project-URL: Bug Reports, https://github.com/Serpensin/CustomModules-Python/issues
Project-URL: Source, https://github.com/Serpensin/CustomModules-Python
Keywords: discord,bot,utilities,modules,custom
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Communications :: Chat
Requires-Python: >=3.10
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Provides-Extra: apptranslation
Requires-Dist: aiohttp==3.9.3; extra == "apptranslation"
Requires-Dist: aiosignal==1.3.1; extra == "apptranslation"
Requires-Dist: attrs==23.2.0; extra == "apptranslation"
Requires-Dist: discord.py==2.3.2; extra == "apptranslation"
Requires-Dist: frozenlist==1.4.1; extra == "apptranslation"
Requires-Dist: idna==3.6; extra == "apptranslation"
Requires-Dist: multidict==6.0.5; extra == "apptranslation"
Requires-Dist: yarl==1.9.4; extra == "apptranslation"
Provides-Extra: bitmaphandler
Provides-Extra: botdirectory
Requires-Dist: aiohttp==3.9.3; extra == "botdirectory"
Requires-Dist: aiosignal==1.3.1; extra == "botdirectory"
Requires-Dist: attrs==23.2.0; extra == "botdirectory"
Requires-Dist: frozenlist==1.4.1; extra == "botdirectory"
Requires-Dist: idna==3.6; extra == "botdirectory"
Requires-Dist: multidict==6.0.5; extra == "botdirectory"
Requires-Dist: yarl==1.9.4; extra == "botdirectory"
Provides-Extra: databasehandler
Requires-Dist: aiosqlite>=0.19.0; extra == "databasehandler"
Requires-Dist: aiomysql>=0.2.0; extra == "databasehandler"
Requires-Dist: asyncpg>=0.29.0; extra == "databasehandler"
Requires-Dist: psycopg[binary,pool]>=3.1.0; extra == "databasehandler"
Requires-Dist: motor>=3.3.0; extra == "databasehandler"
Provides-Extra: googletrans
Requires-Dist: cachetools==5.3.3; extra == "googletrans"
Requires-Dist: certifi==2024.2.2; extra == "googletrans"
Requires-Dist: charset-normalizer==3.3.2; extra == "googletrans"
Requires-Dist: google-api-core==2.18.0; extra == "googletrans"
Requires-Dist: googleapis-common-protos==1.63.0; extra == "googletrans"
Requires-Dist: google-auth==2.29.0; extra == "googletrans"
Requires-Dist: google-cloud-core==2.4.1; extra == "googletrans"
Requires-Dist: google-cloud-translate==3.15.3; extra == "googletrans"
Requires-Dist: grpcio==1.62.1; extra == "googletrans"
Requires-Dist: grpcio-status==1.62.1; extra == "googletrans"
Requires-Dist: idna==3.6; extra == "googletrans"
Requires-Dist: protobuf==4.25.3; extra == "googletrans"
Requires-Dist: proto-plus==1.23.0; extra == "googletrans"
Requires-Dist: pyasn1_modules==0.4.0; extra == "googletrans"
Requires-Dist: pyasn1==0.6.0; extra == "googletrans"
Requires-Dist: requests==2.31.0; extra == "googletrans"
Requires-Dist: rsa==4.9; extra == "googletrans"
Requires-Dist: urllib3==2.2.1; extra == "googletrans"
Provides-Extra: invitetracker
Requires-Dist: aiohttp==3.9.3; extra == "invitetracker"
Requires-Dist: aiosignal==1.3.1; extra == "invitetracker"
Requires-Dist: attrs==23.2.0; extra == "invitetracker"
Requires-Dist: discord.py==2.3.2; extra == "invitetracker"
Requires-Dist: frozenlist==1.4.1; extra == "invitetracker"
Requires-Dist: idna==3.6; extra == "invitetracker"
Requires-Dist: multidict==6.0.5; extra == "invitetracker"
Requires-Dist: yarl==1.9.4; extra == "invitetracker"
Provides-Extra: killswitch
Requires-Dist: aiohttp==3.9.3; extra == "killswitch"
Requires-Dist: aiosignal==1.3.1; extra == "killswitch"
Requires-Dist: attrs==23.2.0; extra == "killswitch"
Requires-Dist: beautifulsoup4==4.12.3; extra == "killswitch"
Requires-Dist: frozenlist==1.4.1; extra == "killswitch"
Requires-Dist: html2text==2024.2.26; extra == "killswitch"
Requires-Dist: idna==3.6; extra == "killswitch"
Requires-Dist: multidict==6.0.5; extra == "killswitch"
Requires-Dist: soupsieve==2.5; extra == "killswitch"
Requires-Dist: yarl==1.9.4; extra == "killswitch"
Provides-Extra: libretrans
Requires-Dist: aiohttp; extra == "libretrans"
Provides-Extra: loghandler
Requires-Dist: colorama==0.4.6; extra == "loghandler"
Provides-Extra: patchnotes
Requires-Dist: aiohttp; extra == "patchnotes"
Requires-Dist: beautifulsoup4; extra == "patchnotes"
Requires-Dist: html2text; extra == "patchnotes"
Provides-Extra: privatevoice
Requires-Dist: discord.py; extra == "privatevoice"
Provides-Extra: randomusernames
Provides-Extra: statdock
Requires-Dist: discord.py; extra == "statdock"
Requires-Dist: pytz; extra == "statdock"
Provides-Extra: steam
Requires-Dist: aiohttp==3.9.3; extra == "steam"
Requires-Dist: aiosignal==1.3.1; extra == "steam"
Requires-Dist: attrs==23.2.0; extra == "steam"
Requires-Dist: frozenlist==1.4.1; extra == "steam"
Requires-Dist: idna==3.6; extra == "steam"
Requires-Dist: multidict==6.0.5; extra == "steam"
Requires-Dist: yarl==1.9.4; extra == "steam"
Provides-Extra: steamcharts
Requires-Dist: aiohttp==3.9.3; extra == "steamcharts"
Requires-Dist: aiosignal==1.3.1; extra == "steamcharts"
Requires-Dist: asyncio==3.4.3; extra == "steamcharts"
Requires-Dist: attrs==23.2.0; extra == "steamcharts"
Requires-Dist: beautifulsoup4==4.12.3; extra == "steamcharts"
Requires-Dist: frozenlist==1.4.1; extra == "steamcharts"
Requires-Dist: idna==3.6; extra == "steamcharts"
Requires-Dist: multidict==6.0.5; extra == "steamcharts"
Requires-Dist: soupsieve==2.5; extra == "steamcharts"
Requires-Dist: yarl==1.9.4; extra == "steamcharts"
Provides-Extra: twitch
Requires-Dist: aiohttp; extra == "twitch"
Requires-Dist: requests; extra == "twitch"
Provides-Extra: all
Requires-Dist: aiohttp; extra == "all"
Requires-Dist: aiohttp==3.9.3; extra == "all"
Requires-Dist: aiomysql>=0.2.0; extra == "all"
Requires-Dist: aiosignal==1.3.1; extra == "all"
Requires-Dist: aiosqlite>=0.19.0; extra == "all"
Requires-Dist: asyncio==3.4.3; extra == "all"
Requires-Dist: asyncpg>=0.29.0; extra == "all"
Requires-Dist: attrs==23.2.0; extra == "all"
Requires-Dist: beautifulsoup4; extra == "all"
Requires-Dist: beautifulsoup4==4.12.3; extra == "all"
Requires-Dist: cachetools==5.3.3; extra == "all"
Requires-Dist: certifi==2024.2.2; extra == "all"
Requires-Dist: charset-normalizer==3.3.2; extra == "all"
Requires-Dist: colorama==0.4.6; extra == "all"
Requires-Dist: discord.py; extra == "all"
Requires-Dist: discord.py==2.3.2; extra == "all"
Requires-Dist: frozenlist==1.4.1; extra == "all"
Requires-Dist: google-api-core==2.18.0; extra == "all"
Requires-Dist: google-auth==2.29.0; extra == "all"
Requires-Dist: google-cloud-core==2.4.1; extra == "all"
Requires-Dist: google-cloud-translate==3.15.3; extra == "all"
Requires-Dist: googleapis-common-protos==1.63.0; extra == "all"
Requires-Dist: grpcio-status==1.62.1; extra == "all"
Requires-Dist: grpcio==1.62.1; extra == "all"
Requires-Dist: html2text; extra == "all"
Requires-Dist: html2text==2024.2.26; extra == "all"
Requires-Dist: idna==3.6; extra == "all"
Requires-Dist: motor>=3.3.0; extra == "all"
Requires-Dist: multidict==6.0.5; extra == "all"
Requires-Dist: proto-plus==1.23.0; extra == "all"
Requires-Dist: protobuf==4.25.3; extra == "all"
Requires-Dist: psycopg[binary,pool]>=3.1.0; extra == "all"
Requires-Dist: pyasn1==0.6.0; extra == "all"
Requires-Dist: pyasn1_modules==0.4.0; extra == "all"
Requires-Dist: pytz; extra == "all"
Requires-Dist: requests; extra == "all"
Requires-Dist: requests==2.31.0; extra == "all"
Requires-Dist: rsa==4.9; extra == "all"
Requires-Dist: soupsieve==2.5; extra == "all"
Requires-Dist: urllib3==2.2.1; extra == "all"
Requires-Dist: yarl==1.9.4; extra == "all"
Dynamic: home-page
Dynamic: license-file
Dynamic: provides-extra
Dynamic: requires-python

# CustomModules

[![PyPI version](https://img.shields.io/pypi/v/CustomModules.svg)](https://pypi.org/project/CustomModules/)
[![Python versions](https://img.shields.io/pypi/pyversions/CustomModules.svg)](https://pypi.org/project/CustomModules/)
[![License: AGPL v3](https://img.shields.io/badge/License-AGPL%20v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0)
[![Build Status](https://github.com/Serpensin/CustomModules-Python/actions/workflows/test-build.yml/badge.svg)](https://github.com/Serpensin/CustomModules-Python/actions/workflows/test-build.yml)
[![PyPI downloads](https://img.shields.io/pypi/dm/CustomModules.svg)](https://pypi.org/project/CustomModules/)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)

A collection of custom Python modules for Discord bots and various utilities.

## Installation

Install the base package:
```bash
pip install CustomModules
```

Install with specific module dependencies:
```bash
# Install with a specific module's dependencies
pip install CustomModules[StatDock]
pip install CustomModules[DatabaseHandler]
pip install CustomModules[LogHandler]

# Install multiple modules
pip install CustomModules[StatDock,DatabaseHandler,LogHandler]

# Install all modules with all dependencies
pip install CustomModules[all]
```

## Available Modules

- **AppTranslation** - Discord Application translation utilities
- **BitmapHandler** - Bitmap manipulation and handling
- **BotDirectory** - Bot directory management
- **DatabaseHandler** - Multi-database async handler (SQLite, MySQL, PostgreSQL, MongoDB)
- **Googletrans** - Google Translate integration
- **InviteTracker** - Discord invite tracking
- **Killswitch** - Dead by Daylight killswitch monitoring
- **Libretrans** - LibreTranslate integration
- **LogHandler** - Advanced logging with colored console output
- **Patchnotes** - Patch notes management for DeadByDaylight
- **PrivateVoice** - Private voice channel management
- **RandomUsernames** - Random username generation
- **StatDock** - Statistics tracking for Discord
- **Steam** - Steam API integration
- **SteamCharts** - Steam Charts data retrieval
- **Twitch** - Twitch API integration

## Usage

Import modules using dot notation:
```python
from CustomModules.bitmap_handler import BitmapHandler
from CustomModules.database_handler import DatabaseHandler
from CustomModules.log_handler import LogManager
from CustomModules.stat_dock import StatDock
```

## Requirements

- Python 3.10 or higher
- Additional dependencies are installed based on which modules you use (see extras_require)

## License

This project is licensed under the GNU Affero General Public License v3 (AGPL-3.0).

## Documentation

- **[INSTALLATION.md](INSTALLATION.md)** - Detailed installation guide for end users
- **[DEVELOPMENT.md](DEVELOPMENT.md)** - Guide for developers and contributors
- **[TROUBLESHOOTING.md](TROUBLESHOOTING.md)** - Common issues and solutions

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## Support

For issues and questions, please use the [GitHub Issues](https://github.com/Serpensin/CustomModules-Python/issues) page.
