''' Интеграция Дискорда и ГитЛаба © Стешенко Артём и Зажигин Богдан 2023—2023 ''' from os import environ # Получение переменных среды и удаление файлов — # https://docs.python.org/3.12/library/os.html from database import * # Система управления базой данных — # документация внутри кода import gitlab, discord # Обертка АПИ ГитЛаба — https://python-gitlab.readthedocs.io/en/latest и # АПИ Дискорда — https://discordpy.readthedocs.io/en/latest database = GitlabDiscordDatabase() database.retrieve # получить данные из сериализованного файла БД gitlab_instance = gitlab.Gitlab(url = 'https://gitlab.megu.one', private_token = environ.get("TOKEN_GITLAB")) # определение адреса и токена экземляра ГитЛаба '''project = gitlab_instance.projects.get(13)''' # определение проекта в котором нужно создавать задачи # TODO: Привязка экзепмляра и проекта к Дискорд Каналу в БД, а не в коде intents = discord.Intents.default() # использовать требования по умолчанию intents.message_content = True # требовать содержимое сообщений # Определение событий требуемых для функционирования бота, например, «пользователь печатает» можно игнорировать, а отправленное сообщение нужно получить discord_bot = discord.Client(intents=intents) # определение конфигурации бота @discord_bot.event async def on_message(message): # обработка каждого сообщения command = message.content.startswith reply = message.channel.send if message.author == discord_bot.user: # самооигнор return issue_text = message.content.replace("/issue ","") # получение текста команды «issue» if command('/issue'): # команда создания задачи на ГитЛабе if database_spisok.get(int(message.channel.id)): project = gitlab_instance.projects.get(database_spisok.get(int(message.channel.id))) if project.issues.create({'title': issue_text}): await reply("Задача «" + issue_text + "» создана успешно, ^w^") else: await reply("не получилось, QwQ") else: await reply("данных нет, введите пожалуйста id для подключения через /project (id проекта), ^w^") '''if command('/project'): try: database_spisok[int(message.channel.id)] = int(message.content.replace("/project ","")) open("database.msgpack", "wb").write(msgpack.packb(database_spisok)) await reply("данные сохранены ^w^") except: await reply("не удалось сохранить ссылку на проект")''' if command('/setup'): try: content = message.content.replace("/setup ","").split(" ") setup = GitlabDiscordBinding(content[0], content[1], int(message.channel.id), int(message.author.id)) database.update(setup) await reply(database) except: await reply("asdadadfa") if command('/remove'): # команда удаления базы данных try: remove("database.msgpack") await reply("данные удалены ^w^") except: await reply("не удалось удалить файлы") if command('/show'): if database.get_project(message.channel.id): await reply(database.get_project(message.channel.id)) else: await reply("данных нет, введите id для подключения через /project (id проекта), ^w^") if command('/speak'): await reply("я бот для создания проектов на gitlab через дискорд созданный Артёмом (ака: TheRandomFurryGuy) и Богданом богом данным (ака: Zaboal) | [идея сделать меня фурри была предложена 1-м ради шутки]") await reply("====================================") await reply("список комманд которые я выполняю:\n/issue - создание задачи на gitlab\n/project - подключение id канала discord с id канала gitlab\n/remove - удаление id\n/show - показ id (к каждому каналу discord подключён отдельный id gitlab)\n/speak - я расскажу немного о себе (что сейчас и делаю)") '''if command('/save'): open("database.msgpack", "wb").write(msgpack.packb(database_spisok))''' discord_bot.run(environ.get("TOKEN_DISCORD")) # авторизация бота по токену из среды и запуск # TODO: Регистрировать команды бота в Команды Приложения — # https://discordpy.readthedocs.io/en/latest/interactions/api.html#application-commands: #=======================================================================