async def register_user(message: types.Message): chat_id = message.from_user.id referral = message.get_args() id = await db.add_new_user(referral=referral) count_users = await db.count_users() keyboard = ListOfButtons( text=["Стать предпринимателем 💼", "Пригласить члена партии 🗣", "Все о партии 🌍", "Общение ☎️", "Социальная иерархия СССР 🇲🇪"], align=[2, 2, 1] ).reply_keyboard text = "Добро пожаловать, коммунист!" if not id: id = await db.get_id() else: text += "Записал в базу! " bot_username = (await bot.me).username bot_link = f"https://t.me/{bot_username}?start={id}" balance = await db.check_balance() text += f""" <b>Мы видим, что ты заблудился и находишься в поисках нужного пути для дальнейшего движения по просторам интернета.</b> Тебе однозначно повезло! Если ты читаешь данное послание, то уже мысленно вступил в партию Коммуналка СССР. Последний шаг за тобой. Действуй. Чего же ты ждёшь? <b>Мы рады тебя приветствовать в нашей партии.</b> """ await bot.send_message(chat_id, text, reply_markup=keyboard)
async def command_bug(message: types.Message): """ Handle bug report from user """ bug_message = message.get_args() try: bug_message = BugValidator().validate_bug_message(bug_message) except ValidationError as error: await message.answer(get_formatted_error_message(error)) else: user_id = message.from_user.id bug = Bug(message=bug_message, user_id=user_id) async with async_db_sessionmaker() as session: await db.add_bug(session, bug) logger.info(f'Added new bug from @{message.from_user.username}') text = md.text( '✅ The bug report has been accepted!', md.hbold('Thank you! You care not only for bot 🤖 but also for your convenience!'), sep='\n' ) keyboard = LinksAndRubricsMainReplyKeyboard(one_time_keyboard=True) await message.answer_sticker(STICKER_KISSING_FROG) await message.answer(text, reply_markup=keyboard)
async def welcome_security_handler_pm(message: Message, strings, regexp=None, state=None, **kwargs): args = message.get_args().split('_') chat_id = int(args[1]) async with state.proxy() as data: data['chat_id'] = chat_id data['msg_id'] = int(args[3]) data['to_delete'] = bool(int(args[4])) if len(args) > 4 else True db_item = await get_greetings_data(chat_id) level = db_item['welcome_security']['level'] if level == 'button': await WelcomeSecurityState.button.set() await send_button(message, state) elif level == 'math': await WelcomeSecurityState.math.set() await send_btn_math(message, state) elif level == 'captcha': await WelcomeSecurityState.captcha.set() await send_captcha(message, state)
async def btnl(message: types.Message): chat_id = message.from_user.id referral = message.get_args() id = await db.add_new_user(referral=referral) text = "Всем доброго дня!" if not id: id = await db.get_id() else: text += "Записал в базу! " bot_username = (await bot.me).username bot_link = f"https://t.me/{bot_username}?start={id}" text = "" text += f"""Пригласить члена партии 🗣 <b>Мы ценим ваши старания. Мы работаем над Собой и стараемся сделать Вас более независимым.</b> Увеличить материальные блага можно очень просто: за каждого приглашённого Вами нового члена партии будет выставлено вознаграждение, ввиде 5% от его первого пополнения. <b>Партийные выплаты осуществляются строго во вторник каждые две недели с 16:00-21:00.</b> Ваша партийная ссылка: {bot_link} При любых трудностях обращайтесь к главе партии: @GeneralStalinBot <b>Проверить колличество рефералов можно по команде:</b> /communal """"" await bot.send_message(chat_id, text)
async def pair(session, membership_storage, message: types.Message): try: membership = await _parse_pair_args(session, message.get_args()) await membership_storage.create_membership(membership) except (ValueError, ClientError) as e: return await message.answer(f"{str(e)}. Please see /help") await message.answer("Okay, paired")
async def welcome_security_handler_pm(message: Message, strings, regexp=None, state=None, **kwargs): args = message.get_args().split("_") chat_id = int(args[1]) async with state.proxy() as data: data["chat_id"] = chat_id data["msg_id"] = int(args[3]) data["to_delete"] = bool(int(args[4])) if len(args) > 4 else True db_item = await get_greetings_data(chat_id) level = db_item["welcome_security"]["level"] if level == "button": await WelcomeSecurityState.button.set() await send_button(message, state) elif level == "math": await WelcomeSecurityState.math.set() await send_btn_math(message, state) elif level == "captcha": await WelcomeSecurityState.captcha.set() await send_captcha(message, state)
async def fix_url_server(message: types.Message): """ Убираем статус тревоги """ if db.access_check_admin(str(message.from_user.id)): arguments = message.get_args() if str(arguments) == '': await message.reply('Введите url или server\n/fix vk.com [email protected]') else: arguments = arguments.split() await message.reply('Выключаем статусы тревоги...') await asyncio.sleep(1) for argument in arguments: if '@' in argument: host = argument.split('@')[1] if db.check_if_exist_server(host): db.set_alarm_false_server(host) await message.reply('Сервер {} - починен'.format(argument)) else: await message.reply('Сервера {} нет в базе данных'.format(argument)) else: if db.check_if_exist_url(argument): db.set_alarm_false_url(argument) await message.reply('URL {} - починен'.format(argument), disable_web_page_preview=True) else: await message.reply('URL {} нет в базе данных'.format(argument), disable_web_page_preview=True) else: await message.reply('У вас не достаточно прав')
async def log_level(message: types.Message): logging.getLogger().setLevel({ 'DEBUG': logging.DEBUG, 'INFO': logging.INFO, 'WARNING': logging.WARNING, 'ERROR': logging.ERROR }.get(message.get_args().upper(), logging.INFO))
async def cmd_reqaddword(message: types.Message) -> None: if message.forward_from: return words_to_add = [ w for w in set(message.get_args().lower().split()) if all(c in ascii_lowercase for c in w) ] if not words_to_add: await message.reply( "Function: Request addition of new words. Check @on9wcwa for new words.\n" "Please check the spelling of words before requesting so I can process your requests faster.\n" "Proper nouns are not accepted.\n" "Usage: `/reqaddword wordone wordtwo ...`") return existing = [] rejected = [] rejected_with_reason = [] for w in words_to_add[:]: # Iterate through a copy so removal of elements is possible if check_word_existence(w): existing.append("_" + w.capitalize() + "_") words_to_add.remove(w) async with pool.acquire() as conn: rej = await conn.fetch( "SELECT word, reason FROM wordlist WHERE NOT accepted;") for word, reason in rej: if word not in words_to_add: continue words_to_add.remove(word) word = "_" + word.capitalize() + "_" if reason: rejected_with_reason.append((word, reason)) else: rejected.append(word) text = "" if words_to_add: text += f"Submitted {', '.join(['_' + w.capitalize() + '_' for w in words_to_add])} for approval.\n" await send_admin_group( message.from_user.get_mention( name=message.from_user.full_name + (" \u2b50\ufe0f" if await has_star(message.from_user.id) else ""), as_html=True, ) + " is requesting the addition of " + ", ".join(["<i>" + w.capitalize() + "</i>" for w in words_to_add]) + " to the word list. #reqaddword", parse_mode=types.ParseMode.HTML, ) if existing: text += f"{', '.join(existing)} {'is' if len(existing) == 1 else 'are'} already in the word list.\n" if rejected: text += f"{', '.join(rejected)} {'was' if len(rejected) == 1 else 'were'} rejected.\n" for word, reason in rejected_with_reason: text += f"{word} was rejected due to {reason}.\n" await message.reply(text.rstrip())
async def add_Admin(message: types.Message): if message.from_user.id not in admin0: await message.reply("Погоди, но ты же сам не из админов -_-") else: try: await notifyAdmin0(message.get_args()) except Exception as e: await message.reply("Произошла ошибка(")
async def remove_city(message: types.Message): name = message.get_args() if name and db.city_exists(name): db.remove_city(name) await message.answer(f'City {name} has been removed..') logger.info(f'City {name} has been removed..') else: await message.answer(f'City {name} does not exist')
async def remove_user(message: types.Message): user_id = message.get_args() if user_id and db.user_exists(user_id): db.remove_user(user_id) await message.answer(f'User {user_id} has been removed..') logger.info(f'User {user_id} has been removed..') else: await message.answer(f'User {user_id} does not exist')
async def receipt_(message: Message, *, session): args = message.get_args().split() if len(args) > 0: if not (receipt_id := await receipt.search_receipt( args[0], session=session, )): return
def create_user(cls, msg: types.Message): if msg.from_user.id in clan_leader_list: cls.create_clan_leader(msg) elif msg.get_args(): invited_id, clan_id = SecureLink.decode_link(msg.text) cls.create_ref_user(msg, invited_id, clan_id) else: cls.create_raw_user(msg)
async def make_adduser_answer(message: types.Message, **kwargs): new_user = message.get_args().strip().strip("@") is_new = False if new_user: is_new = await handler.add_user(new_user) is_new = "yes" if is_new else "no" await message.answer(f"New user '{new_user}' (is new: {is_new})")
async def cmd_killgame(message: types.Message) -> None: group_id = int(message.get_args() or message.chat.id) if group_id in GAMES: GAMES[group_id].state = GameState.KILLGAME await asyncio.sleep(2) if group_id in GAMES: del GAMES[group_id] await message.reply("Game ended forcibly.")
async def cmd_start(message: types.Message, state: FSMContext): if db.is_banned(message.from_user.id): return user_exists = db.user_exists(message.from_user.id) if user_exists and permitted(message.from_user.id): await message.answer(hbold('Приветствую❗Рад, что Вы вернулись!🤗'), parse_mode=ParseMode.HTML, reply_markup=home_keyboard()) return if not user_exists and message.get_args(): user_id = message.get_args() if db.user_exists(user_id): await state.update_data(inviter=user_id) await Profile.majority.set() await message.answer('Вам есть 18 лет?', reply_markup=confirm_age_majority_kb())
async def result_rust(message: types.Message): try: array: List[int] = list(map(int, message.get_args().split(" "))) except ValueError: await message.answer("send integer") return answer = librust_lib.rust_out(array) await message.answer(answer)
async def match_command(message: types.Message): try: member_name, member_id = await handle_nickname(message) except NoNickname: return params = message.get_args().split() connection = get_db() await message.reply(matches_message(connection, member_id))
async def getFile(message: types.Message): if message["from"]["id"] in admins: fileName = message.get_args() try: with open(fileName, 'rb') as f: await message.answer_document(f) except: await message.answer(fileName + " is not file! Or error!")
async def process_exc_command(message: types.Message, state: FSMContext): ms = '' #init ms for message if message.text == '/exchange': await message.reply('Input command with parameters, ex: \n/exchange 10 USD to CAD') else: arguments = message.get_args() args = arguments.split(' ') val = args[0] cur1 = cur2 = '' if val.find('$') > -1: val = val[1:] cur1 = 'USD' cur2 = args[2].upper() else: cur1 = args[1].upper() cur2 = args[3].upper() curr = CurList.split(',') v = 1.0 if cur1 in CurList: if cur2 in CurList: try: float(val) except ValueError: ms = 'Invalid amount' await message.reply(ms) else: v = float(val) now = datetime.now().timestamp() async with state.proxy() as data: if not islimit(data['rltime'], now): # 10 min is passed await state.update_data(rltime = datetime.now().timestamp()) #renew timestamp response = requests.get("http://api.exchangeratesapi.io/latest?base="+cur1) ms = '' if response.status_code == 200: data['rl'] = response.json()['rates'] for i in data['rl']: if i == cur2: nval = float(data['rl'][i])*v ms += str(val)+ ' '+ cur1+' to '+cur2+' is {:.2f}'.format(nval) else: ms = 'Data was not received' await message.reply(ms) else: # 10 min is not passed if data['rl'] is not None: for i in data['rl']: if i == cur2: nval = float(data['rl'][i])*v ms += str(val)+ ' '+ cur1+' to '+cur2+' is {:.2f}'.format(nval) else: ms = 'Data was not received. Try after several minutes' await message.reply(ms) else: ms = 'Invalid value of the second currency or it is not in the list' await message.reply(ms) else: ms = 'Invalid value of the first currency or it is not in the list' await message.reply(ms)
async def stats(message: types.Message): payload = message.get_args().split() base_log_msg = f"Admin {message.from_user.id} requested {payload} with result" subcommands = ["total", "file", "lang", "reqs"] if "total" in payload: total_users = User.select().where(User.is_ban == False).count() # noqa: E712 logger.info(f"{base_log_msg} {total_users}") await message.answer(total_users) elif "file" in payload: file = open(Path.cwd().joinpath("src/data/users.db"), "rb") input_file = types.InputFile(file) logger.info(f"{base_log_msg} <file>") await message.answer_document(input_file) file.close() elif "reqs" in payload: total_requests = User.select(fn.SUM(User.requests)).scalar(as_tuple=True) logger.info(f"{base_log_msg} {total_requests[0]}") await message.answer(total_requests[0]) elif "lang" in payload: text = "Language Percentages:" top_list = [] for lang in REPLIES["LANGS"]: total_users = ( User.select().where(User.is_ban == False).count() # noqa: E712 ) total_lang = User.select().where(User.language == lang).count() try: percent = total_lang / total_users except ZeroDivisionError: percent = 0.0 top_list.append([lang, round(percent, 4)]) for lang, per in sorted(top_list, key=lambda x: x[1], reverse=True): text += f"\n<pre>{lang}: {per:.2%}</pre>" logger.info(f"{base_log_msg} {top_list}") await message.answer(text=text, parse_mode="HTML") else: logger.info(f"{base_log_msg} no result.") await message.answer(subcommands)
async def bot_start(message: types.Message, state: FSMContext): user = await db.get_user(message.from_user.id) if not user: bot_username = (await dp.bot.me).username if str(message.from_user.id) in ADMINS: admin = await db.verify_admin(message.from_user.id, message.from_user.full_name) await message.answer( f'Здравствуйте, новый Администратор {message.from_user.get_mention()}\n' f'Что бы открыть админ меню, пропишите /admin\n' f'Ваш реферальный код <pre>{admin.code}</pre>\n' f'Или ссылка t.me/{bot_username}?start={admin.code}') return code = message.text if not message.is_command() else message.get_args() if not code: await message.answer( 'Чтобы использовать этого бота введите код приглашения, ' 'либо пройдите по реферальной ссылке') await state.set_state('wait_code') return referrer = await db.get_user_on_code(message.get_args()) if referrer: referral = await db.add_referral_user(referrer, message.from_user.id, message.from_user.full_name) await message.answer( f'Вы были приглашены пользователем <b>{referrer.name}</b>\n' f'Вы можете получить бонус +10₽ если пригласите рефералов\n' f'Ваш реферальный код <pre>{referral.code}</pre>\n' f'Или ссылка t.me/{bot_username}?start={referral.code}', reply_markup=start_inline) return True else: await message.answer('Неверный код приглашения') return False await message.answer(f"Здравствуйте, {message.from_user.get_mention()}!\n" f"Ваш баланс: {user.balance}")
async def inner(message: Message): if message.reply_to_message: text = message.reply_to_message.text else: text = message.get_args() if text: text = f(text) await message.reply(text)
async def bot_start_deeplink(message: types.Message): deep_link_args = message.get_args() await message.answer(f"Привет, {message.from_user.full_name}!\n" f"Вы находитесь в личной переписке. \n" f"В вашей команде есть диплинк. \n" f"Вы передали аргумент {deep_link_args}. \n") logger.info( f"User <{message.from_user.full_name}[{message.from_user.id}]> started with deeplink" )
async def echo(message: types.Message): arguments = message.get_args() print("попросили удалить гражаднина с ID:", arguments) s = arguments cur.execute("delete from barsa where id=:id", {"id": s}) conn.commit() print("Гражданин с ID :", arguments, 'удален') res = "Гражданин с ID :", arguments, 'удален' await bot.send_message(message.from_user.id, res)
async def give(message: types.Message): id = message.get_args() otp = otpCode() if str(message.chat.id) not in master : await message.answer('Sorry you\'re not my master, you\'re not allowed to use this command') else: await bot.send_message( id, '%s' % otp )
async def bot_start_deeplink(message: types.Message, user: User): """Переход по реф. ссылке""" if user: await already_registered(message) else: deep_link_args = message.get_args() decoded_link = int(decode_payload(deep_link_args)) await registration(message, decoded_link)
async def akira_sc2a( message: types.Message ): # Also f**k this thing too, inherits all horrible code from /yt2a args = message.get_args() if args: download_dir = tempfile.mkdtemp(dir=akira_dir) dargs = { "format": "bestaudio[filesize<?2000M]", "outtmpl": f"{download_dir}/audio-%(id)s.%(ext)s", "writethumbnail": True } reply = await message.reply("Downloading...") try: with YoutubeDL(dargs) as ydl: audio_info = ydl.extract_info(args, download=False) print(audio_info) audio_id = audio_info["id"] audio_ext = audio_info["ext"] if not sc2a_cache.get(audio_id): ydl.download([args]) except: await message.reply("Download error.") await reply.delete() shutil.rmtree(download_dir) return await reply.edit_text("Uploading...") chat = await client.get_entity(message.chat.id) try: if sc2a_cache.get(audio_id): await client.send_file(chat, sc2a_cache[audio_id], reply_to=message.message_id) else: audio_message = await client.send_file( chat, open(f"{download_dir}/audio-{audio_id}.{audio_ext}", "rb"), thumb=open(f"{download_dir}/audio-{audio_id}.jpg", "rb"), reply_to=message.message_id, attributes=[ DocumentAttributeAudio( title=audio_info["title"], performer=audio_info["uploader"], duration=int( audio_info["duration"] ) # Whoever coded Soundcloud extractor, f**k you. WHY IS IT F*****G FLOAT INSTEAD OF INT ) ]) sc2a_cache[audio_id] = audio_message.media except: await message.reply("Upload error.") await reply.delete() shutil.rmtree(download_dir) return await reply.delete() shutil.rmtree(download_dir) else: await message.reply("No arguments.")
async def role(message: Message): user_id, role_name = message.get_args().split() session = db.Session() if user := session.query(db.User).get(user_id): auth.add_role(user, role_name, session=session) await message.answer(str(user)) if (auth.has_role(user.user_id, auth.CASHIER) and user.user_id != message.chat.id): await helpers.start(user.user_id)