{"id":15686994,"url":"https://github.com/ar4ikov/rouneford","last_synced_at":"2025-05-07T18:52:42.846Z","repository":{"id":53130863,"uuid":"171313132","full_name":"Ar4ikov/Rouneford","owner":"Ar4ikov","description":"Дискорд-Бот с поддержкой создания и подключения плагинов с удобной системой настройки","archived":false,"fork":false,"pushed_at":"2021-10-19T16:44:32.000Z","size":1566,"stargazers_count":15,"open_issues_count":0,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-03-31T13:04:13.357Z","etag":null,"topics":["api","bot","discord","discord-api","discord-bot","plugins","python"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ar4ikov.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-02-18T15:58:50.000Z","updated_at":"2024-11-26T17:54:46.000Z","dependencies_parsed_at":"2022-09-24T10:43:02.532Z","dependency_job_id":null,"html_url":"https://github.com/Ar4ikov/Rouneford","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ar4ikov%2FRouneford","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ar4ikov%2FRouneford/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ar4ikov%2FRouneford/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ar4ikov%2FRouneford/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ar4ikov","download_url":"https://codeload.github.com/Ar4ikov/Rouneford/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252939488,"owners_count":21828752,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","bot","discord","discord-api","discord-bot","plugins","python"],"created_at":"2024-10-03T17:42:24.206Z","updated_at":"2025-05-07T18:52:42.818Z","avatar_url":"https://github.com/Ar4ikov.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"### Технические шоколадки!\n\u003e С момента релиза данного продукта у `discord.py` изменился некоторый функционал, который конфликтуает с актуальной версией продукта, из-за чего запуск продукта может \n\u003e сопровождаться некорректным поведением (или отсутствием признаков жизни). Постараюсь исправить ситуацию в ближайшие сроки, но не претендую на столь высокую срочность.\n---\n\n# RounefordBot \u003cimg align=\"right\" src=\"https://raw.githubusercontent.com/Ar4ikov/Rouneford/master/images/Rouneford_icon.png\" height=\"170\" width=\"170\"\u003e\n\nА зачем? А нафига? Да просто так!\n\nКоротко о боте:\n---\n- Открытость и свободно редактируемый код, понятный и удобный для разработки\n- Поддержка сторонних плагинов\n- Реализация на официальном API - discord.py (https://discordpy.readthedocs.io)\n- Простота в настройке и дополнении\n- Удобный функционал засчёт добавления кастомных функций\n- Стартовые плагины для полноценной функциональности бота на сервере, включая стриминг аудио\n\n## 1. Установка\n\n- #### Установка на устройство\n\nУстановка производится путём клонирования репозитория на ваше устройство\n```console\nroot@Ar4kov:~$ git clone https://github.com/Ar4ikov/Rouneford/ Rounedford\n```\n\n- #### Установка дополнений\n\nДля работы бота необходимо иметь в наличии библиотеки: `discord.py`, `youtube-dl`, `ffmpeg` и `asyncio` (Стандартную, если таковой не\nимелось изначально)\n\n```console\nroot@Ar4ikov:~$ pip install discord.py[voice]\nroot@Ar4ikov:~$ pip install youtube-dl\nroot@Ar4ikov:~$ pip install asyncio\nroot@Ar4ikov:~$ pip install ffmpeg\n```\n\n## 2. Настройка и запуск бота\n\n- #### Получение токена бота\n\nБольше информации о получении Access-token бота вы можете получить [`тут`](https://github.com/reactiflux/discord-irc/wiki/Creating-a-discord-bot-%26-getting-a-token)\n\n- #### Настройка `bot.py`\n\n```python\nfrom core.core import RounefordBot\n\nbot = RounefordBot(access_token=\"Ваш-Bot-Token\")\nbot.run()\n\n```\n\n## 3. Создание собственных плагинов\n\n### Список стандартных плагинов будет пополняться.\n\n- #### Создание директории\n\nНеобходимо создать директорию плагина в папке `plugins`, которая должна выглядеть следующим образом:\n```console\n├── __init__.py\n├── plugin.py\n└── немного файлов здесь\n```\n\nВ файле `__init__.py` необходимо импортировать ваш основной класс плагина\n```python\nfrom plugins.TestPlugin.test_plugin import Plugin\n```\n\n- #### Инициализация класса\n\n\nКласс может иметь абсолютно любое название, однако должен содержать следующие свойства ниже и быть унаследован от класса\n`core.api.BotPlugin`\n\n```python\nfrom core.api import BotPlugin\nfrom discord.ext.commands import Bot as Client\n\nclass Plugin(BotPlugin):\n    def __init__(self, client: Client):\n        super().__init__(client)\n\n        self.plugin_name = \"Test Plugin\"               # Имя плагина\n        self.author = \"https://github.com/Ar4ikov/\"    # Автор\n        self.version = \"1.0.1\"                         # Версия\n        self.plugin_id = \"test_plugin\"                 # Id плагина\n        self.description = \"\"\"Simple plugin\"\"\"         # Описание\n        self.tasks = [\"task_1\"]                        # Имена фоновых задач\n        self.commands = {}                             # Описание команд плагина вида {\"command\": \"how works\"}\n```\n\n- #### Определение фоновых задач\n\n```python\nfrom asyncio import sleep\n\nasync def background_task_1(self):\n        \"\"\"Имя фоновой задачи выглядит следующим образом:\n        - background_{name}\n        где: \n          - {name} - Имя задачи из `self.tasks`\"\"\"\n          \n        while True:\n            await sleep(1)\n            print(self.plugin_name, \"Готов к труду и обороне!\")\n\n```\n\n- #### Определение команд\n\n```python\nasync def cmd_kek(self, channel, member, *args, **kwargs):\n        await self.send_message(channel, \"Вас только что 'кекнули'!\")\n```\n\n- #### Логирование\n```python\nfrom core.objects import Logger\nlogger = Logger(\"my_logs\")\nlogger.log(self, \"info\")\n\n# self - сам класс плагина, в котором происходит логирование\n\n# Клиент содержит в себе экзлемпляр класса Logger, но вы можете создать свой логгер (как это сделано выше)\nself.client.logging.log(self, \"Запущен новый процесс\")\nself.client.logging.log(self, \"{} \u003e\u003e [}\".format(member.name, \" \".join(args)))\n```\n\n- #### Запуск плагина\n\n```python\nfrom discord import Member  # Не несёт смысловой нагрузки, исключительно в косметических целях\n\nasync def run(self):\n    super().run()\n    @self.client.listen()\n    async def on_member_join(member: Member):\n        print(member.name, \"зашёл на сервер!\")\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Far4ikov%2Frouneford","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Far4ikov%2Frouneford","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Far4ikov%2Frouneford/lists"}