mirrorbot: Add Additional Features
- Add dump, pdump, invite, dummy Co-authored-by: saurajbot <gitsauraj@gmail.com>
This commit is contained in:
parent
ace79bd920
commit
d481d5dc89
30
README.md
30
README.md
|
|
@ -71,12 +71,29 @@ APM, ARJ, CHM, CPIO, CramFS, DEB, DMG, FAT,
|
||||||
HFS, LZH, LZMA, LZMA2, MBR, MSI, MSLZ, NSIS,
|
HFS, LZH, LZMA, LZMA2, MBR, MSI, MSLZ, NSIS,
|
||||||
NTFS, RPM, SquashFS, UDF, VHD, XAR, Z.
|
NTFS, RPM, SquashFS, UDF, VHD, XAR, Z.
|
||||||
```
|
```
|
||||||
|
## Additional Features
|
||||||
|
- Dump Android Firmwares To GitHub Org, Publicly Or Privately
|
||||||
|
- Invite Users To Private GitHub Repos
|
||||||
|
- Generate Dummy Device-Trees And Vendor-Trees From Firmware Dump Link
|
||||||
|
- How to use /dump , /pdump , /invite , /dummy?
|
||||||
|
```
|
||||||
|
dump: /dump <firmware link>
|
||||||
|
pdump: /pdump <firmware link>
|
||||||
|
invite: /invite Box-boi redmi_biloba_dump
|
||||||
|
dummy: /dump <dump link> <dump branch>(optional)
|
||||||
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
# How to deploy?
|
# How to deploy?
|
||||||
Deploying is pretty much straight forward and is divided into several steps as follows:
|
Deploying is pretty much straight forward and is divided into several steps as follows:
|
||||||
## Installing requirements
|
## Installing requirements
|
||||||
|
- Fork These Repos First:
|
||||||
|
```
|
||||||
|
1: https://github.com/Box-boi/dumper
|
||||||
|
2: https://github.com/Box-boi/dummy
|
||||||
|
```
|
||||||
|
- After Forking, Set The Appropriate Git-Secrets, By Taking A Look At .github/workflows/xyz.yml
|
||||||
|
|
||||||
- Clone this repo:
|
- Clone this repo:
|
||||||
```
|
```
|
||||||
|
|
@ -135,6 +152,14 @@ _____REMOVE_THIS_LINE_____=True
|
||||||
```
|
```
|
||||||
Fill up rest of the fields. Meaning of each field is discussed below:
|
Fill up rest of the fields. Meaning of each field is discussed below:
|
||||||
### Required Field
|
### Required Field
|
||||||
|
- `GITHUB_TOKEN`: itHub Token, Don't Leak This Token, Or Your Account Will Be Compromised!, Keep It A Secret, Get Your Token From: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token
|
||||||
|
- `GITHUB_ORG_NAME`: Your GitHub Organization Name, Where Your Dumps Will Be Stored
|
||||||
|
- `GITHUB_USER_NAME`: Your GitHub Username
|
||||||
|
- `GITHUB_DUMPER_REPO_NAME`: Leave Untouched If You Have Forked My Repos
|
||||||
|
- `GITHUB_DUMMY_REPO_NAME`: Leave Untouched If You Have Forked My Repos
|
||||||
|
- `TELEGRAM_CHANNEL_NAME`: Channel Tag Where Your Dumps Will Be Posted Example: @boxdumps
|
||||||
|
- `DUMPER_REPO_WORKFLOW_URL`: Example: https://github.com/box-automation1/dumper/actions
|
||||||
|
- `GITHUB_USER_EMAIL`: Email Of Your GitHub Account
|
||||||
- `BOT_TOKEN`: The Telegram Bot Token that you got from [@BotFather](https://t.me/BotFather)
|
- `BOT_TOKEN`: The Telegram Bot Token that you got from [@BotFather](https://t.me/BotFather)
|
||||||
- `TELEGRAM_API`: This is to authenticate your Telegram account for downloading Telegram files. You can get this from https://my.telegram.org. **NOTE**: DO NOT put this in quotes.
|
- `TELEGRAM_API`: This is to authenticate your Telegram account for downloading Telegram files. You can get this from https://my.telegram.org. **NOTE**: DO NOT put this in quotes.
|
||||||
- `TELEGRAM_HASH`: This is to authenticate your Telegram account for downloading Telegram files. You can get this from https://my.telegram.org
|
- `TELEGRAM_HASH`: This is to authenticate your Telegram account for downloading Telegram files. You can get this from https://my.telegram.org
|
||||||
|
|
@ -194,7 +219,7 @@ Three buttons are already added including Drive Link, Index Link, and View Link,
|
||||||
|
|
||||||
## Bot commands to be set in [@BotFather](https://t.me/BotFather)
|
## Bot commands to be set in [@BotFather](https://t.me/BotFather)
|
||||||
|
|
||||||
<p><a href="https://github.com/SlamDevs/slam-mirrorbot/wiki/Bot-commands-to-be-set-in-BotFather"> <img src="https://img.shields.io/badge/See%20On%20Wiki-grey?style=for-the-badge&logo=github" width="160""/></a></p>
|
<p><a href="https://telegra.ph/Commands-To-Set-In-BotFather-09-26"> <img src="https://img.shields.io/badge/See%20On%20Wiki-grey?style=for-the-badge&logo=github" width="160""/></a></p>
|
||||||
|
|
||||||
## Getting Google OAuth API credential file
|
## Getting Google OAuth API credential file
|
||||||
- Visit the [Google Cloud Console](https://console.developers.google.com/apis/credentials)
|
- Visit the [Google Cloud Console](https://console.developers.google.com/apis/credentials)
|
||||||
|
|
@ -361,5 +386,8 @@ Thanks to:
|
||||||
- [`zevtyardt`](https://github.com/zevtyardt) for some direct links
|
- [`zevtyardt`](https://github.com/zevtyardt) for some direct links
|
||||||
- [`yash-dk`](https://github.com/yash-dk) for implementation of qBittorrent on Python
|
- [`yash-dk`](https://github.com/yash-dk) for implementation of qBittorrent on Python
|
||||||
- [`xyou365`](https://github.com/xyou365) for Service Accounts script
|
- [`xyou365`](https://github.com/xyou365) for Service Accounts script
|
||||||
|
- [`techyminati`](https://github.com/techyminati) for help in dump script
|
||||||
|
|
||||||
And many more people who aren't mentioned here, but can be found in [Contributors](https://github.com/SlamDevs/slam-mirrorbot/graphs/contributors).
|
And many more people who aren't mentioned here, but can be found in [Contributors](https://github.com/SlamDevs/slam-mirrorbot/graphs/contributors).
|
||||||
|
|
||||||
|
This Repo Will Be Upstreamed Once A Month To [Slam Mirrorbot Source](https://github.com/SlamDevs/slam-mirrorbot/)
|
||||||
|
|
|
||||||
|
|
@ -152,6 +152,14 @@ try:
|
||||||
AUTO_DELETE_MESSAGE_DURATION = int(getConfig('AUTO_DELETE_MESSAGE_DURATION'))
|
AUTO_DELETE_MESSAGE_DURATION = int(getConfig('AUTO_DELETE_MESSAGE_DURATION'))
|
||||||
TELEGRAM_API = getConfig('TELEGRAM_API')
|
TELEGRAM_API = getConfig('TELEGRAM_API')
|
||||||
TELEGRAM_HASH = getConfig('TELEGRAM_HASH')
|
TELEGRAM_HASH = getConfig('TELEGRAM_HASH')
|
||||||
|
GITHUB_USER_NAME = getConfig('GITHUB_USER_NAME')
|
||||||
|
GITHUB_TOKEN = getConfig('GITHUB_TOKEN')
|
||||||
|
GITHUB_DUMPER_REPO_NAME = getConfig('GITHUB_DUMPER_REPO_NAME')
|
||||||
|
GITHUB_DUMMY_REPO_NAME = getConfig('GITHUB_DUMMY_REPO_NAME')
|
||||||
|
TELEGRAM_CHANNEL_NAME = getConfig('TELEGRAM_CHANNEL_NAME')
|
||||||
|
DUMPER_REPO_WORKFLOW_URL = getConfig('DUMPER_REPO_WORKFLOW_URL')
|
||||||
|
GITHUB_ORG_NAME = getConfig('GITHUB_ORG_NAME')
|
||||||
|
GITHUB_USER_EMAIL = getConfig('GITHUB_USER_EMAIL')
|
||||||
except KeyError as e:
|
except KeyError as e:
|
||||||
LOGGER.error("One or more env variables missing! Exiting now")
|
LOGGER.error("One or more env variables missing! Exiting now")
|
||||||
exit(1)
|
exit(1)
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ from bot.helper.telegram_helper.message_utils import *
|
||||||
from .helper.ext_utils.bot_utils import get_readable_file_size, get_readable_time
|
from .helper.ext_utils.bot_utils import get_readable_file_size, get_readable_time
|
||||||
from .helper.telegram_helper.filters import CustomFilters
|
from .helper.telegram_helper.filters import CustomFilters
|
||||||
from bot.helper.telegram_helper import button_build
|
from bot.helper.telegram_helper import button_build
|
||||||
from .modules import authorize, list, cancel_mirror, mirror_status, mirror, clone, watch, shell, eval, torrent_search, delete, speedtest, count, leech_settings
|
from .modules import authorize, list, cancel_mirror, mirror_status, mirror, dump, pdump, invite, dummy, clone, watch, shell, eval, torrent_search, delete, speedtest, count, leech_settings
|
||||||
|
|
||||||
|
|
||||||
def stats(update, context):
|
def stats(update, context):
|
||||||
|
|
@ -152,6 +152,15 @@ help_string_telegraph = f'''<br>
|
||||||
<b>/{BotCommands.StatusCommand}</b>: Shows a status of all the downloads
|
<b>/{BotCommands.StatusCommand}</b>: Shows a status of all the downloads
|
||||||
<br><br>
|
<br><br>
|
||||||
<b>/{BotCommands.StatsCommand}</b>: Show Stats of the machine the bot is hosted on
|
<b>/{BotCommands.StatsCommand}</b>: Show Stats of the machine the bot is hosted on
|
||||||
|
<br><br>
|
||||||
|
<b>/{BotCommands.DummyCommand}</b>: Generates A Dummy Tree Using A Link To A Dump Of An Android Firmware, Example /{BotCommands.DummyCommand} dump_link dump_branch(optional)
|
||||||
|
<br><br>
|
||||||
|
<b>/{BotCommands.InviteCommand}</b>: Invite Users To Private GitHub Repo, Example /{BotCommands.InviteCommand} Box-boi redmi_biloba_dump (Only Owner)
|
||||||
|
<br><br>
|
||||||
|
<b>/{BotCommands.PdumpCommand}</b>: Dump Android Firmwares To GitHub Repo(Privately), Example /{BotCommands.PdumpCommand} firmware_link (Authorized Users Only)
|
||||||
|
<br><br>
|
||||||
|
<b>/{BotCommands.DumpCommand}</b>: Dump Android Firmwares To GitHub Repo, Example /{BotCommands.DumpCommand} firmware_link (Authorized Users Only)
|
||||||
|
<br><br>
|
||||||
'''
|
'''
|
||||||
help = Telegraph(access_token=telegraph_token).create_page(
|
help = Telegraph(access_token=telegraph_token).create_page(
|
||||||
title='Slam Mirrorbot Help',
|
title='Slam Mirrorbot Help',
|
||||||
|
|
@ -162,27 +171,16 @@ help = Telegraph(access_token=telegraph_token).create_page(
|
||||||
|
|
||||||
help_string = f'''
|
help_string = f'''
|
||||||
/{BotCommands.PingCommand}: Check how long it takes to Ping the Bot
|
/{BotCommands.PingCommand}: Check how long it takes to Ping the Bot
|
||||||
|
|
||||||
/{BotCommands.AuthorizeCommand}: Authorize a chat or a user to use the bot (Can only be invoked by Owner & Sudo of the bot)
|
/{BotCommands.AuthorizeCommand}: Authorize a chat or a user to use the bot (Can only be invoked by Owner & Sudo of the bot)
|
||||||
|
|
||||||
/{BotCommands.UnAuthorizeCommand}: Unauthorize a chat or a user to use the bot (Can only be invoked by Owner & Sudo of the bot)
|
/{BotCommands.UnAuthorizeCommand}: Unauthorize a chat or a user to use the bot (Can only be invoked by Owner & Sudo of the bot)
|
||||||
|
|
||||||
/{BotCommands.AuthorizedUsersCommand}: Show authorized users (Only Owner & Sudo)
|
/{BotCommands.AuthorizedUsersCommand}: Show authorized users (Only Owner & Sudo)
|
||||||
|
|
||||||
/{BotCommands.AddSudoCommand}: Add sudo user (Only Owner)
|
/{BotCommands.AddSudoCommand}: Add sudo user (Only Owner)
|
||||||
|
|
||||||
/{BotCommands.RmSudoCommand}: Remove sudo users (Only Owner)
|
/{BotCommands.RmSudoCommand}: Remove sudo users (Only Owner)
|
||||||
|
|
||||||
/{BotCommands.RestartCommand}: Restart the bot
|
/{BotCommands.RestartCommand}: Restart the bot
|
||||||
|
|
||||||
/{BotCommands.LogCommand}: Get a log file of the bot. Handy for getting crash reports
|
/{BotCommands.LogCommand}: Get a log file of the bot. Handy for getting crash reports
|
||||||
|
|
||||||
/{BotCommands.SpeedCommand}: Check Internet Speed of the Host
|
/{BotCommands.SpeedCommand}: Check Internet Speed of the Host
|
||||||
|
|
||||||
/{BotCommands.ShellCommand}: Run commands in Shell (Only Owner)
|
/{BotCommands.ShellCommand}: Run commands in Shell (Only Owner)
|
||||||
|
|
||||||
/{BotCommands.ExecHelpCommand}: Get help for Executor module (Only Owner)
|
/{BotCommands.ExecHelpCommand}: Get help for Executor module (Only Owner)
|
||||||
|
|
||||||
/{BotCommands.TsHelpCommand}: Get help for Torrent search module
|
/{BotCommands.TsHelpCommand}: Get help for Torrent search module
|
||||||
'''
|
'''
|
||||||
|
|
||||||
|
|
@ -214,6 +212,10 @@ botcmds = [
|
||||||
(f'{BotCommands.ListCommand}','Searches files in Drive'),
|
(f'{BotCommands.ListCommand}','Searches files in Drive'),
|
||||||
(f'{BotCommands.StatusCommand}','Get Mirror Status message'),
|
(f'{BotCommands.StatusCommand}','Get Mirror Status message'),
|
||||||
(f'{BotCommands.StatsCommand}','Bot Usage Stats'),
|
(f'{BotCommands.StatsCommand}','Bot Usage Stats'),
|
||||||
|
(f'{BotCommands.DumpCommand}','Dump Android Firmware To GitHub Repo [Authorized Users only]'),
|
||||||
|
(f'{BotCommands.PdumpCommand}','Dump Android Firmware To GitHub Private Repo [Authorized Users only]'),
|
||||||
|
(f'{BotCommands.InviteCommand}','Invite Users To Private GitHub Repos [owner/sudo only]'),
|
||||||
|
(f'{BotCommands.DummyCommand}','Generates A Dummy Tree Using A Link To A Dump Of An Android Firmware [Authorized Users only]'),
|
||||||
(f'{BotCommands.PingCommand}','Ping the Bot'),
|
(f'{BotCommands.PingCommand}','Ping the Bot'),
|
||||||
(f'{BotCommands.RestartCommand}','Restart the bot [owner/sudo only]'),
|
(f'{BotCommands.RestartCommand}','Restart the bot [owner/sudo only]'),
|
||||||
(f'{BotCommands.LogCommand}','Get the Bot Log [owner/sudo only]'),
|
(f'{BotCommands.LogCommand}','Get the Bot Log [owner/sudo only]'),
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,10 @@ class _BotCommands:
|
||||||
self.QbUnzipLeechCommand = 'qbunzipleech'
|
self.QbUnzipLeechCommand = 'qbunzipleech'
|
||||||
self.QbZipLeechCommand = 'qbzipleech'
|
self.QbZipLeechCommand = 'qbzipleech'
|
||||||
self.LeechWatchCommand = 'leechwatch'
|
self.LeechWatchCommand = 'leechwatch'
|
||||||
|
self.DumpCommand = 'dump'
|
||||||
|
self.PdumpCommand = 'pdump'
|
||||||
|
self.DummyCommand = 'dummy'
|
||||||
|
self.InviteCommand = 'invite'
|
||||||
self.LeechTarWatchCommand = 'leechtarwatch'
|
self.LeechTarWatchCommand = 'leechtarwatch'
|
||||||
self.LeechZipWatchCommand = 'leechzipwatch'
|
self.LeechZipWatchCommand = 'leechzipwatch'
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,103 @@
|
||||||
|
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_DUMMY_REPO_NAME, TELEGRAM_CHANNEL_NAME, GITHUB_USER_EMAIL, 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 = """#!/bin/bash
|
||||||
|
ORIGINAL_PATH=$(pwd)
|
||||||
|
ORIGINAL_GIT_USER_EMAIL=$(git config user.email)
|
||||||
|
ORIGINAL_GIT_USER_NAME=$(git config user.name)
|
||||||
|
echo "$1" | grep -e '^\(https\?\|ftp\)://.*$' > /dev/null;
|
||||||
|
CODE=$1
|
||||||
|
set -- $CODE
|
||||||
|
GITHUB_TOKEN=$1
|
||||||
|
GITHUB_USER_NAME=$2
|
||||||
|
GITHUB_REPO_NAME=$3
|
||||||
|
GITHUB_USER_EMAIL=$4
|
||||||
|
TELEGRAM_CHANNEL_NAME=$5
|
||||||
|
CURRENT_CHAT_ID=$6
|
||||||
|
URL=$7
|
||||||
|
BRANCH=$8
|
||||||
|
URL_WITHOUT_HTTPS=$(echo "$URL" |sed 's/https\?:\/\///')
|
||||||
|
NEW_URL=https://${GITHUB_USER_NAME}:${GITHUB_TOKEN}@${URL_WITHOUT_HTTPS} #just incase its a dump from own private org
|
||||||
|
DUMP_NAME=$(echo $URL_WITHOUT_HTTPS | sed 's/.*\///')
|
||||||
|
git config --global user.email "$GITHUB_USER_EMAIL"
|
||||||
|
git config --global user.name "$GITHUB_USER_NAME"
|
||||||
|
git config --global credential.helper cache
|
||||||
|
git ls-remote "$NEW_URL" > /dev/null 2>&1
|
||||||
|
if [ "$?" -ne 0 ]; then echo "[ERROR] "$NEW_URL" is not a git repo" && exit 1; fi
|
||||||
|
git clone --depth=1 --single-branch --quiet https://${GITHUB_USER_NAME}:${GITHUB_TOKEN}@github.com/${GITHUB_USER_NAME}/${GITHUB_REPO_NAME} ~/tempdirectorysirbro
|
||||||
|
cd ~/tempdirectorysirbro
|
||||||
|
rm -rf BRANCH.txt URL.txt CURRENT_CHAT_ID.txt
|
||||||
|
echo "$CURRENT_CHAT_ID" > CURRENT_CHAT_ID.txt
|
||||||
|
echo "${URL}" > URL.txt
|
||||||
|
if [[ "${BRANCH}" == "" ]] ; then touch BRANCH.txt ; else echo "${BRANCH}" > BRANCH.txt && git add BRANCH.txt ; fi
|
||||||
|
git add URL.txt CURRENT_CHAT_ID.txt
|
||||||
|
git commit -m "Generate Dummy Tree Using $DUMP_NAME"
|
||||||
|
git push -f --quiet https://${GITHUB_USER_NAME}:${GITHUB_TOKEN}@github.com/${GITHUB_USER_NAME}/${GITHUB_REPO_NAME}
|
||||||
|
cd ${ORIGINAL_PATH}
|
||||||
|
rm -rf ${GITHUB_REPO_NAME}
|
||||||
|
git config --global user.email "$ORIGINAL_GIT_USER_EMAIL"
|
||||||
|
git config --global user.name "$ORIGINAL_GIT_USER_NAME"
|
||||||
|
"""
|
||||||
|
f.write(s)
|
||||||
|
f.close()
|
||||||
|
os.chmod(bashfile, 0o755)
|
||||||
|
bashcmd=bashfile
|
||||||
|
for arg in sys.argv[1:]:
|
||||||
|
bashcmd += ' '+arg
|
||||||
|
|
||||||
|
def dummy(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 a Direct Link to an Android Dump')
|
||||||
|
return
|
||||||
|
cmd = cmd[1]
|
||||||
|
process = subprocess.Popen(
|
||||||
|
bashcmd + ' ' + '"' + GITHUB_TOKEN + ' ' + GITHUB_USER_NAME + ' ' + GITHUB_DUMMY_REPO_NAME + ' ' + GITHUB_USER_EMAIL + ' ' + TELEGRAM_CHANNEL_NAME + ' ' + str(CHAT_ID) + ' ' + cmd + '"', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
|
||||||
|
stdout, stderr = process.communicate()
|
||||||
|
reply = ''
|
||||||
|
stderr = stderr.decode()
|
||||||
|
stdout = stdout.decode()
|
||||||
|
if stdout:
|
||||||
|
reply += f"*Generating Dummy Device-Tree, It will be availaible on \n\n{TELEGRAM_CHANNEL_NAME}*\n\n '{stdout}'\n"
|
||||||
|
LOGGER.info(f"Shell - {bashcmd} {GITHUB_TOKEN} {GITHUB_USER_NAME} {GITHUB_DUMMY_REPO_NAME} {GITHUB_USER_EMAIL} {TELEGRAM_CHANNEL_NAME} {str(CHAT_ID)} {cmd} - {stdout}")
|
||||||
|
if stderr:
|
||||||
|
reply += f"*Stderr*\n`{stderr}`\n"
|
||||||
|
LOGGER.error(f"Shell - {bashcmd} {GITHUB_TOKEN} {GITHUB_USER_NAME} {GITHUB_DUMMY_REPO_NAME} {GITHUB_USER_EMAIL} {TELEGRAM_CHANNEL_NAME} {str(CHAT_ID)} {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)
|
||||||
|
|
||||||
|
|
||||||
|
DUMMY_HANDLER = CommandHandler(['dmy', 'dummy'], dummy,
|
||||||
|
filters=CustomFilters.owner_filter | CustomFilters.authorized_user | CustomFilters.sudo_user, run_async=True)
|
||||||
|
dispatcher.add_handler(DUMMY_HANDLER)
|
||||||
|
|
@ -0,0 +1,157 @@
|
||||||
|
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_DUMPER_REPO_NAME, TELEGRAM_CHANNEL_NAME, DUMPER_REPO_WORKFLOW_URL, GITHUB_USER_EMAIL, 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 = """#!/bin/bash
|
||||||
|
DUMP_TYPE=public #Set this to either public or private #Fork This Repo and also fork this repo: https://github.com/mirrordump/dumpyara.git
|
||||||
|
##DO NOT EDIT
|
||||||
|
DUMMY_VARIABLE=1
|
||||||
|
ORIGINAL_PATH=$(pwd)
|
||||||
|
ORIGINAL_GITHUB_USER_EMAIL=$(git config user.email)
|
||||||
|
ORIGINAL_GITHUB_USER_NAME=$(git config user.name)
|
||||||
|
URL=$1
|
||||||
|
GIT_TOKEN=$2
|
||||||
|
GITHUB_USER_NAME=$3
|
||||||
|
GITHUB_REPO_NAME=$4
|
||||||
|
GITHUB_USER_EMAIL=$5
|
||||||
|
TELEGRAM_CHANNEL_NAME=$6
|
||||||
|
DUMPER_REPO_WORKFLOW_URL=$7
|
||||||
|
CHAT_ID=$8
|
||||||
|
USER_ID=$9
|
||||||
|
USER_FIRST_NAME=${10}
|
||||||
|
USER_TAG=${11}
|
||||||
|
|
||||||
|
git config --global user.email "$GITHUB_USER_EMAIL"
|
||||||
|
git config --global user.name "$GITHUB_USER_NAME"
|
||||||
|
git config --global credential.helper cache
|
||||||
|
if [[ $URL == *://*/* ]] ; then true ; else echo "Incorrect Link Format! Do Not Abuse This Feature!" && exit 1 ; fi
|
||||||
|
SIZE=$(curl -sI --head --location $URL | grep -i content-length | awk '{print $2}') && SIZE=`echo $SIZE | sed 's/\\r//g'` #removing \r due to html
|
||||||
|
HUMAN_SIZE=$(timeout 0.5s numfmt --to=iec $SIZE) && HUMAN_SIZE=$(echo $HUMAN_SIZE'B')
|
||||||
|
if [ -z $SIZE ]; then
|
||||||
|
echo "Dump Failed!
|
||||||
|
You Havent Provided A Proper link, Do Not Abuse This Feature With Your Random Requests, You Might Lose Access To This Feature If You Abuse It!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ $SIZE -lt 400000000 ]]; then
|
||||||
|
echo "Your File is Too Small $HUMAN_SIZE. It Can Also Be Possible That Your Link Failed Auto-Verification And Hence Is Unsupported, In That Case, Try Mirroring It And Then Dumping!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
rm -rf $GITHUB_REPO_NAME
|
||||||
|
git clone --quiet --depth=1 --single-branch https://$GITHUB_USER_NAME:$GIT_TOKEN@github.com/$GITHUB_USER_NAME/$GITHUB_REPO_NAME.git
|
||||||
|
CHECK=$(tail -n 1 $GITHUB_REPO_NAME/.github/workflows/dumpyara.yml)
|
||||||
|
echo ' 'ROM_URL: $URL >> CHECK.txt
|
||||||
|
VERIFY=$(tail -n 1 CHECK.txt) && rm CHECK.txt
|
||||||
|
if [ "$CHECK" == "$VERIFY" ]
|
||||||
|
then
|
||||||
|
echo "
|
||||||
|
DUMP FAILED! The Link Provided was Previously Dumped Already, Please do not Misuse this Feature!
|
||||||
|
"
|
||||||
|
exit 1
|
||||||
|
elif [ "$DUMP_TYPE" == private ]
|
||||||
|
then
|
||||||
|
cd $GITHUB_REPO_NAME/.github/workflows && sed -i '$d' dumpyara.yml
|
||||||
|
echo ' 'ROM_URL: $URL >> dumpyara.yml
|
||||||
|
cd ../.. && echo 'Dummy File To Push Dumped Firmware to Private Github Repo' > private.txt
|
||||||
|
echo "$CHAT_ID" > CHAT_ID.txt
|
||||||
|
echo "$USER_ID" > USER_ID.txt
|
||||||
|
echo "$USER_TAG" > USER_TAG.txt
|
||||||
|
echo "$USER_FIRST_NAME" > USER_FIRST_NAME.txt
|
||||||
|
git add -f .
|
||||||
|
echo $URL > CLEAN.txt && CLEAN=$(sed 's/^.*\///' CLEAN.txt) && CLEAN=$(echo "${CLEAN%.*}") && rm CLEAN.txt
|
||||||
|
git commit --quiet -m "Dump $CLEAN"
|
||||||
|
git push --quiet -f https://$GITHUB_USER_NAME:$GIT_TOKEN@github.com/$GITHUB_USER_NAME/$GITHUB_REPO_NAME
|
||||||
|
echo "$DUMPER_REPO_WORKFLOW_URL"
|
||||||
|
elif [ "$DUMP_TYPE" == public ]
|
||||||
|
then
|
||||||
|
cd $GITHUB_REPO_NAME/.github/workflows && sed -i '$d' dumpyara.yml
|
||||||
|
echo ' 'ROM_URL: $URL >> dumpyara.yml
|
||||||
|
cd ../.. && rm -rf private.txt
|
||||||
|
echo "$CHAT_ID" > CHAT_ID.txt
|
||||||
|
echo "$USER_ID" > USER_ID.txt
|
||||||
|
echo "$USER_TAG" > USER_TAG.txt
|
||||||
|
echo "$USER_FIRST_NAME" > USER_FIRST_NAME.txt
|
||||||
|
git add -f .
|
||||||
|
echo $URL > CLEAN.txt && CLEAN=$(sed 's/^.*\///' CLEAN.txt) && CLEAN=$(echo "${CLEAN%.*}") && rm CLEAN.txt
|
||||||
|
git commit --quiet -m "Dump $CLEAN"
|
||||||
|
git push --quiet -f https://$GITHUB_USER_NAME:$GIT_TOKEN@github.com/$GITHUB_USER_NAME/$GITHUB_REPO_NAME
|
||||||
|
echo "$DUMPER_REPO_WORKFLOW_URL"
|
||||||
|
else
|
||||||
|
echo "
|
||||||
|
Fill in the Variable 'DUMP_TYPE with either public or private!
|
||||||
|
"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
#CLEANUP TIME!
|
||||||
|
git config --global user.email "$ORIGINAL_GITHUB_USER_EMAIL"
|
||||||
|
git config --global user.name "$ORIGINAL_GITHUB_USER_NAME"
|
||||||
|
cd $ORIGINAL_PATH
|
||||||
|
rm -rf $GITHUB_REPO_NAME
|
||||||
|
"""
|
||||||
|
f.write(s)
|
||||||
|
f.close()
|
||||||
|
os.chmod(bashfile, 0o755)
|
||||||
|
bashcmd=bashfile
|
||||||
|
for arg in sys.argv[1:]:
|
||||||
|
bashcmd += ' '+arg
|
||||||
|
|
||||||
|
def dump(update: Update, context: CallbackContext):
|
||||||
|
message = update.effective_message
|
||||||
|
cmd = message.text.split(' ', 1)
|
||||||
|
CHAT_ID=message.chat_id
|
||||||
|
USER_ID = f"{message.from_user.id}"
|
||||||
|
FIRST_NAME = f"{message.from_user.first_name}"
|
||||||
|
if message.from_user.username:
|
||||||
|
USER_TAG = f"@{message.from_user.username}"
|
||||||
|
else:
|
||||||
|
USER_TAG = f"none"
|
||||||
|
print(CHAT_ID)
|
||||||
|
if len(cmd) == 1:
|
||||||
|
message.reply_text('Please Provide a Direct Link to an Android Firmware')
|
||||||
|
return
|
||||||
|
cmd = cmd[1]
|
||||||
|
process = subprocess.Popen(
|
||||||
|
bashcmd + ' ' + '"' + cmd + '" "' + GITHUB_TOKEN + '" "' + GITHUB_USER_NAME + '" "' + GITHUB_DUMPER_REPO_NAME + '" "' + GITHUB_USER_EMAIL + '" "' + TELEGRAM_CHANNEL_NAME + '" "' + DUMPER_REPO_WORKFLOW_URL + '" "' + str(CHAT_ID) + '" "' + USER_ID + '" "' + FIRST_NAME + '" "' + USER_TAG + '"', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
|
||||||
|
stdout, stderr = process.communicate()
|
||||||
|
reply = ''
|
||||||
|
stderr = stderr.decode()
|
||||||
|
stdout = stdout.decode()
|
||||||
|
if stdout:
|
||||||
|
reply += f"*Dumping Your Given Firmware, Please wait, Dump will be availaible on \n\n{TELEGRAM_CHANNEL_NAME}*\n\n '{stdout}'\n"
|
||||||
|
LOGGER.info(f"Shell - {bashcmd} {cmd} {GITHUB_TOKEN} {GITHUB_USER_NAME} {GITHUB_DUMPER_REPO_NAME} {GITHUB_USER_EMAIL} {TELEGRAM_CHANNEL_NAME} {DUMPER_REPO_WORKFLOW_URL} {str(CHAT_ID)} - {stdout}")
|
||||||
|
if stderr:
|
||||||
|
reply += f"*Stderr*\n`{stderr}`\n"
|
||||||
|
LOGGER.error(f"Shell - {bashcmd} {cmd} {GITHUB_TOKEN} {GITHUB_USER_NAME} {GITHUB_DUMPER_REPO_NAME} {GITHUB_USER_EMAIL} {TELEGRAM_CHANNEL_NAME} {DUMPER_REPO_WORKFLOW_URL} {str(CHAT_ID)} - {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)
|
||||||
|
|
||||||
|
|
||||||
|
DUMP_HANDLER = CommandHandler(['dmp', 'dump'], dump,
|
||||||
|
filters=CustomFilters.owner_filter | CustomFilters.authorized_user | CustomFilters.sudo_user, run_async=True)
|
||||||
|
dispatcher.add_handler(DUMP_HANDLER)
|
||||||
|
|
@ -0,0 +1,78 @@
|
||||||
|
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)
|
||||||
|
|
@ -0,0 +1,157 @@
|
||||||
|
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_DUMPER_REPO_NAME, TELEGRAM_CHANNEL_NAME, DUMPER_REPO_WORKFLOW_URL, GITHUB_USER_EMAIL, 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 = """#!/bin/bash
|
||||||
|
DUMP_TYPE=private #Set this to either public or private #Fork This Repo and also fork this repo: https://github.com/mirrordump/dumpyara.git
|
||||||
|
##DO NOT EDIT
|
||||||
|
DUMMY_VARIABLE=1
|
||||||
|
ORIGINAL_PATH=$(pwd)
|
||||||
|
ORIGINAL_GITHUB_USER_EMAIL=$(git config user.email)
|
||||||
|
ORIGINAL_GITHUB_USER_NAME=$(git config user.name)
|
||||||
|
URL=$1
|
||||||
|
GIT_TOKEN=$2
|
||||||
|
GITHUB_USER_NAME=$3
|
||||||
|
GITHUB_REPO_NAME=$4
|
||||||
|
GITHUB_USER_EMAIL=$5
|
||||||
|
TELEGRAM_CHANNEL_NAME=$6
|
||||||
|
DUMPER_REPO_WORKFLOW_URL=$7
|
||||||
|
CHAT_ID=$8
|
||||||
|
USER_ID=$9
|
||||||
|
USER_FIRST_NAME=${10}
|
||||||
|
USER_TAG=${11}
|
||||||
|
|
||||||
|
git config --global user.email "$GITHUB_USER_EMAIL"
|
||||||
|
git config --global user.name "$GITHUB_USER_NAME"
|
||||||
|
git config --global credential.helper cache
|
||||||
|
if [[ $URL == *://*/* ]] ; then true ; else echo "Incorrect Link Format! Do Not Abuse This Feature!" && exit 1 ; fi
|
||||||
|
SIZE=$(curl -sI --head --location $URL | grep -i content-length | awk '{print $2}') && SIZE=`echo $SIZE | sed 's/\\r//g'` #removing \r due to html
|
||||||
|
HUMAN_SIZE=$(timeout 0.5s numfmt --to=iec $SIZE) && HUMAN_SIZE=$(echo $HUMAN_SIZE'B')
|
||||||
|
if [ -z $SIZE ]; then
|
||||||
|
echo "Dump Failed!
|
||||||
|
You Havent Provided A Proper link, Do Not Abuse This Feature With Your Random Requests, You Might Lose Access To This Feature If You Abuse It!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
if [[ $SIZE -lt 400000000 ]]; then
|
||||||
|
echo "Your File is Too Small $HUMAN_SIZE. It Can Also Be Possible That Your Link Failed Auto-Verification And Hence Is Unsupported, In That Case, Try Mirroring It And Then Dumping!"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
rm -rf $GITHUB_REPO_NAME
|
||||||
|
git clone --quiet --depth=1 --single-branch https://$GITHUB_USER_NAME:$GIT_TOKEN@github.com/$GITHUB_USER_NAME/$GITHUB_REPO_NAME.git
|
||||||
|
CHECK=$(tail -n 1 $GITHUB_REPO_NAME/.github/workflows/dumpyara.yml)
|
||||||
|
echo ' 'ROM_URL: $URL >> CHECK.txt
|
||||||
|
VERIFY=$(tail -n 1 CHECK.txt) && rm CHECK.txt
|
||||||
|
if [ "$CHECK" == "$VERIFY" ]
|
||||||
|
then
|
||||||
|
echo "
|
||||||
|
DUMP FAILED! The Link Provided was Previously Dumped Already, Please do not Misuse this Feature!
|
||||||
|
"
|
||||||
|
exit 1
|
||||||
|
elif [ "$DUMP_TYPE" == private ]
|
||||||
|
then
|
||||||
|
cd $GITHUB_REPO_NAME/.github/workflows && sed -i '$d' dumpyara.yml
|
||||||
|
echo ' 'ROM_URL: $URL >> dumpyara.yml
|
||||||
|
cd ../.. && echo 'Dummy File To Push Dumped Firmware to Private Github Repo' > private.txt
|
||||||
|
echo "$CHAT_ID" > CHAT_ID.txt
|
||||||
|
echo "$USER_ID" > USER_ID.txt
|
||||||
|
echo "$USER_TAG" > USER_TAG.txt
|
||||||
|
echo "$USER_FIRST_NAME" > USER_FIRST_NAME.txt
|
||||||
|
git add -f .
|
||||||
|
echo $URL > CLEAN.txt && CLEAN=$(sed 's/^.*\///' CLEAN.txt) && CLEAN=$(echo "${CLEAN%.*}") && rm CLEAN.txt
|
||||||
|
git commit --quiet -m "Dump $CLEAN"
|
||||||
|
git push --quiet -f https://$GITHUB_USER_NAME:$GIT_TOKEN@github.com/$GITHUB_USER_NAME/$GITHUB_REPO_NAME
|
||||||
|
echo "$DUMPER_REPO_WORKFLOW_URL"
|
||||||
|
elif [ "$DUMP_TYPE" == public ]
|
||||||
|
then
|
||||||
|
cd $GITHUB_REPO_NAME/.github/workflows && sed -i '$d' dumpyara.yml
|
||||||
|
echo ' 'ROM_URL: $URL >> dumpyara.yml
|
||||||
|
cd ../.. && rm -rf private.txt
|
||||||
|
echo "$CHAT_ID" > CHAT_ID.txt
|
||||||
|
echo "$USER_ID" > USER_ID.txt
|
||||||
|
echo "$USER_TAG" > USER_TAG.txt
|
||||||
|
echo "$USER_FIRST_NAME" > USER_FIRST_NAME.txt
|
||||||
|
git add -f .
|
||||||
|
echo $URL > CLEAN.txt && CLEAN=$(sed 's/^.*\///' CLEAN.txt) && CLEAN=$(echo "${CLEAN%.*}") && rm CLEAN.txt
|
||||||
|
git commit --quiet -m "Dump $CLEAN"
|
||||||
|
git push --quiet -f https://$GITHUB_USER_NAME:$GIT_TOKEN@github.com/$GITHUB_USER_NAME/$GITHUB_REPO_NAME
|
||||||
|
echo "$DUMPER_REPO_WORKFLOW_URL"
|
||||||
|
else
|
||||||
|
echo "
|
||||||
|
Fill in the Variable 'DUMP_TYPE with either public or private!
|
||||||
|
"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
#CLEANUP TIME!
|
||||||
|
git config --global user.email "$ORIGINAL_GITHUB_USER_EMAIL"
|
||||||
|
git config --global user.name "$ORIGINAL_GITHUB_USER_NAME"
|
||||||
|
cd $ORIGINAL_PATH
|
||||||
|
rm -rf $GITHUB_REPO_NAME
|
||||||
|
"""
|
||||||
|
f.write(s)
|
||||||
|
f.close()
|
||||||
|
os.chmod(bashfile, 0o755)
|
||||||
|
bashcmd=bashfile
|
||||||
|
for arg in sys.argv[1:]:
|
||||||
|
bashcmd += ' '+arg
|
||||||
|
|
||||||
|
def pdump(update: Update, context: CallbackContext):
|
||||||
|
message = update.effective_message
|
||||||
|
cmd = message.text.split(' ', 1)
|
||||||
|
CHAT_ID=message.chat_id
|
||||||
|
USER_ID = f"{message.from_user.id}"
|
||||||
|
FIRST_NAME = f"{message.from_user.first_name}"
|
||||||
|
if message.from_user.username:
|
||||||
|
USER_TAG = f"@{message.from_user.username}"
|
||||||
|
else:
|
||||||
|
USER_TAG = f"none"
|
||||||
|
print(CHAT_ID)
|
||||||
|
if len(cmd) == 1:
|
||||||
|
message.reply_text('Please Provide a Direct Link to an Android Firmware')
|
||||||
|
return
|
||||||
|
cmd = cmd[1]
|
||||||
|
process = subprocess.Popen(
|
||||||
|
bashcmd + ' ' + '"' + cmd + '" "' + GITHUB_TOKEN + '" "' + GITHUB_USER_NAME + '" "' + GITHUB_DUMPER_REPO_NAME + '" "' + GITHUB_USER_EMAIL + '" "' + TELEGRAM_CHANNEL_NAME + '" "' + DUMPER_REPO_WORKFLOW_URL + '" "' + str(CHAT_ID) + '" "' + USER_ID + '" "' + FIRST_NAME + '" "' + USER_TAG + '"', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
|
||||||
|
stdout, stderr = process.communicate()
|
||||||
|
reply = ''
|
||||||
|
stderr = stderr.decode()
|
||||||
|
stdout = stdout.decode()
|
||||||
|
if stdout:
|
||||||
|
reply += f"*Dumping Your Given Firmware(Privately), Please wait, Dump will be availaible on \n\n{TELEGRAM_CHANNEL_NAME}*\n\n '{stdout}'\n"
|
||||||
|
LOGGER.info(f"Shell - {bashcmd} {cmd} {GITHUB_TOKEN} {GITHUB_USER_NAME} {GITHUB_DUMPER_REPO_NAME} {GITHUB_USER_EMAIL} {TELEGRAM_CHANNEL_NAME} {DUMPER_REPO_WORKFLOW_URL} {str(CHAT_ID)} - {stdout}")
|
||||||
|
if stderr:
|
||||||
|
reply += f"*Stderr*\n`{stderr}`\n"
|
||||||
|
LOGGER.error(f"Shell - {bashcmd} {cmd} {GITHUB_TOKEN} {GITHUB_USER_NAME} {GITHUB_DUMPER_REPO_NAME} {GITHUB_USER_EMAIL} {TELEGRAM_CHANNEL_NAME} {DUMPER_REPO_WORKFLOW_URL} {str(CHAT_ID)} - {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)
|
||||||
|
|
||||||
|
|
||||||
|
PDUMP_HANDLER = CommandHandler(['pdmp', 'pdump'], pdump,
|
||||||
|
filters=CustomFilters.owner_filter | CustomFilters.authorized_user | CustomFilters.sudo_user, run_async=True)
|
||||||
|
dispatcher.add_handler(PDUMP_HANDLER)
|
||||||
|
|
@ -4,6 +4,14 @@ _____REMOVE_THIS_LINE_____=True
|
||||||
# Please read this for filling instructions: https://github.com/SlamDevs/slam-mirrorbot#setting-up-config-file
|
# Please read this for filling instructions: https://github.com/SlamDevs/slam-mirrorbot#setting-up-config-file
|
||||||
|
|
||||||
# REQUIRED CONFIG
|
# REQUIRED CONFIG
|
||||||
|
GITHUB_TOKEN = "" #GitHub Token, Don't Leak This Token, Or Your Account Will Be Compromised!, Keep It A Secret, Get Your Token From: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token
|
||||||
|
GITHUB_ORG_NAME = "" #Your GitHub Organization Name
|
||||||
|
GITHUB_USER_NAME = "" #Your GitHub Username
|
||||||
|
GITHUB_DUMPER_REPO_NAME = "dumper" #Leave Untouched If You Have Forked My Repos
|
||||||
|
GITHUB_DUMMY_REPO_NAME = "dummy" #Leave Untouched If You Have Forked My Repos
|
||||||
|
TELEGRAM_CHANNEL_NAME = "" #Channel Tag Where Your Dumps Will Be Posted Example: @boxdumps
|
||||||
|
DUMPER_REPO_WORKFLOW_URL = "" #Example: https://github.com/box-automation1/dumper/actions
|
||||||
|
GITHUB_USER_EMAIL = "" #Email Of Your GitHub Account
|
||||||
BOT_TOKEN = ""
|
BOT_TOKEN = ""
|
||||||
GDRIVE_FOLDER_ID = ""
|
GDRIVE_FOLDER_ID = ""
|
||||||
OWNER_ID =
|
OWNER_ID =
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue