def test_de_json_required_args(self, bot, user):
        json_dict = {'user': user.to_dict(), 'status': self.status}

        chat_member = ChatMember.de_json(json_dict, bot)

        assert chat_member.user == user
        assert chat_member.status == self.status
Ejemplo n.º 2
0
    def test_de_json_all_args(self, bot, user):
        time = datetime.datetime.now()
        json_dict = {
            'user': user.to_dict(),
            'status': self.status,
            'until_date': to_timestamp(time),
            'can_be_edited': False,
            'can_change_info': True,
            'can_post_messages': False,
            'can_edit_messages': True,
            'can_delete_messages': True,
            'can_invite_users': False,
            'can_restrict_members': True,
            'can_pin_messages': False,
            'can_promote_members': True,
            'can_send_messages': False,
            'can_send_media_messages': True,
            'can_send_polls': False,
            'can_send_other_messages': True,
            'can_add_web_page_previews': False
        }

        chat_member = ChatMember.de_json(json_dict, bot)

        assert chat_member.user == user
        assert chat_member.status == self.status
        assert chat_member.can_be_edited is False
        assert chat_member.can_change_info is True
        assert chat_member.can_post_messages is False
        assert chat_member.can_edit_messages is True
        assert chat_member.can_delete_messages is True
        assert chat_member.can_invite_users is False
        assert chat_member.can_restrict_members is True
        assert chat_member.can_pin_messages is False
        assert chat_member.can_promote_members is True
        assert chat_member.can_send_messages is False
        assert chat_member.can_send_media_messages is True
        assert chat_member.can_send_polls is False
        assert chat_member.can_send_other_messages is True
        assert chat_member.can_add_web_page_previews is False
    def test_de_json_all_args(self, bot, user):
        time = datetime.datetime.now()
        json_dict = {'user': user.to_dict(),
                     'status': self.status,
                     'until_date': to_timestamp(time),
                     'can_be_edited': False,
                     'can_change_info': True,
                     'can_post_messages': False,
                     'can_edit_messages': True,
                     'can_delete_messages': True,
                     'can_invite_users': False,
                     'can_restrict_members': True,
                     'can_pin_messages': False,
                     'can_promote_members': True,
                     'can_send_messages': False,
                     'can_send_media_messages': True,
                     'can_send_other_messages': False,
                     'can_add_web_page_previews': True}

        chat_member = ChatMember.de_json(json_dict, bot)

        assert chat_member.user == user
        assert chat_member.status == self.status
        assert chat_member.can_be_edited is False
        assert chat_member.can_change_info is True
        assert chat_member.can_post_messages is False
        assert chat_member.can_edit_messages is True
        assert chat_member.can_delete_messages is True
        assert chat_member.can_invite_users is False
        assert chat_member.can_restrict_members is True
        assert chat_member.can_pin_messages is False
        assert chat_member.can_promote_members is True
        assert chat_member.can_send_messages is False
        assert chat_member.can_send_media_messages is True
        assert chat_member.can_send_other_messages is False
        assert chat_member.can_add_web_page_previews is True
Ejemplo n.º 4
0
    ChatMember,
    ChatJoinRequest,
)
from telegram.poll import PollAnswer
from telegram.utils.helpers import from_timestamp

message = Message(1,
                  None,
                  Chat(1, ''),
                  from_user=User(1, '', False),
                  text='Text')
chat_member_updated = ChatMemberUpdated(
    Chat(1, 'chat'),
    User(1, '', False),
    from_timestamp(int(time.time())),
    ChatMember(User(1, '', False), ChatMember.CREATOR),
    ChatMember(User(1, '', False), ChatMember.CREATOR),
)

chat_join_request = ChatJoinRequest(
    chat=Chat(1, Chat.SUPERGROUP),
    from_user=User(1, 'first_name', False),
    date=from_timestamp(int(time.time())),
    bio='bio',
)

