discord-gitlab/source/gitlab-discord_bot/bot.py

92 lines
No EOL
5.2 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

''' Интеграция Дискорда и ГитЛаба
© Стешенко Артём и Зажигин Богдан 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:
#=======================================================================