Пример #1
0
def add_user(chat_id, user_id):
    cursor.execute('SELECT antichato_list FROM chats WHERE chat_id = ?', (chat_id,))
    user_list = json.loads(cursor.fetchall()[0][0])
    if user_id not in user_list:
        user_list.append(user_id)
        cursor.execute('UPDATE chats SET antichato_list = ? WHERE chat_id = ?', (json.dumps(user_list), chat_id,))
        conn.commit()
    return True
Пример #2
0
def get_welcome(chat_id):
    cursor.execute(
        'SELECT welcome, welcome_enabled FROM chats WHERE chat_id = (?)',
        (chat_id, ))
    try:
        return cursor.fetchone()
    except IndexError:
        return None
Пример #3
0
def remove_user(chat_id, user_id):
    cursor.execute('SELECT antichato_list FROM chats WHERE chat_id = ?', (chat_id,))
    user_list = json.loads(cursor.fetchall()[0][0])
    for num, user in enumerate(user_list):
        if user == user_id:
            del user_list[num]
    cursor.execute('UPDATE chats SET antichato_list = ? WHERE chat_id = ?', (json.dumps(user_list), chat_id,))
    conn.commit()
Пример #4
0
async def is_admin(chat_id, user_id, reply_id=None):
    if int(chat_id) < 0:  # Groups and supergoups IDs.
        dic = {}
        cursor.execute('SELECT cached_admins FROM chats WHERE chat_id = ?',
                       (int(chat_id), ))
        adms = cursor.fetchone()[0]
        if adms:
            cached_admins = json.loads(adms)
        else:
            cached_admins = {'expires': 0}

        if cached_admins['expires'] > time.time():
            adm_id = cached_admins['admins_list']
        else:
            adms = await bot.getChatAdministrators(chat_id)
            adm_id = []
            for ids in adms:
                adm_id.append(ids['user']['id'])
            cursor.execute(
                'UPDATE chats SET cached_admins = ? WHERE chat_id = ?',
                (json.dumps(
                    dict(admins_list=adm_id,
                         expires=int(time.time()) + 1200)), chat_id))
            conn.commit()

        if user_id in adm_id or user_id in sudoers:
            dic['user'] = True
        else:
            dic['user'] = False

        if reply_id in adm_id:
            dic['reply'] = True
        else:
            dic['reply'] = False

        if bot_id in adm_id:
            dic['bot'] = True
        else:
            dic['bot'] = False

    else:  # User IDs.
        dic = dict(user=False, reply=False, bot=False)

    return dic
Пример #5
0
    def __init__(self, chat_id):
        # Supergoup and group IDs are negative.
        if chat_id < 0:
            cursor.execute('SELECT chat_lang FROM chats WHERE chat_id = ?',
                           (chat_id, ))
            try:
                self.language = cursor.fetchone()[0]
            except (IndexError, TypeError):
                self.language = 'en'
        else:
            cursor.execute('SELECT chat_lang FROM users WHERE user_id = ?',
                           (chat_id, ))
            try:
                self.language = cursor.fetchone()[0]
            except (IndexError, TypeError):
                self.language = 'en'
        if self.language not in langs:
            self.language = 'en'

        self.strings = strings[self.language]
Пример #6
0
async def antiflood(msg):
    if msg.get('chat') and msg['chat']['type'].endswith('group') and msg.get(
            'from'):
        adm = await is_admin(msg['chat']['id'], msg['from']['id'])
        if not adm['user'] and adm['bot']:
            # Delete old rows.
            cursor.execute(
                'DELETE FROM antiflood WHERE chat_id = ? AND unix_time < ?',
                (msg['chat']['id'], int(time.time()) - 5))
            conn.commit()

            # Insert antiflood row.
            cursor.execute(
                'INSERT INTO antiflood (chat_id, user_id, unix_time) VALUES (?,?,?)',
                (msg['chat']['id'], msg['from']['id'], int(time.time())))
            conn.commit()

            # Get total rows count.
            cursor.execute(
                'SELECT COUNT(*) FROM antiflood WHERE chat_id = ? AND user_id = ?',
                (msg['chat']['id'], msg['from']['id']))
            msgs = cursor.fetchone()[0]

            if msgs == 5:
                await bot.sendMessage(msg['chat']['id'], 'Flood!')
                return True