params = [
    {
        'message': message
    },
    {
Ejemplo n.º 5
0
def chat_member(user):
    return ChatMember(user, TestChatMember.status)
    def test_de_json_all_args(self, bot, chat_member_class_and_status, user):
        cls = chat_member_class_and_status[0]
        status = chat_member_class_and_status[1]
        time = datetime.datetime.utcnow()

        json_dict = {
            'user': user.to_dict(),
            'status': status,
            'custom_title': 'PTB',
            'is_anonymous': True,
            'until_date': to_timestamp(time),
            'can_be_edited': False,
            'can_change_info': True,
            'can_post_messages': False,
            'can_edit_messages': True,
            'can_delete_messages': True,
            'can_invite_users': False,
            'can_restrict_members': True,
            'can_pin_messages': False,
            'can_promote_members': True,
            'can_send_messages': False,
            'can_send_media_messages': True,
            'can_send_polls': False,
            'can_send_other_messages': True,
            'can_add_web_page_previews': False,
            'can_manage_chat': True,
            'can_manage_voice_chats': True,
        }
        chat_member_type = ChatMember.de_json(json_dict, bot)

        assert isinstance(chat_member_type, ChatMember)
        assert isinstance(chat_member_type, cls)
        assert chat_member_type.user == user
        assert chat_member_type.status == status
        if chat_member_type.custom_title is not None:
            assert chat_member_type.custom_title == 'PTB'
            assert type(chat_member_type) in {ChatMemberOwner, ChatMemberAdministrator}
        if chat_member_type.is_anonymous is not None:
            assert chat_member_type.is_anonymous is True
            assert type(chat_member_type) in {ChatMemberOwner, ChatMemberAdministrator}
        if chat_member_type.until_date is not None:
            assert type(chat_member_type) in {ChatMemberBanned, ChatMemberRestricted}
        if chat_member_type.can_be_edited is not None:
            assert chat_member_type.can_be_edited is False
            assert type(chat_member_type) == ChatMemberAdministrator
        if chat_member_type.can_change_info is not None:
            assert chat_member_type.can_change_info is True
            assert type(chat_member_type) in {ChatMemberAdministrator, ChatMemberRestricted}
        if chat_member_type.can_post_messages is not None:
            assert chat_member_type.can_post_messages is False
            assert type(chat_member_type) == ChatMemberAdministrator
        if chat_member_type.can_edit_messages is not None:
            assert chat_member_type.can_edit_messages is True
            assert type(chat_member_type) == ChatMemberAdministrator
        if chat_member_type.can_delete_messages is not None:
            assert chat_member_type.can_delete_messages is True
            assert type(chat_member_type) == ChatMemberAdministrator
        if chat_member_type.can_invite_users is not None:
            assert chat_member_type.can_invite_users is False
            assert type(chat_member_type) in {ChatMemberAdministrator, ChatMemberRestricted}
        if chat_member_type.can_restrict_members is not None:
            assert chat_member_type.can_restrict_members is True
            assert type(chat_member_type) == ChatMemberAdministrator
        if chat_member_type.can_pin_messages is not None:
            assert chat_member_type.can_pin_messages is False
            assert type(chat_member_type) in {ChatMemberAdministrator, ChatMemberRestricted}
        if chat_member_type.can_promote_members is not None:
            assert chat_member_type.can_promote_members is True
            assert type(chat_member_type) == ChatMemberAdministrator
        if chat_member_type.can_send_messages is not None:
            assert chat_member_type.can_send_messages is False
            assert type(chat_member_type) == ChatMemberRestricted
        if chat_member_type.can_send_media_messages is not None:
            assert chat_member_type.can_send_media_messages is True
            assert type(chat_member_type) == ChatMemberRestricted
        if chat_member_type.can_send_polls is not None:
            assert chat_member_type.can_send_polls is False
            assert type(chat_member_type) == ChatMemberRestricted
        if chat_member_type.can_send_other_messages is not None:
            assert chat_member_type.can_send_other_messages is True
            assert type(chat_member_type) == ChatMemberRestricted
        if chat_member_type.can_add_web_page_previews is not None:
            assert chat_member_type.can_add_web_page_previews is False
            assert type(chat_member_type) == ChatMemberRestricted
        if chat_member_type.can_manage_chat is not None:
            assert chat_member_type.can_manage_chat is True
            assert type(chat_member_type) == ChatMemberAdministrator
        if chat_member_type.can_manage_voice_chats is not None:
            assert chat_member_type.can_manage_voice_chats is True
            assert type(chat_member_type) == ChatMemberAdministrator
    def test_de_json_invalid_status(self, bot, user):
        json_dict = {'status': 'invalid', 'user': user.to_dict()}
        chat_member_type = ChatMember.de_json(json_dict, bot)

        assert type(chat_member_type) is ChatMember
        assert chat_member_type.status == 'invalid'
def bite(update, context):
    # Схватываем всех админов и помещаем в list
    admins = context.bot.get_chat_administrators(update.message.chat.id)

    # Определяем, есть ли среди отправителя и получателя админы
    sender = ChatMember(update.message.from_user.id, 'unknown')
    for i in range(0, len(admins)):
        if (sender.user == admins[i].user.id):
            sender.status = 'administrator'

    if (sender.status != 'administrator'):
        sender.status = 'member'

    recipient = ChatMember(
        update.effective_message.reply_to_message.from_user.id, 'unknown')
    for i in range(0, len(admins)):
        if (recipient.user == admins[i].user.id):
            recipient.status = 'administrator'

    if (recipient.status != 'administrator'):
        recipient.status = 'member'

    # Обрабатываем сам кусь
    if (update.effective_message.text.lower() == 'кусь'):
        # Подбрасываем монетку
        coin = random.randint(1, 100)
        file_num = random.randint(1, 5)

        # admin vs admin
        if (sender.status == recipient.status == 'administrator'):
            update.message.reply_photo(photo=open('special/love.jpg', 'rb'))
            update.message.reply_text(
                "Воу-воу, битва админов. Я на такое не подписывался!")
            return

        # admin vs member
        if (sender.status == 'administrator' and coin % 2 == 0):
            update.message.reply_photo(photo=open('special/armored.jpg', 'rb'))
            update.message.reply_text(
                "Админу @" + str(update.message.from_user.username) +
                " не удалось укусить пользователя @" +
                str(update.effective_message.reply_to_message.from_user.
                    username) + "!")
            return
        elif (recipient.status != 'administrator'
              and sender.status == 'administrator'):
            context.bot.restrict_chat_member(
                update.message.chat.id,
                update.effective_message.reply_to_message.from_user.id,
                permissions=ChatPermissions(can_send_messages=False),
                until_date=time() + 30)
            update.message.reply_photo(
                photo=open('kus\'/kus\'' + str(file_num) + '.jpg', 'rb'))
            update.message.reply_text(
                "Админ @" + str(update.message.from_user.username) +
                " не оставил шансов пользователю @" +
                str(update.effective_message.reply_to_message.from_user.
                    username) + "!")
            return

        # member vs admin
        if (recipient.status == 'administrator'):
            context.bot.restrict_chat_member(
                update.message.chat.id,
                update.message.from_user.id,
                permissions=ChatPermissions(can_send_messages=False),
                until_date=time() + 30)
            update.message.reply_photo(
                photo=open('antikus\'/antikus\'' + str(file_num) +
                           '.jpg', 'rb'))
            update.message.reply_text("Слабоумие и отвага. Админ @" + str(
                update.effective_message.reply_to_message.from_user.username) +
                                      " даже не почувствовал пользователя @" +
                                      str(update.message.from_user.username) +
                                      " !")
            return

        # member vs member
        if (coin % 2 == 0 and update.message.from_user):
            context.bot.restrict_chat_member(
                update.message.chat.id,
                update.message.from_user.id,
                permissions=ChatPermissions(can_send_messages=False),
                until_date=time() + 30)
            update.message.reply_photo(
                photo=open('antikus\'/antikus\'' + str(file_num) +
                           '.jpg', 'rb'))
            update.message.reply_text(
                "Пользователь  @" + str(update.message.from_user.username) +
                " попробовал укусить @" +
                str(update.effective_message.reply_to_message.from_user.
                    username) + ", но тот увернулся и нанес антикусь!")
        else:
            context.bot.restrict_chat_member(
                update.message.chat.id,
                update.effective_message.reply_to_message.from_user.id,
                permissions=ChatPermissions(can_send_messages=False),
                until_date=time() + 30)
            update.message.reply_photo(
                photo=open('kus\'/kus\'' + str(file_num) + '.jpg', 'rb'))
            update.message.reply_text(
                "Пользователь  @" + str(update.message.from_user.username) +
                " кусил @" + str(update.effective_message.reply_to_message.
                                 from_user.username) + "!")

    # Реализуем мут
    st = update.effective_message.text.lower()
    s = st.split()

    if (s[0] == 'мут'
            and (sender.status == 'administrator' or sender.user == master)
            and recipient.status != 'administrator'
            and recipient.user != master):
        try:
            t = int(s[1])
            if (s[2] == 'мин'): t = t * 60
            elif (s[2] == 'ч'): t = t * 3600
            elif (s[2] == 'cут'): t = t * 3600 * 24
        except:
            update.message.reply_text("Укажи правильно время мута, котик!")
            return
        context.bot.restrict_chat_member(
            update.message.chat.id,
            update.effective_message.reply_to_message.from_user.id,
            permissions=ChatPermissions(can_send_messages=False),
            until_date=time() + t)
        update.message.reply_text(
            "@" +
            str(update.effective_message.reply_to_message.from_user.username) +
            " получил мут на " + s[1] + " " + s[2] + "!")
    elif (s[0] == 'мут'
          and sender.status == recipient.status == 'administrator'):
        update.message.reply_text(
            "Воу-воу, битва админов. Я на такое не подписывался!")
    elif (s[0] == 'мут' and recipient.user == master):
        update.message.reply_photo(photo=open('special/shield.jpg', 'rb'))
        update.message.reply_text(
            "РРРРРРРРРРРРРРР! За что ты так с моим хозяином?!")
    elif (s[0] == 'мут'):
        update.message.reply_text("Котик, не обманывай меня, ты не админ!")

    # Обрабатываем анмут
    if (update.effective_message.text.lower() == 'анмут'
            and (sender.status == 'administrator' or sender.user == master)
            and recipient.status != 'administrator'
            and recipient.user != master):
        context.bot.restrict_chat_member(
            update.message.chat.id,
            update.effective_message.reply_to_message.from_user.id,
            permissions=ChatPermissions(can_send_messages=True),
            until_date=0)
        update.message.reply_text(
            "@" +
            str(update.effective_message.reply_to_message.from_user.username) +
            " вновь может писать!")
    elif (update.effective_message.text.lower() == 'анмут'
          and sender.status == recipient.status == 'administrator'):
        update.message.reply_text(
            "Воу-воу, битва админов. Я на такое не подписывался!")
    elif (update.effective_message.text.lower() == 'анмут'):
        update.message.reply_text("Котик, не обманывай меня, ты не админ!")

    # Обрабатываем бан
    if (update.effective_message.text.lower() == 'бан'
            and (sender.status == 'administrator' or sender.user == master)
            and recipient.status != 'administrator'
            and recipient.user != master):
        context.bot.kick_chat_member(
            update.message.chat.id,
            update.effective_message.reply_to_message.from_user.id,
            until_date=0)
        update.message.reply_text(
            "@" +
            str(update.effective_message.reply_to_message.from_user.username) +
            " получил бан!(")
    elif (update.effective_message.text.lower() == 'бан'
          and sender.status == recipient.status == 'administrator'):
        update.message.reply_text(
            "Воу-воу, битва админов. Я на такое не подписывался!")
    elif (update.effective_message.text.lower() == 'бан'
          and recipient.user == master):
        update.message.reply_photo(photo=open('special/shield.jpg', 'rb'))
        update.message.reply_text(
            "РРРРРРРРРРРРРРР! За что ты так с моим хозяином?!")
    elif (update.effective_message.text.lower() == 'бан'):
        update.message.reply_text("Котик, не обманывай меня, ты не админ!")

    # Обрабатываем анбан
    if (update.effective_message.text.lower() == 'анбан'
            and (sender.status == 'administrator' or sender.user == master)
            and recipient.status != 'administrator'
            and recipient.user != master):
        context.bot.unban_chat_member(
            update.message.chat.id,
            update.effective_message.reply_to_message.from_user.id,
            until_date=0)
        update.message.reply_text(
            "@" +
            str(update.effective_message.reply_to_message.from_user.username) +
            " был разбанен!)")
        link = context.bot.export_chat_invite_link(update.message.chat.id)
        context.bot.send_message(
            update.effective_message.reply_to_message.from_user.id,
            "Котик, тебя разбанили! Ссылка для возврата в чат:" + link)
    elif (update.effective_message.text.lower() == 'анбан'
          and sender.status == recipient.status == 'administrator'):
        update.message.reply_text(
            "Воу-воу, битва админов. Я на такое не подписывался!")
    elif (update.effective_message.text.lower() == 'анбан'
          and recipient.user == master):
        update.message.reply_photo(photo=open('special/shield.jpg', 'rb'))
        update.message.reply_text(
            "РРРРРРРРРРРРРРР! За что ты так с моим хозяином?!")
    elif (update.effective_message.text.lower() == 'анбан'):
        update.message.reply_text("Котик, не обманывай меня, ты не админ!")
def new_chat_member(user):
    return ChatMember(user, TestChatMemberUpdated.new_status)
def old_chat_member(user):
    return ChatMember(user, TestChatMemberUpdated.old_status)
    def test_de_json_invalid_status(self, chat_member_type, bot):
        json_dict = {"status": "invalid", "user": CMDefaults.user.to_dict()}
        chat_member_type = ChatMember.de_json(json_dict, bot)

        assert type(chat_member_type) is ChatMember
        assert chat_member_type.status == "invalid"
Ejemplo n.º 12
0
 def member(*args, **kwargs):
     if args[1] == 0:
         return ChatMember(User(0, 'TestUser0', False), 'administrator')
     if args[1] == 1:
         return ChatMember(User(1, 'TestUser1', False), 'creator')
     raise TelegramError('User is not a member')
Ejemplo n.º 13
0
 def admins(*args, **kwargs):
     return [
         ChatMember(User(0, 'TestUser0', False), 'administrator'),
         ChatMember(User(1, 'TestUser1', False), 'creator'),
     ]
Ejemplo n.º 14
0
 def admins(*args, **kwargs):
     return [ChatMember(User(2, 'TestUser0', False), 'administrator')]
Ejemplo n.º 15
0
 def get_chat_administrators(self, chat_id, timeout=None, **kwargs):
     return list(
         map(
             lambda user: ChatMember(User(1, user, False), ChatMember.
                                     ADMINISTRATOR), self.admin_user))