Exemplo n.º 1
0
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)}",
        )
Exemplo n.º 2
0
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}")
Exemplo n.º 3
0
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)}")
Exemplo n.º 4
0
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}")
Exemplo n.º 5
0
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)