def roll(update: Update, context: CallbackContext): user: User = update.effective_user # check if hussar already exist or create new one existing_user = _db.find(user_id=user.id) if existing_user is None: _db.add(user=user) is_shot, shots_remained = _shot(context) shot_result = "he is dead!" if is_shot else "miss!" logger.info( "user: %s[%s] is rolling and... %s", user.full_name, user.id, shot_result ) if is_shot: # todo: https://github.com/vldc-hq/vldc-bot/issues/93 # if bot can't restrict user, user should be passed into towel-mode like state mute_min = get_mute_minutes(shots_remained) context.bot.send_message( update.effective_chat.id, f"💥 boom! {user.full_name} 😵 [{mute_min // 60}h mute]", ) mute_user_for_time(update, context, user, timedelta(minutes=mute_min)) _db.dead(user.id, mute_min) else: # lucky one _db.miss(user.id) context.bot.send_message( update.effective_chat.id, f"{user.full_name}: {get_miss_string(shots_remained)}", )
def banme(update: Update, context: CallbackContext): try: user: User = update.message.from_user mute_user_for_time(update, context, user, get_mute_minutes()) except TelegramError as err: update.message.reply_text( f"😿 не вышло, потому что: \n\n{err}")
def roll(update: Update, context: CallbackContext): user: User = update.effective_user # check if hussar already exist or create new one _db.find(user_id=user.id) or _db.add(user=user) is_shot, shots_remained = _shot(context) logger.info(f"user: {user.full_name}[{user.id}] is rolling and... " f"{'he is dead!' if is_shot else 'miss!'}") if is_shot: # todo: https://github.com/egregors/vldc-bot/issues/93 # if bot can't restrict user, user should be passed into towel-mode like state mute_min = get_mute_minutes(shots_remained) context.bot.send_message( update.effective_chat.id, f"💥 boom! {user.full_name} 😵 [{mute_min // 60}h mute]") mute_user_for_time(update, context, user, timedelta(minutes=mute_min)) _db.dead(user.id, mute_min) else: # lucky one _db.miss(user.id) context.bot.send_message( update.effective_chat.id, f"{user.full_name}: {get_miss_string(shots_remained)}")
def quarantine(update: Update, context: CallbackContext): try: user: User = update.message.reply_to_message.from_user update.message.reply_text( f"{user.full_name} помещён в карантин на {QUARANTINE_MUTE_DURATION}" ) since = datetime.now() until = since + QUARANTINE_MUTE_DURATION _db.add_quarantine(user.id, since, until) mute_user_for_time(update, context, user, QUARANTINE_MUTE_DURATION) except TelegramError as err: update.message.reply_text(f"😿 не вышло, потому что: \n\n{err}")
def handle_voice(update: Update, context: CallbackContext): user: User = update.effective_user chat_id = update.effective_chat.id message = update.message if user.name in EXCLUDING: return voice = message.voice or message.audio duration = voice.duration if duration > MAX_VOICE_DURATION: message_text = f"🤫🤫🤫 @{user.username}! Слишком много наговорил..." else: file_id = voice.file_id logger.info("%s sent voice message!", user.name) default_message = f"@{user.username} промямлил что-то невразумительное..." recognized_text = None try: recognized_text = get_text_from_speech(file_id) except (AttributeError, ValueError, RuntimeError) as err: logger.exception("failed to recognize speech: %s", err) if recognized_text is None: message_text = default_message else: message_text = ( f"🤫🤫🤫 Групповой чат – не место для войсов, @{user.username}!" f"\n@{user.username} пытался сказать: {recognized_text}" ) context.bot.send_message(chat_id=chat_id, text=message_text) try: mute_user_for_time(update, context, user, VOICE_USER_MUTE_DURATION) finally: context.bot.delete_message(chat_id=chat_id, message_id=message.message_id)