[first] commit
This commit is contained in:
parent
4d2226e7f9
commit
2a3c35a55c
4
.gitignore
vendored
4
.gitignore
vendored
@ -150,5 +150,7 @@ cython_debug/
|
||||
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
||||
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||
#.idea/
|
||||
.idea/
|
||||
|
||||
# Data
|
||||
config.ini
|
||||
|
104
app.py
Normal file
104
app.py
Normal file
@ -0,0 +1,104 @@
|
||||
from aioflask import Flask
|
||||
from ci import app as bot
|
||||
|
||||
app = Flask(__name__)
|
||||
|
||||
|
||||
@app.route("/", methods=['GET', 'POST'])
|
||||
async def webhook(request):
|
||||
data = request.json
|
||||
# json contains an attribute that differentiates between the types, see
|
||||
# https://docs.gitlab.com/ce/user/project/integrations/webhooks.html
|
||||
# for more infos
|
||||
kind = data['object_kind']
|
||||
if kind == 'push':
|
||||
msg = generatePushMsg(data)
|
||||
elif kind == 'tag_push':
|
||||
msg = generatePushMsg(data) # TODO:Make own function for this
|
||||
elif kind == 'issue':
|
||||
msg = generateIssueMsg(data)
|
||||
elif kind == 'note':
|
||||
msg = generateCommentMsg(data)
|
||||
elif kind == 'merge_request':
|
||||
msg = generateMergeRequestMsg(data)
|
||||
elif kind == 'wiki_page':
|
||||
msg = generateWikiMsg(data)
|
||||
elif kind == 'pipeline':
|
||||
msg = generatePipelineMsg(data)
|
||||
elif kind == 'build':
|
||||
msg = generateBuildMsg(data)
|
||||
else:
|
||||
msg = "Unknown event."
|
||||
await bot.send_message(-1001441461877, msg)
|
||||
return jsonify({'status': 'ok'})
|
||||
|
||||
|
||||
def generatePushMsg(data):
|
||||
msg = f'*🔨 {data["total_commits_count"]} new commits to ' \
|
||||
f'{data["project"]["name"]}:{data["project"]["default_branch"]}*:\n\n'
|
||||
for commit in data['commits']:
|
||||
tag_link = f'<a href="{commit["url"]}">{commit["id"][:7]}</a>'
|
||||
msg = msg + f"{tag_link}: {commit['message'].rstrip()}\n"
|
||||
return msg
|
||||
|
||||
|
||||
def generateIssueMsg(data):
|
||||
action = data['object_attributes']['action']
|
||||
if action == 'open':
|
||||
assignees = ''
|
||||
for assignee in data.get('assignees', []):
|
||||
assignees += assignee['name'] + ' '
|
||||
msg = '*{0}* new issue for *{1}*:\n' \
|
||||
.format(data['project']['name'], assignees)
|
||||
elif action == 'reopen':
|
||||
assignees = ''
|
||||
for assignee in data.get('assignees', []):
|
||||
assignees += assignee['name'] + ' '
|
||||
msg = '*{0}* issue re-opened for *{1}*:\n' \
|
||||
.format(data['project']['name'], assignees)
|
||||
elif action == 'close':
|
||||
msg = '*{0}* issue closed by *{1}*:\n' \
|
||||
.format(data['project']['name'], data['user']['name'])
|
||||
elif action == 'update':
|
||||
assignees = ''
|
||||
for assignee in data.get('assignees', []):
|
||||
assignees += assignee['name'] + ' '
|
||||
msg = '*{0}* issue assigned to *{1}*:\n' \
|
||||
.format(data['project']['name'], assignees)
|
||||
else:
|
||||
msg = ""
|
||||
|
||||
msg = msg + '[{0}]({1})' \
|
||||
.format(data['object_attributes']['title'], data['object_attributes']['url'])
|
||||
return msg
|
||||
|
||||
|
||||
def generateCommentMsg(data):
|
||||
ntype = data['object_attributes']['noteable_type']
|
||||
if ntype == 'Commit':
|
||||
msg = 'note to commit'
|
||||
elif ntype == 'MergeRequest':
|
||||
msg = 'note to MergeRequest'
|
||||
elif ntype == 'Issue':
|
||||
msg = 'note to Issue'
|
||||
elif ntype == 'Snippet':
|
||||
msg = 'note on code snippet'
|
||||
else:
|
||||
msg = ""
|
||||
return msg
|
||||
|
||||
|
||||
def generateMergeRequestMsg(data):
|
||||
return 'new MergeRequest'
|
||||
|
||||
|
||||
def generateWikiMsg(data):
|
||||
return 'new wiki stuff'
|
||||
|
||||
|
||||
def generatePipelineMsg(data):
|
||||
return 'new pipeline stuff'
|
||||
|
||||
|
||||
def generateBuildMsg(data):
|
||||
return 'new build stuff'
|
21
ci.py
Normal file
21
ci.py
Normal file
@ -0,0 +1,21 @@
|
||||
from configparser import RawConfigParser
|
||||
from pyrogram import Client
|
||||
from httpx import AsyncClient, get
|
||||
|
||||
# 读取配置文件
|
||||
config = RawConfigParser()
|
||||
config.read("config.ini")
|
||||
bot_token: str = ""
|
||||
admin_id: int = 0
|
||||
bot_token = config.get("basic", "bot_token", fallback=bot_token)
|
||||
admin_id = config.getint("basic", "admin", fallback=admin_id)
|
||||
guess_time = 30 # 猜语音游戏持续时间
|
||||
""" Init httpx client """
|
||||
# 使用自定义 UA
|
||||
headers = {
|
||||
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36"
|
||||
}
|
||||
client = AsyncClient(timeout=10.0, headers=headers)
|
||||
me = get(f"https://api.telegram.org/bot{bot_token}/getme").json()
|
||||
# 初始化客户端
|
||||
app = Client("bot", bot_token=bot_token)
|
15
config.gen.ini
Normal file
15
config.gen.ini
Normal file
@ -0,0 +1,15 @@
|
||||
[pyrogram]
|
||||
api_id = 12345
|
||||
api_hash = 0123456789abc0123456789abc
|
||||
|
||||
[basic]
|
||||
bot_token = 111:abc
|
||||
admin = 777000
|
||||
|
||||
[plugins]
|
||||
root = plugins
|
||||
|
||||
[proxy]
|
||||
enabled = False
|
||||
hostname = 127.0.0.1
|
||||
port = 1080
|
9
main.py
Normal file
9
main.py
Normal file
@ -0,0 +1,9 @@
|
||||
import logging
|
||||
from ci import app as bot
|
||||
from app import app
|
||||
|
||||
# 日志记录
|
||||
logging.basicConfig(level=logging.INFO)
|
||||
bot.start()
|
||||
app.run("0.0.0.0", port=10111)
|
||||
bot.stop()
|
4
requirements.txt
Normal file
4
requirements.txt
Normal file
@ -0,0 +1,4 @@
|
||||
aioflask
|
||||
Pyrogram>=1.3.5
|
||||
Tgcrypto>=1.2.3
|
||||
httpx
|
Loading…
Reference in New Issue
Block a user