Пример #7
0
def add_warns(chat_id, user_id, number):
    cursor.execute('SELECT * FROM user_warns WHERE chat_id = ? AND user_id = ?', (chat_id, user_id))
    if cursor.fetchall():
        cursor.execute('UPDATE user_warns SET count = count + ? WHERE chat_id = ? AND user_id = ?', (number, chat_id, user_id))
        conn.commit()
    else:
        cursor.execute('INSERT INTO user_warns (user_id, chat_id, count) VALUES (?,?,?)', (user_id, chat_id, number))
        conn.commit()
    return True
Пример #8
0
def get_antipedro(chat_id):
    cursor.execute(
        'SELECT antipedro_enabled, antipedro_list FROM chats WHERE chat_id = ?',
        (chat_id, ))
    return cursor.fetchone()
Пример #9
0
async def start(msg):
    if msg.get('text'):
        strs = Strings(msg['chat']['id'])

        if msg['text'] == '/start' or msg['text'] == '!start' or msg[
                'text'].split()[0] == '/start@' + bot_username or msg[
                    'text'] == '/start start':

            if msg['chat']['type'] == 'private':
                kb = InlineKeyboardMarkup(inline_keyboard=[
                    [
                        dict(text=strs.get('commands_button'),
                             callback_data='all_cmds')
                    ] + [
                        dict(text=strs.get('infos_button'),
                             callback_data='infos')
                    ],
                    [
                        dict(text=strs.get('lang_button'),
                             callback_data='change_lang')
                    ] + [
                        dict(text=strs.get('add_button'),
                             url='https://t.me/{}?startgroup=new'.format(
                                 bot_username))
                    ]
                ])
                smsg = strs.get('pm_start_msg')
            else:
                kb = InlineKeyboardMarkup(inline_keyboard=[[
                    dict(text=strs.get('start_pm_button'),
                         url='https://t.me/{}?start=start'.format(
                             bot_username))
                ]])
                smsg = strs.get('start_msg')

            await bot.sendMessage(msg['chat']['id'],
                                  smsg,
                                  reply_to_message_id=msg['message_id'],
                                  reply_markup=kb)
            return True

    elif msg.get('data') and msg.get('message'):
        strs = Strings(msg['message']['chat']['id'])

        cmds_back = InlineKeyboardMarkup(inline_keyboard=[[
            dict(text=strs.get('back_button'), callback_data='all_cmds')
        ]])

        start_back = InlineKeyboardMarkup(inline_keyboard=[[
            dict(text=strs.get('back_button'), callback_data='start_back')
        ]])

        if msg['data'] == 'tools_cmds':
            await bot.editMessageText(
                (msg['message']['chat']['id'], msg['message']['message_id']),
                text='''*Ferramentas:*

/clima - Exibe informações de clima.
/coub - Pesquisa de pequenas animações.
/echo - Repete o texto informado.
/gif - Pesquisa de GIFs.
/git - Envia informações de um user do GitHub.
/html - Repete o texto informado usando HTML.
/ip - Exibe informações sobre um IP/domínio.
/jsondump - Envia o json da mensagem.
/mark - Repete o texto informado usando Markdown.
/print - Envia uma print de um site.
/pypi - Pesquisa de módulos no PyPI.
/r - Pesquisa de tópicos no Reddit
/request - Faz uma requisição a um site.
/shorten - Encurta uma URL.
/token - Exibe informações de um token de bot.
/tr - Traduz um texto.
/yt - Pesquisa vídeos no YouTube.
/ytdl - Baixa o áudio de um vídeo no YouTube.''',
                parse_mode='Markdown',
                reply_markup=cmds_back)
            return True

        elif msg['data'] == 'admin_cmds':
            await bot.editMessageText(
                (msg['message']['chat']['id'], msg['message']['message_id']),
                '''*Comandos administrativos:*

/ban - Bane um usuário.
/config - Envia um menu de configurações.
/defregras - Define as regras do grupo.
/kick - Kicka um usuário.
/mute - Restringe um usuário.
/pin - Fixa uma mensagem no grupo.
/title - Define o título do grupo.
/unban - Desbane um usuário.
/unmute - Desrestringe um usuário.
/unpin - Desfixa a mensagem fixada no grupo.
/unwarn - Remove as advertências do usuário.
/warn - Adverte um usuário.
/welcome - Define a mensagem de welcome.''',
                parse_mode='Markdown',
                reply_markup=cmds_back)
            return True

        elif msg['data'] == 'user_cmds':
            await bot.editMessageText(
                (msg['message']['chat']['id'], msg['message']['message_id']),
                '''*Comandos para usuários normais:*

/admins - Mostra a lista de admins do chat.
/dados - Envia um número aleatório de 1 a 6.
/bug - Reporta um bug ao meu desenvolvedor.
/id - Exibe suas informações ou de um usuário.
/ping - Responde com uma mensagem de ping.
/regras - Exibe as regras do grupo.
/roleta - Para jogar a Roleta Russa.''',
                parse_mode='Markdown',
                reply_markup=cmds_back)
            return True

        elif msg['data'] == 'start_back':
            kb = InlineKeyboardMarkup(inline_keyboard=[[
                dict(text=strs.get('commands_button'),
                     callback_data='all_cmds')
            ] + [
                dict(text=strs.get('infos_button'), callback_data='infos')
            ], [
                dict(text=strs.get('lang_button'), callback_data='change_lang')
            ] + [
                dict(text=strs.get('add_button'),
                     url='https://t.me/{}?startgroup=new'.format(bot_username))
            ]])
            await bot.editMessageText(
                (msg['message']['chat']['id'], msg['message']['message_id']),
                strs.get('pm_start_msg'),
                reply_markup=kb)
            return True

        elif msg['data'] == 'change_lang':
            langs_kb = InlineKeyboardMarkup(inline_keyboard=[[
                dict(text='{lang_flag} {lang_name}'.format(**strings[x]),
                     callback_data='set_lang ' + x)
            ] for x in strings] + [[
                dict(text=strs.get('back_button'), callback_data='start_back')
            ]])
            await bot.editMessageText(
                (msg['message']['chat']['id'], msg['message']['message_id']),
                "Select your prefered lang below:",
                reply_markup=langs_kb)
            return True

        elif msg['data'].split()[0] == 'set_lang':
            cursor.execute(
                'UPDATE users SET chat_lang = ? WHERE user_id = ?',
                (msg['data'].split()[1], msg['message']['chat']['id']))
            usr_lang = Strings(msg['message']['chat']['id'])
            start_back = InlineKeyboardMarkup(inline_keyboard=[[
                dict(text=usr_lang.get('back_button'),
                     callback_data='start_back')
            ]])
            await bot.editMessageText(
                (msg['message']['chat']['id'], msg['message']['message_id']),
                usr_lang.get('lang_changed'),
                reply_markup=start_back)
            return True

        elif msg['data'] == 'all_cmds':
            await bot.editMessageText(
                (msg['message']['chat']['id'], msg['message']['message_id']),
                'Selecione uma categoria de comando para visualizar.\n\nCaso precise de ajuda com o bot ou tem alguma sugestão entre no @AmanoChat',
                reply_markup=keyboard.all_cmds)
            return True

        elif msg['data'] == 'infos':
            await bot.editMessageText(
                (msg['message']['chat']['id'], msg['message']['message_id']),
                '''• EduuRobot

Version: {version}
Source Code: <a href="{sourcelink}">Here</a>
Developers: <a href="https://github.com/AmanoTeam">Amano Team</>
Owner: <a href="tg://user?id=123892996">Edu :3</>

Partnerships:
 » <a href="https://t.me/hpxlist">HPXList - by usernein</>

©2019 - <a href="https://amanoteam.ml">AmanoTeam™</>'''.format(
                    version=version, sourcelink=git_repo[0]),
                parse_mode='html',
                reply_markup=start_back,
                disable_web_page_preview=True)
            return True
