<a href="https://raw.github.com/cobrapitz/MehlBot/master/docs/badges/interrogate-badge.svg"><img alt="PyPI" src="https://raw.github.com/cobrapitz/MehlBot/master/docs/badges/interrogate-badge.svg"></a>
<a href="https://github.com/cobrapitz/MehlBot/blob/master/LICENSE"><img alt="PyPI" src="https://img.shields.io/github/license/cobrapitz/mehlbot"></a>
<a href="https://github.com/cobrapitz/MehlBot"><img alt="PyPI" src="https://img.shields.io/badge/mehl-bot-f39f37"></a>
<a href="https://pypi.org/project/mehlbot/"><img alt="PyPI" src="https://img.shields.io/pypi/v/mehlbot"></a>
<a href='https://mehlbot.readthedocs.io/en/latest/?badge=latest'><img src='https://readthedocs.org/projects/mehlbot/badge/?version=latest' alt='Documentation Status' /></a>
[//]: # (<a href="https://github.com/psf/black"><img alt="PyPI" src="https://img.shields.io/badge/code%20style-black-000000.svg"></a>)
[//]: # (<a href="https://pypi.org/project/mehlbot/"><img alt="PyPI" src="https://img.shields.io/badge/mehl-bot-f39f37"></a>)
[//]: # (![t](https://app.codecov.io/gh/cobrapitz/mehlbot))
[//]: # ([![security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit))
[//]: # (![example workflow](https://github.com/github/docs/actions/workflows/main.yml/badge.svg))
# MehlBot
MehlBot is a Discord bot that responds to commands by executing (callback) functions.
It's built around the `discord.Client` class.
This allows an easy integration to existing bots and creation of new bots.
Documentation: [docs](https://mehlbot.readthedocs.io/en/latest/)
See [examples/hellow_bot.py](https://github.com/cobrapitz/MehlBot/blob/master/examples/hello_bot.py) for full source code.
```Python
# imports ...
class HelloBot(discord.Client): # discord.Client class
def __init__(self, intents: Intents, **options) -> None:
super().__init__(intents=intents, **options)
async def on_ready(self) -> None: # Gets called when bot is ready/started
print("Bot started.")
async def on_message(self, message: Message):
if message.author == self.user: # skip if message's author is the bot
return
# necessary callback command
# bot_commands are in mehlbot.command
command_found = await command_callback.process_command(self, bot_commands, message)
# prefix with command if message is command
log_msg = "" if not command_found else "command: "
log_msg += f"{message.author.nick} ({message.author.name}): '{message.content}'"
print(log_msg)
def main():
hello_bot = HelloBot(discord.Intents.all()) # discord intents
with Path("token.txt").open() as file: # load token form file (.gitignore) or use env
token = file.read()
hello_bot.run(token)
```
And this shows how to add commands
```Python
from mehlbot.command import add_command
async def _add(message: discord.Message, client: discord.Client, args: List):
url = args[0]
...
async def _export_playlist(message: discord.Message, client: discord.Client, args: List):
playlist = args[0]
...
add_command("add", _add,
allowed_num_args=[["url"]], # requires exactly 1 argument
description="Adds the given YouTube url to the current playlist.")
add_command("export playlist", _export_playlist,
allowed_num_args=[[], ["playlist_name"]], # either 0 or 1 arg
description="Exports urls of current playlist or of given playlist.")
```
- - -
Raw data
{
"_id": null,
"home_page": "https://github.com/cobrapitz/MehlBot",
"name": "mehlbot",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8.1,<4.0.0",
"maintainer_email": "",
"keywords": "Discord,discord.py,Discord-Bot,Discord-Command-Bot,Python",
"author": "K Brandl",
"author_email": "kbrandla@duck.com",
"download_url": "https://files.pythonhosted.org/packages/b3/15/c6afb6e6070f468a15d03e290bf6754f87e9b8ad2ca0a58a92f6cdac65a0/mehlbot-1.1.3.tar.gz",
"platform": null,
"description": "<a href=\"https://raw.github.com/cobrapitz/MehlBot/master/docs/badges/interrogate-badge.svg\"><img alt=\"PyPI\" src=\"https://raw.github.com/cobrapitz/MehlBot/master/docs/badges/interrogate-badge.svg\"></a>\n<a href=\"https://github.com/cobrapitz/MehlBot/blob/master/LICENSE\"><img alt=\"PyPI\" src=\"https://img.shields.io/github/license/cobrapitz/mehlbot\"></a>\n<a href=\"https://github.com/cobrapitz/MehlBot\"><img alt=\"PyPI\" src=\"https://img.shields.io/badge/mehl-bot-f39f37\"></a>\n<a href=\"https://pypi.org/project/mehlbot/\"><img alt=\"PyPI\" src=\"https://img.shields.io/pypi/v/mehlbot\"></a>\n<a href='https://mehlbot.readthedocs.io/en/latest/?badge=latest'><img src='https://readthedocs.org/projects/mehlbot/badge/?version=latest' alt='Documentation Status' /></a>\n\n\n[//]: # (<a href=\"https://github.com/psf/black\"><img alt=\"PyPI\" src=\"https://img.shields.io/badge/code%20style-black-000000.svg\"></a>)\n[//]: # (<a href=\"https://pypi.org/project/mehlbot/\"><img alt=\"PyPI\" src=\"https://img.shields.io/badge/mehl-bot-f39f37\"></a>)\n[//]: # (![t](https://app.codecov.io/gh/cobrapitz/mehlbot))\n[//]: # ([![security: bandit](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit))\n[//]: # (![example workflow](https://github.com/github/docs/actions/workflows/main.yml/badge.svg))\n\n# MehlBot\n\nMehlBot is a Discord bot that responds to commands by executing (callback) functions.\n\nIt's built around the `discord.Client` class.\nThis allows an easy integration to existing bots and creation of new bots. \n\nDocumentation: [docs](https://mehlbot.readthedocs.io/en/latest/)\n\nSee [examples/hellow_bot.py](https://github.com/cobrapitz/MehlBot/blob/master/examples/hello_bot.py) for full source code.\n```Python\n# imports ... \n\nclass HelloBot(discord.Client): # discord.Client class\n\n def __init__(self, intents: Intents, **options) -> None:\n super().__init__(intents=intents, **options)\n\n async def on_ready(self) -> None: # Gets called when bot is ready/started\n print(\"Bot started.\")\n\n async def on_message(self, message: Message):\n if message.author == self.user: # skip if message's author is the bot\n return\n\n # necessary callback command\n # bot_commands are in mehlbot.command\n command_found = await command_callback.process_command(self, bot_commands, message)\n\n # prefix with command if message is command\n log_msg = \"\" if not command_found else \"command: \"\n log_msg += f\"{message.author.nick} ({message.author.name}): '{message.content}'\"\n print(log_msg)\n\n\ndef main():\n hello_bot = HelloBot(discord.Intents.all()) # discord intents\n with Path(\"token.txt\").open() as file: # load token form file (.gitignore) or use env\n token = file.read()\n hello_bot.run(token)\n```\n\nAnd this shows how to add commands\n\n```Python\nfrom mehlbot.command import add_command\n\nasync def _add(message: discord.Message, client: discord.Client, args: List):\n url = args[0]\n ...\n\nasync def _export_playlist(message: discord.Message, client: discord.Client, args: List):\n playlist = args[0]\n ...\n \nadd_command(\"add\", _add,\n allowed_num_args=[[\"url\"]], # requires exactly 1 argument\n description=\"Adds the given YouTube url to the current playlist.\")\n\nadd_command(\"export playlist\", _export_playlist,\n allowed_num_args=[[], [\"playlist_name\"]], # either 0 or 1 arg\n description=\"Exports urls of current playlist or of given playlist.\")\n\n```\n\n- - - \n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A basic interface for Discord bots to handle receiving commands using the discord.py package.",
"version": "1.1.3",
"split_keywords": [
"discord",
"discord.py",
"discord-bot",
"discord-command-bot",
"python"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "13a5ce2a25f976662d11d69445cf1cf9bfc39706c529d3d505aa4ad84f3754c6",
"md5": "de292e11b275bf824c5b2a6585e6b0cd",
"sha256": "4a6181f2d1d1e8b3940951e0c94f39cf24c8b1e1f55b5632305d380e43f9f206"
},
"downloads": -1,
"filename": "mehlbot-1.1.3-py3-none-any.whl",
"has_sig": false,
"md5_digest": "de292e11b275bf824c5b2a6585e6b0cd",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8.1,<4.0.0",
"size": 7141,
"upload_time": "2023-03-17T19:17:23",
"upload_time_iso_8601": "2023-03-17T19:17:23.473711Z",
"url": "https://files.pythonhosted.org/packages/13/a5/ce2a25f976662d11d69445cf1cf9bfc39706c529d3d505aa4ad84f3754c6/mehlbot-1.1.3-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "b315c6afb6e6070f468a15d03e290bf6754f87e9b8ad2ca0a58a92f6cdac65a0",
"md5": "dcec83684abf14be1b4a868a98455e8b",
"sha256": "51cc489eb77c4f2282667299e9d9d317693a5b56a440d4632108560a777b41f8"
},
"downloads": -1,
"filename": "mehlbot-1.1.3.tar.gz",
"has_sig": false,
"md5_digest": "dcec83684abf14be1b4a868a98455e8b",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8.1,<4.0.0",
"size": 7756,
"upload_time": "2023-03-17T19:17:25",
"upload_time_iso_8601": "2023-03-17T19:17:25.199272Z",
"url": "https://files.pythonhosted.org/packages/b3/15/c6afb6e6070f468a15d03e290bf6754f87e9b8ad2ca0a58a92f6cdac65a0/mehlbot-1.1.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-03-17 19:17:25",
"github": true,
"gitlab": false,
"bitbucket": false,
"github_user": "cobrapitz",
"github_project": "MehlBot",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"requirements": [],
"tox": true,
"lcname": "mehlbot"
}