79 lines
3.0 KiB
Python
79 lines
3.0 KiB
Python
import os
|
|
import sys
|
|
from functools import wraps
|
|
from bot import LOGGER, dispatcher
|
|
from bot import OWNER_ID, GITHUB_USER_NAME, SUDO_USERS, AUTHORIZED_CHATS, GITHUB_TOKEN, GITHUB_ORG_NAME, dispatcher, DB_URI
|
|
from telegram import ParseMode, Update
|
|
from telegram.ext import CallbackContext, CommandHandler, Filters
|
|
from telegram.ext.dispatcher import run_async
|
|
from bot.helper.telegram_helper.bot_commands import BotCommands
|
|
from bot.helper.ext_utils.db_handler import DbManger
|
|
from bot.helper.telegram_helper.filters import CustomFilters
|
|
from bot.helper.telegram_helper.message_utils import sendMessage
|
|
|
|
AUTHORIZED_CHATS.add(OWNER_ID)
|
|
import subprocess
|
|
import string
|
|
import random
|
|
|
|
bashfile=''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(10))
|
|
bashfile='/tmp/'+bashfile+'.sh'
|
|
#CHAT_ID = update.effective_chat.id
|
|
f = open(bashfile, 'w')
|
|
s = """
|
|
PERMISSION=push
|
|
echo "$1" | grep -e '$' > /dev/null;
|
|
CODE=$1
|
|
set -- $CODE
|
|
GITHUB_TOKEN=$1
|
|
GITHUB_USER_NAME=$2
|
|
GITHUB_ORG_NAME=$3
|
|
INVITEE_USERNAME=$4
|
|
REPO_TO_INVITE=$5
|
|
bash curl -i -H "Authorization: token $GITHUB_TOKEN" "https://api.github.com/repos/$GITHUB_ORG_NAME/$REPO_TO_INVITE/collaborators/$INVITEE_USERNAME" -X PUT -d "{\"permission\":\"$PERMISSION\"}" 2>&1 | grep message || echo "Sent Invite To $INVITEE_USERNAME to Join $REPO_TO_INVITE"
|
|
"""
|
|
f.write(s)
|
|
f.close()
|
|
os.chmod(bashfile, 0o755)
|
|
bashcmd=bashfile
|
|
for arg in sys.argv[1:]:
|
|
bashcmd += ' '+arg
|
|
|
|
def invite(update: Update, context: CallbackContext):
|
|
message = update.effective_message
|
|
cmd = message.text.split(' ', 1)
|
|
CHAT_ID=message.chat_id
|
|
print(CHAT_ID)
|
|
if len(cmd) == 1:
|
|
message.reply_text('Please Provide Username And Repo Name To Invite A GitHub User')
|
|
return
|
|
cmd = cmd[1]
|
|
process = subprocess.Popen(
|
|
bashcmd + ' ' + '"' + GITHUB_TOKEN + ' ' + GITHUB_USER_NAME + ' ' + GITHUB_ORG_NAME + ' ' + cmd + '"', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
|
|
stdout, stderr = process.communicate()
|
|
reply = ''
|
|
stderr = stderr.decode()
|
|
stdout = stdout.decode()
|
|
if stdout:
|
|
reply += f"*Inviting User To Mentioned GitHub Repo*\n\n '{stdout}'\n"
|
|
LOGGER.error(f"Shell - {bashcmd} {GITHUB_TOKEN} {GITHUB_USER_NAME} {GITHUB_ORG_NAME} {cmd}- {stderr}")
|
|
if stderr:
|
|
reply += f"*Stderr*\n`{stderr}`\n"
|
|
LOGGER.error(f"Shell - {bashcmd} {GITHUB_TOKEN} {GITHUB_USER_NAME} {GITHUB_ORG_NAME} {cmd}- {stderr}")
|
|
if len(reply) > 3000:
|
|
with open('shell_output.txt', 'w') as file:
|
|
file.write(reply)
|
|
with open('shell_output.txt', 'rb') as doc:
|
|
context.bot.send_document(
|
|
document=doc,
|
|
filename=doc.name,
|
|
reply_to_message_id=message.message_id,
|
|
chat_id=message.chat_id)
|
|
else:
|
|
message.reply_text(reply, parse_mode=ParseMode.MARKDOWN)
|
|
|
|
|
|
INVITE_HANDLER = CommandHandler(['inv', 'invite'], invite,
|
|
filters=CustomFilters.owner_filter | CustomFilters.sudo_user, run_async=True)
|
|
dispatcher.add_handler(INVITE_HANDLER)
|