Пример #10
0
def get_warns(chat_id, user_id):
    cursor.execute('SELECT count FROM user_warns WHERE chat_id = ? AND user_id = ?', (chat_id, user_id))
    return cursor.fetchall()[0][0]
Пример #11
0
def reset_warns(chat_id, user_id):
    cursor.execute('DELETE FROM user_warns WHERE chat_id = ? AND user_id = ?', (chat_id, user_id))
    conn.commit()
    return True
Пример #12
0
def get_warns_limit(chat_id):
    cursor.execute('SELECT warns_limit FROM chats WHERE chat_id = ?', (chat_id,))
    return cursor.fetchall()[0][0]
Пример #13
0
# copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
# COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
# IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
# CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

import time

from db_handler import conn, cursor
from .admins import is_admin
from config import bot

cursor.execute(
    'CREATE TABLE IF NOT EXISTS antiflood (chat_id, user_id, unix_time)')


async def antiflood(msg):
    if msg.get('chat') and msg['chat']['type'].endswith('group') and msg.get(
            'from'):
        adm = await is_admin(msg['chat']['id'], msg['from']['id'])
        if not adm['user'] and adm['bot']:
            # Delete old rows.
            cursor.execute(
                'DELETE FROM antiflood WHERE chat_id = ? AND unix_time < ?',
                (msg['chat']['id'], int(time.time()) - 5))
            conn.commit()

            # Insert antiflood row.
            cursor.execute(
Пример #14
0
def set_antipedro(chat_id, toggle):
    cursor.execute('UPDATE chats SET antipedro_enabled = ? WHERE chat_id = ?',
                   (bool(toggle), chat_id))
    conn.commit()
    return True
Пример #15
0
def set_welcome(chat_id, welcome):
    cursor.execute('UPDATE chats SET welcome = ? WHERE chat_id = ?',
                   (welcome, chat_id))
    conn.commit()
Пример #16
0
def get_antichato(chat_id):
    cursor.execute('SELECT antichato_enabled, antichato_list FROM chats WHERE chat_id = ?', (chat_id,))
    return cursor.fetchall()[0]
Пример #17
0
import re
import random
import amanobot
import aiohttp
from amanobot.exception import TelegramError
import time
from config import bot, sudoers, logs, bot_username
from utils import send_to_dogbin, send_to_hastebin


from db_handler import cursor, conn
from .admins import is_admin


cursor.execute('''CREATE TABLE IF NOT EXISTS user_warns (
                                                         user_id INTEGER,
                                                         chat_id INTEGER,
                                                         count INTEGER)''')


def get_warns(chat_id, user_id):
    cursor.execute('SELECT count FROM user_warns WHERE chat_id = ? AND user_id = ?', (chat_id, user_id))
    return cursor.fetchone()[0]


def get_warns_limit(chat_id):
    cursor.execute('SELECT warns_limit FROM chats WHERE chat_id = ?', (chat_id,))
    return cursor.fetchone()[0]


def add_warns(chat_id, user_id, number):
    cursor.execute('SELECT * FROM user_warns WHERE chat_id = ? AND user_id = ?', (chat_id, user_id))
Пример #18
0
def get_rules(chat_id):
    cursor.execute('SELECT rules FROM chats WHERE chat_id = (?)', (chat_id, ))
    try:
        return cursor.fetchall()[0]
    except IndexError:
        return None
Пример #19
0
def set_rules(chat_id, rules):
    cursor.execute('UPDATE chats SET rules = ? WHERE chat_id = ?',
                   (rules, chat_id))
    conn.commit()
Пример #20
0
def disable_welcome(chat_id):
    cursor.execute('UPDATE chats SET welcome_enabled = ? WHERE chat_id = ?',
                   (False, chat_id))
    conn.commit()
Пример #21
0
async def start(msg):
    if msg.get('text'):
        strs = Strings(msg['chat']['id'])

        if msg['text'] == '/start' or msg['text'] == '!start' or msg[
                'text'].split(
                )[0] == '@gorpo_bot' + bot_username or msg['text'] == 'start':

            if msg['chat']['type'] == 'private':
                kb = InlineKeyboardMarkup(inline_keyboard=[
                    [
                        dict(text=strs.get('commands_button'),
                             callback_data='all_cmds')
                    ] + [
                        dict(text=strs.get('infos_button'),
                             callback_data='infos')
                    ],
                    [
                        dict(text=strs.get('lang_button'),
                             callback_data='change_lang')
                    ] + [
                        dict(text=strs.get('add_button'),
                             url='https://t.me/{}?startgroup=new'.format(
                                 bot_username))
                    ]
                ])
                smsg = strs.get('pm_start_msg')
            else:
                kb = InlineKeyboardMarkup(inline_keyboard=[[
                    dict(text=strs.get('start_pm_button'),
                         url='https://t.me/{}?start=start'.format(
                             bot_username))
                ]])
                smsg = strs.get('start_msg')

            await bot.sendMessage(msg['chat']['id'],
                                  smsg,
                                  reply_to_message_id=msg['message_id'],
                                  reply_markup=kb)
            return True

    elif msg.get('data') and msg.get('message'):
        strs = Strings(msg['message']['chat']['id'])

        cmds_back = InlineKeyboardMarkup(inline_keyboard=[[
            dict(text=strs.get('back_button'), callback_data='all_cmds')
        ]])

        start_back = InlineKeyboardMarkup(inline_keyboard=[[
            dict(text=strs.get('back_button'), callback_data='start_back')
        ]])

        if msg['data'] == 'tools_cmds':
            await bot.editMessageText(
                (msg['message']['chat']['id'], msg['message']['message_id']),
                text='''*Ferramentas:*

/clima - Exibe informações de clima.
/coub - Pesquisa de pequenas animações.
/echo - Repete o texto informado.
/gif - Pesquisa de GIFs.
/git - Envia informações de um user do GitHub.
/html - Repete o texto informado usando HTML.
/ip - Exibe informações sobre um IP/domínio.
/jsondump - Envia o json da mensagem.
/mark - Repete o texto informado usando Markdown.
/print - Envia uma print de um site.
/pypi - Pesquisa de módulos no PyPI.
/r - Pesquisa de tópicos no Reddit
/request - Faz uma requisição a um site.
/shorten - Encurta uma URL.
/token - Exibe informações de um token de bot.
/tr - Traduz um texto.
/yt - Pesquisa vídeos no YouTube.
/ytdl - Baixa o áudio de um vídeo no YouTube.''',
                parse_mode='Markdown',
                reply_markup=cmds_back)
            return True

        elif msg['data'] == 'admin_cmds':
            await bot.editMessageText(
                (msg['message']['chat']['id'], msg['message']['message_id']),
                '''*Comandos administrativos:*
[+]TODOS COMANDOS LISTADOS ATE ULTIMA ATUALIZACAO[+]
/comandos@gorpo_bot
/start - inicia o bot
/ban- bane usuario
/unban - desbane usuario
/kick -kicka usuario
/mute - muta usuario
/unmute - desmuta usuario
/pin - fixa posts
/unpin - desfixa os posts
/title - muda o titulo do grupo
/defregras - define regras
/regras - ve as regras
/config - informa??es ser?o enviadas no privado
/admdebug -  debug do admin
/tr - Traduz um texto.
/yt - Pesquisa v?deos no YouTube.
/ytdl - Baixa o ?udio de um v?deo no YouTube.
/r - pesquisa um termo no redit
/clima - Exibe informa??es de clima
/coub - Pesquisa de pequenas anima??es
/dados - jogo de dados
/gif - gif do giphy
/git - usuario do github
/id - id do usuario
/ip - informa dados de um ip
/jsondump - retorna dados formatados
/stickerid - pega id de um sticker
/getsticker - baixa um sticker
/criar_sticker - cria um pacote de stickers
/kibar  - copia um sticker para o pacote de stickers
/pypi - pesquisa libs python
/rextester - interpretador de varias linguagens de programa??o
/mark - Repete o texto informado usando Markdown
/html - Repete o texto informado usando HTML
/request - Faz uma requisi??o a um site
fala - Repete o texto que voce pedir para ele falar
site - exibe o site da equipe
facebook - exibe o facebook da equipe, cadastre-se
netflix - exibe nosso site de netflix gratis
iptv - exibe nosso site de iptv gratis
anime - exibe nosso site de anime gratis
pkg - exibe nosso site de pkg's para ps3 gratis
biblioteca - exibe nossa biblioteca hacker
curso - exibe nosso site de  cursos
doadores - exibe instru??es completas para doadores
painel - exibe nosso painel hacker

[*]COMANDOS EXCLUSIVOS DA ADM[*]
/ban - Bane um usuário.
/config - Envia um menu de configurações.
/defregras - Define as regras do grupo.
/kick - Kicka um usuário.
/mute - Restringe um usuário.
/pin - Fixa uma mensagem no grupo.
/title - Define o título do grupo.
/unban - Desbane um usuário.
/unmute - Desrestringe um usuário.
/unpin - Desfixa a mensagem fixada no grupo.
/unwarn - Remove as advertências do usuário.
/warn - Adverte um usuário.
/welcome - Define a mensagem de welcome.''',
                parse_mode='Markdown',
                reply_markup=cmds_back)
            return True

        elif msg['data'] == 'user_cmds':
            await bot.editMessageText(
                (msg['message']['chat']['id'], msg['message']['message_id']),
                '''*Comandos para usuários normais:*

/admins - Mostra a lista de admins do chat.
/dados - Envia um número aleatório de 1 a 6.
/bug - Reporta um bug ao meu desenvolvedor.
/id - Exibe suas informações ou de um usuário.
/ping - Responde com uma mensagem de ping.
/regras - Exibe as regras do grupo.
/roleta - Para jogar a Roleta Russa.''',
                parse_mode='Markdown',
                reply_markup=cmds_back)
            return True

        elif msg['data'] == 'start_back':
            kb = InlineKeyboardMarkup(inline_keyboard=[[
                dict(text=strs.get('commands_button'),
                     callback_data='all_cmds')
            ] + [
                dict(text=strs.get('infos_button'), callback_data='infos')
            ], [
                dict(text=strs.get('lang_button'), callback_data='change_lang')
            ] + [
                dict(text=strs.get('add_button'),
                     url='https://t.me/{}?startgroup=new'.format(bot_username))
            ]])
            await bot.editMessageText(
                (msg['message']['chat']['id'], msg['message']['message_id']),
                strs.get('pm_start_msg'),
                reply_markup=kb)
            return True

        elif msg['data'] == 'change_lang':
            langs_kb = InlineKeyboardMarkup(inline_keyboard=[[
                dict(text='{lang_flag} {lang_name}'.format(**strings[x]),
                     callback_data='set_lang ' + x)
            ] for x in strings] + [[
                dict(text=strs.get('back_button'), callback_data='start_back')
            ]])
            await bot.editMessageText(
                (msg['message']['chat']['id'], msg['message']['message_id']),
                "Select your prefered lang below:",
                reply_markup=langs_kb)
            return True

        elif msg['data'].split()[0] == 'set_lang':
            cursor.execute(
                'UPDATE users SET chat_lang = ? WHERE user_id = ?',
                (msg['data'].split()[1], msg['message']['chat']['id']))
            usr_lang = Strings(msg['message']['chat']['id'])
            start_back = InlineKeyboardMarkup(inline_keyboard=[[
                dict(text=usr_lang.get('back_button'),
                     callback_data='start_back')
            ]])
            await bot.editMessageText(
                (msg['message']['chat']['id'], msg['message']['message_id']),
                usr_lang.get('lang_changed'),
                reply_markup=start_back)
            return True

        elif msg['data'] == 'all_cmds':
            await bot.editMessageText(
                (msg['message']['chat']['id'], msg['message']['message_id']),
                'Selecione uma categoria de comando para visualizar.\n\nCaso precise de ajuda com o bot ou tem alguma sugestão entre no @AmanoChat',
                reply_markup=keyboard.all_cmds)
            return True

        elif msg['data'] == 'infos':
            await bot.editMessageText(
                (msg['message']['chat']['id'], msg['message']['message_id']),
                '''• Manicomio Bot

Version: {version}
Nosso site: <a href="https://tcxsproject.com">Manicomio TCXS Project</a>
Developers: <a href="https://github.com/gorpo">GorpoOrko</>


Partnerships:
 » <a href="https://t.me/tcxsproject2">telegram</>

©2020 - <a href="https://t.me/tcxsproject2">TCXS Project™</>'''.format(
                    version=version, sourcelink=git_repo[0]),
                parse_mode='html',
                reply_markup=start_back,
                disable_web_page_preview=True)
            return True