Пример #1
0
async def thanos(_, message):
    chat = message.text.split("/pidor ", maxsplit = 1)[1]
 
    chats = await client.get_dialogs()
    dialog = [cht for cht in chats if chat in cht.name][0]
    members = await client.get_participants(dialog.id)
    process = 0
    eyes = emojize(":eyes:", use_aliases=True)
    exclamation = emojize(":exclamation:", use_aliases=True)
 
    while(process < 100):
        try:
            text = f"{eyes} Пои�к пидора ... {process}%"
            await message.edit(text)
 
            process += random.randint(1, 3)
            await asyncio.sleep(0.1)
 
        except FloodWait as error:
            await asyncio.sleep(error.x)
    
    pidor_id = random.choice(members).id

    pidor = (await client.get_entity(PeerUser(pidor_id))).username \
        if (await client.get_entity(PeerUser(pidor_id))).username \
        else (await client.get_entity(PeerUser(pidor_id))).first_name + " " \
        + (await client.get_entity(PeerUser(pidor_id))).last_name \
            if (await client.get_entity(PeerUser(pidor_id))).last_name else ''

    if pidor:
        await message.edit(f"Пидор найден {exclamation} @{pidor}")
    else:
        await message.edit(f"Пидор не найден {exclamation}")
Пример #2
0
async def get_input_entity(
        user_id: int, chat: Union[int, PeerChat,
                                  PeerChannel]) -> InputPeerUser:
    MESSAGES_TO_GET = 10
    try:
        return await client.get_input_entity(PeerUser(user_id))
    except ValueError:
        await client.get_messages(chat, MESSAGES_TO_GET)
        return await client.get_input_entity(PeerUser(user_id))
Пример #3
0
def get_sender(update):
	sender = False
	if isinstance(update, UpdateShortMessage):
		sender = client.get_entity(PeerUser(update.user_id))
	elif isinstance(update, UpdateNewChannelMessage):
		sender = client.get_entity(PeerUser(update.message.from_id))
	else:
		# print(update)
		pass
	return sender
Пример #4
0
    async def update_displayname(self, source: 'AbstractUser', info: Union[User, UpdateUserName]
                                 ) -> bool:
        if self.disable_updates:
            return False
        is_main_source = (source.is_relaybot or (self.displayname_source is not None
                                                 and self.displayname_source == source.tgid))
        # No phone -> not in contact list -> can't set custom name -> name is trustworthy
        is_trustworthy_source = isinstance(info, User) and info.phone is None
        if not is_main_source and not is_trustworthy_source:
            return False
        elif isinstance(info, UpdateUserName):
            info = await source.client.get_entity(PeerUser(self.tgid))

        displayname = self.get_displayname(info)
        if displayname != self.displayname:
            self.displayname = displayname
            self.displayname_source = source.tgid
            try:
                await self.default_mxid_intent.set_display_name(displayname)
            except MatrixRequestError:
                self.log.exception("Failed to set displayname")
                self.displayname = ""
                self.displayname_source = None
            return True
        elif source.is_relaybot or self.displayname_source is None:
            self.displayname_source = source.tgid
            return True
        return False
Пример #5
0
 async def get_user_rights_level(self, user_id):
     try:
         entity = await self.tg_client.get_entity(PeerUser(int(user_id)))
         rights = self.get_entity_rights_level(entity)
     except:
         rights = 0
     return rights
Пример #6
0
 async def on_user_message_to_me(self, from_id, message_text):
     if not self.aa_options['is_set']:
         return
     if from_id in self.aa_not_for_users:
         return
     if (from_id in self.aa_for_users) and self.aa_for_users[from_id]:
         return
     try:
         entity = await self.tg_bot_controller.tg_client.get_entity(
             PeerUser(int(from_id)))
     except:
         return
     if (not entity) or (type(entity) != User):
         return
     user_level = self.tg_bot_controller.get_entity_rights_level(
         entity, self.aa_options['from_user_ids'])
     if user_level < self.aa_options['from_mode']:
         if from_id not in self.aa_not_for_users:
             self.aa_not_for_users.append(from_id)
         return
     self.aa_for_users[from_id] = StatusController.now_local_datetime()
     check_user_name = await self.tg_bot_controller.tg_client.get_entity_name(
         from_id, 'User')
     print(
         StatusController.datetime_to_str(datetime.now()) +
         ' Adding AA schedule for user "' + check_user_name + '"')
     if self.aa_options['answer_after_minutes'] <= 0.05:
         await self.do_on_timer([from_id])
Пример #7
0
def update_handler(update):
    try:
        message = update.message
        messages = []
        if isinstance(update, UpdateShortMessage):
            sender = client.get_entity(PeerUser(update.user_id))
            messages.append(update.id)
        elif isinstance(update, UpdateNewChannelMessage):
            sender = client.get_entity(
                PeerChannel(update.message.to_id.channel_id))
            # print(update.message.id)
            messages.append(update.message.id)
        elif isinstance(update, UpdateEditChannelMessage):
            pass
        else:
            # print(type(update))
            # print(update)
            return False
    except Exception as e:
        # print(e)
        return

    try:
        client(
            ForwardMessagesRequest(
                from_peer=sender,  # who sent these messages?
                id=messages,  # which are the messages?
                to_peer=InputPeerSelf()  # who are we forwarding them to?
            ))
        print("FORWARD")
        # print(get_text(update))
    except Exception as e:
        print("EXCEPTION")
        print(get_text(update))
        print(e)
Пример #8
0
 def peer(self) -> Union[TypePeer, TypeInputPeer]:
     if self.peer_type == "user":
         return PeerUser(user_id=self.tgid)
     elif self.peer_type == "chat":
         return PeerChat(chat_id=self.tgid)
     elif self.peer_type == "channel":
         return PeerChannel(channel_id=self.tgid)
Пример #9
0
    async def messages(self, limit=100):
        dialogs = await self.get_dialogs(limit=limit)
        messages = None
        mssgs = []
        for dialog in dialogs:
            user = dialog.entity
            if (not isinstance(user, (Channel, Chat))
                ) and user.first_name.find("bot") < 0 and (not user.is_self):

                new_user = await Users.save_user(user.id, user.first_name)

                messages = await self.get_messages(user, limit=limit)
                for message in messages:
                    mssgs.append(message)
        for message in mssgs:
            fro_user = None
            to_user = None
            fro_entity = await self.get_entity(entity=PeerUser(
                user_id=message.from_id))
            print("from user:{}, message :{}".format(fro_entity.username,
                                                     message.message))
            if isinstance(fro_entity, User):
                fro_user = await Users.save_user(
                    user_id=fro_entity.id, first_name=fro_entity.first_name)
            t_entity = await self.get_entity(entity=message.to_id)
            if isinstance(t_entity, User):
                to_user = await Users.save_user(user_id=t_entity.id,
                                                first_name=t_entity.first_name)
            print("to user:{}".format(t_entity.username))
            msg = await Messages.save_message(message_id=message.id,
                                              from_user=fro_user[0],
                                              to_user=to_user[0],
                                              ts_created=message.date,
                                              message=message)
        return len(mssgs)
Пример #10
0
async def edit_message(room_id, data):
    """
    Returns the updated message
    """
    async with start_bot_client() as bot:
        msg_inst = Message.objects.get(id=data["message_id"])
        if msg_inst.from_group:
            receiver = await bot.get_entity(PeerChat(room_id))
        else:
            receiver = await bot.get_entity(PeerUser(room_id))

        msg = await bot.get_messages(receiver, ids=msg_inst.telegram_msg_id)
        try:
            await bot.edit_message(msg, data[MESSAGE])
        except MessageIdInvalidError:
            logger.exception(exception)
            return {
                DATA: {
                    MESSAGE: EDIT_FAIL,
                    IS_SUCCESS: False
                },
                STATUS: status.HTTP_400_BAD_REQUEST,
            }
        msg_inst.message = data[MESSAGE]
        msg_inst.save()

    return {
        DATA: {
            MESSAGE: data,
            IS_SUCCESS: True
        },
        STATUS: status.HTTP_200_OK,
    }
Пример #11
0
def add_user_by_id(client, user_id, channel_id=DEFAULT_CHANNEL):
    try:

        # client.invoke(InviteToChannelRequest(get_input_peer(channel), [get_input_peer(user)]))

        # client.invoke(InviteToChannelRequest(
        #     # InputChannel(get_input_peer(user.chats[0]).channel_id, get_input_peer(user.chats[0]).access_hash),
        #     InputChannel(channel.id, channel.access_hash),
        #     [InputUser(get_input_peer(user.users[0]).user_id, get_input_peer(user.users[0]).access_hash)]
        # ))
        # client.invoke(InviteToChannelRequest(InputChannel(channel.id, channel.access_hash), [InputUser(get_input_peer(user.users[0]).user_id, get_input_peer(user.users[0]).access_hash)]))
        # client.invoke(InviteToChannelRequest(client.get_entity(PeerChannel(1188959006)), [user]))
        # client.invoke(InviteToChannelRequest(client.get_input_entity(PeerChannel(channel_id)), [client.get_input_entity(PeerUser(user_id=user.users[0].id))]))

        user_entity = client.get_input_entity(PeerUser(user_id))
        channel_entity = client.get_entity(PeerChannel(channel_id=int(channel_id)))
        client.invoke(InviteToChannelRequest(channel_entity, [user_entity]))

        log.warning("Added User: {} to Channel: {}".format(user_id, channel_id))
        return "User added successfully"
    except Exception as err:
        reason = err.args[1] if len(err.args) > 1 else err.message
        msg = "Add User {} attempt to channel ({}) failed [{}]".format(user_id, channel_id, reason)
        log.error(msg)
        log.error(err)
    return msg
    def get_entity_rows_by_id(self, entity_id, exact=True):
        if exact:
            key = "{}:entities:{}".format(self.sess_prefix, entity_id)
            s = self.redis_connection.get(key)
            if not s:
                return None
            try:
                s = self._unpack(s)
                return entity_id, s["hash"]
            except Exception as ex:
                __log__.exception(ex.args)
                return None
        else:
            ids = (
                utils.get_peer_id(PeerUser(entity_id)),
                utils.get_peer_id(PeerChat(entity_id)),
                utils.get_peer_id(PeerChannel(entity_id))
            )

            try:
                for key in self._get_entities():
                    entity = self._unpack(self.redis_connection.get(key))
                    if "id" in entity and entity["id"] in ids:
                        return entity["id"], entity["hash"]
            except Exception as ex:
                __log__.exception(ex.args)
Пример #13
0
    async def update_displayname(self, source: 'AbstractUser',
                                 info: Union[User, UpdateUserName]) -> bool:
        if self.disable_updates:
            return False
        allow_source = (
            source.is_relaybot or self.displayname_source == source.tgid
            # User is not a contact, so there's no custom name
            or not info.contact
            # No displayname source, so just trust anything
            or self.displayname_source is None)
        if not allow_source:
            return False
        elif isinstance(info, UpdateUserName):
            info = await source.client.get_entity(PeerUser(self.tgid))

        displayname = self.get_displayname(info)
        if displayname != self.displayname:
            self.displayname = displayname
            self.displayname_source = source.tgid
            try:
                await self.default_mxid_intent.set_displayname(
                    displayname[:config["bridge.displayname_max_length"]])
            except MatrixRequestError:
                self.log.exception("Failed to set displayname")
                self.displayname = ""
                self.displayname_source = None
            return True
        elif source.is_relaybot or self.displayname_source is None:
            self.displayname_source = source.tgid
            return True
        return False
Пример #14
0
async def _add_forward_header(source, text: str, html: Optional[str],
                              fwd_from: MessageFwdHeader) -> Tuple[str, str]:
    if not html:
        html = escape(text)
    fwd_from_html, fwd_from_text = None, None
    if fwd_from.from_id:
        user = u.User.get_by_tgid(fwd_from.from_id)
        if user:
            fwd_from_text = user.displayname or user.mxid
            fwd_from_html = f"<a href='https://matrix.to/#/{user.mxid}'>{fwd_from_text}</a>"

        if not fwd_from_text:
            puppet = pu.Puppet.get(fwd_from.from_id, create=False)
            if puppet and puppet.displayname:
                fwd_from_text = puppet.displayname or puppet.mxid
                fwd_from_html = f"<a href='https://matrix.to/#/{puppet.mxid}'>{fwd_from_text}</a>"

        if not fwd_from_text:
            user = await source.client.get_entity(PeerUser(fwd_from.from_id))
            if user:
                fwd_from_text = pu.Puppet.get_displayname(user, format=False)
                fwd_from_html = f"<b>{fwd_from_text}</b>"

    if not fwd_from_text:
        if fwd_from.from_id:
            fwd_from_text = "Unknown user"
        else:
            fwd_from_text = "Unknown source"
        fwd_from_html = f"<b>{fwd_from_text}</b>"

    text = "\n".join([f"> {line}" for line in text.split("\n")])
    text = f"Forwarded from {fwd_from_text}:\n{text}"
    html = (f"Forwarded message from {fwd_from_html}<br/>"
            f"<tg-forward><blockquote>{html}</blockquote></tg-forward>")
    return text, html
Пример #15
0
    async def send_message(self, to_id):
        message_text = self.aa_options['message']
        message = message_text.replace(
            '[username]', self.tg_bot_controller.tg_client.me_user_name)

        if message.find('[statistics]') >= 0:
            stats_str = await self.tg_bot_controller.tg_client.status_controller.get_user_aa_statistics_text(
                self.tg_bot_controller.tg_client.me_user_id)
            message = message.replace('[statistics]', '\n' + stats_str)

        if self.aa_options['show_bot']:
            message = self.tg_bot_controller.text_to_bot_text(
                message, to_id, "dialog")
        else:
            message = self.tg_bot_controller.text_to_bot_text(
                message, to_id, "bot")
        to_username = await self.tg_bot_controller.tg_client.get_entity_name(
            to_id, 'User')
        msg_log = StatusController.datetime_to_str(datetime.now(
        )) + ' Sending AA message to user "' + to_username + '"'
        msg_log = msg_log + '\n' + '<<< ' + message
        print(msg_log)
        await self.tg_bot_controller.tg_client.send_message(
            PeerUser(to_id), message)
        if self.aa_options['notify_entity_id']:
            msg_log = StatusController.datetime_to_str(datetime.now(
            )) + ' Отправляем сообщение пользователю {}'.format(
                await self.tg_bot_controller.user_link(to_id, to_username))
            msg_log = msg_log + '\n\n' + '``` ' + message + '```'
            await self.send_message_to_user(
                self.aa_options['notify_entity_id'],
                msg_log,
                do_set_next=False)
Пример #16
0
    def _send(ids):
        for send_id in ids[60:]:
            nonlocal counter
            counter += 1
            print('I send to client msg')
            user = client.get_entity(PeerUser(send_id))
            sec = 5
            try:
                client.send_message(user, text)
            except FloodWaitError as error:
                sec = int(str(error).split(' ')[3])
                print('FLOOD, please sleep {}'.format(sec))
            except PeerFloodError as error:
                print(str(error))
                sleep(5)

            nonlocal count
            count -= 1
            print('Отправлено: {}'.format(counter))
            print('Осталось отправить: {}'.format(count))

            print('I sleep 5 seconds')
            sleep(sec)
            print('continue')

        return print('I finished the newsletter')
Пример #17
0
async def test(event):
    channel = -1001477006210
    global data
    global data_1
    global data_2
    # name = get_display_name(event.original_update.user_id)
    name = await bot.get_entity(PeerUser(event.original_update.user_id))
    msg = f"[{name.first_name}](tg://user?id={name.id})"
    # message_link = f"tg://openmessage?chat_id={event.original_update.peer.channel_id}&message_id={event.original_update.msg_id}"
    message_link = f"https://t.me/c/{event.original_update.peer.channel_id}/{event.original_update.msg_id}"
    if event.data.decode('utf-8') == "up":
        data += 1
        buton = tgbot.build_reply_markup([
            Button.inline(f"👍🏻 {data}", data="up"),
            Button.inline(f"❤️ {data_1}", data="kalp"),
            Button.inline(f"😢 {data_2}", data="agla")
        ])
        await tgbot.edit_message(channel,
                                 event.original_update.msg_id,
                                 buttons=buton)
        await bot.send_message(
            -443785781,
            f"Tıklayan: {msg}, 👍 e tıkladı.\n\nMesaja git: {message_link}")
        reply_pop_up_alert = "@RetroTurk Katılımınız İçin Teşekkür Eder."
        await event.answer(reply_pop_up_alert, cache_time=0, alert=True)
        # data += 1

    if event.data.decode('utf-8') == "kalp":
        data_1 += 1
        buton = tgbot.build_reply_markup([
            Button.inline(f"👍🏻 {data}", data="up"),
            Button.inline(f"❤️ {data_1}", data="kalp"),
            Button.inline(f"😢 {data_2}", data="agla")
        ])
        await tgbot.edit_message(channel,
                                 event.original_update.msg_id,
                                 buttons=buton)
        await bot.send_message(
            -443785781,
            f"Tıklayan: {msg}, ❤️ e tıkladı.\n\nMesaja git: {message_link}")
        reply_pop_up_alert = "@RetroTurk Katılımınız İçin Teşekkür Eder."
        await event.answer(reply_pop_up_alert, cache_time=0, alert=True)
        # data_1 += 1

    if event.data.decode('utf-8') == "agla":
        data_2 += 1
        buton = tgbot.build_reply_markup([
            Button.inline(f"👍🏻 {data}", data="up"),
            Button.inline(f"❤️ {data_1}", data="kalp"),
            Button.inline(f"😢 {data_2}", data="agla")
        ])
        await tgbot.edit_message(channel,
                                 event.original_update.msg_id,
                                 buttons=buton)
        await bot.send_message(
            -443785781,
            f"Tıklayan: {msg}, 😢 e tıkladı.\n\nMesaja git: {message_link}")
        reply_pop_up_alert = "@RetroTurk Katılımınız İçin Teşekkür Eder."
        await event.answer(reply_pop_up_alert, cache_time=0, alert=True)
Пример #18
0
    async def init_chat_for_user(self, user_id, entity_id=None, in_bot=False, show_as_bot=None):
        str_user_id = str(user_id)

        if not entity_id:
            entity_id = user_id

        if in_bot and self.tg_client.tg_bot:
            bot_chat_dialog = self.entity_controller.get_user_bot_chat(user_id)
            if not bot_chat_dialog and self.tg_client.tg_bot:
                bot_chat_dialog = await self.tg_client.tg_bot.get_input_entity(PeerUser(user_id))
            is_bot_dialog = True
            message_client = self.tg_client.tg_bot
        else:
            is_bot_dialog = False
            message_client = self.tg_client
            bot_chat_dialog = PeerUser(entity_id)

        if str_user_id not in self.users:
            try:
                entity = await self.tg_client.get_entity(PeerUser(int(user_id)))
                rights = self.get_entity_rights_level(entity)
            except:
                rights = 0
            self.users[str_user_id] = {
                'active': True,
                'branch': None,
                'branch_path': '/',
                'active_message_id': None,
                'last_message_id': None,
                'last_next_message_id': None,
                'rights': rights,
                'show_as_bot': show_as_bot,
                'message_client': message_client,
                'is_bot_dialog': is_bot_dialog,
                'dialog_entity': bot_chat_dialog,
                'entity_user_id': user_id,
                'entity_user_name': await self.tg_client.get_entity_name(user_id, 'User')
            }
            await self.on_user_init(user_id)
        else:
            self.users[str_user_id]['active'] = True
            if show_as_bot is not None:
                self.users[str_user_id]['show_as_bot'] = show_as_bot
            self.users[str_user_id]['message_client'] = message_client
            self.users[str_user_id]['is_bot_dialog'] = is_bot_dialog
            self.users[str_user_id]['dialog_entity'] = bot_chat_dialog
Пример #19
0
async def get_entity(chat_id, client):
    try:
        entity = await client.get_entity(PeerUser(chat_id))
    except:
        try:
            entity = await client.get_entity(PeerChannel(chat_id))
        except:
            entity = await client.get_entity(PeerChat(chat_id))
    return entity
Пример #20
0
 async def get_user_link(self, user_id, chat_name):
     await self.client.connect()
     await self.client.get_participants(chat_name)
     entity = await self.client.get_entity(PeerUser(user_id))
     enter = str(entity).find('access_hash')
     access_hash = str(entity)[enter + 13:enter + 32]
     link = "https://web.telegram.org/#/im?p=u" + str(
         user_id) + "_" + access_hash
     return link
Пример #21
0
 def get_entity_rows_by_id(self, id, exact=True):
     with switch_db(Entity, self.database) as _Entity:
         if exact:
             return _Entity.objects(id=id)
         else:
             ids = (utils.get_peer_id(PeerUser(id)),
                    utils.get_peer_id(PeerChat(id)),
                    utils.get_peer_id(PeerChannel(id)))
             return _Entity.objects(id__in=ids)
async def _add_forward_header(source: 'AbstractUser', content: TextMessageEventContent,
                              fwd_from: MessageFwdHeader) -> None:
    if not content.formatted_body or content.format != Format.HTML:
        content.format = Format.HTML
        content.formatted_body = escape(content.body)
    fwd_from_html, fwd_from_text = None, None
    if fwd_from.from_id:
        user = u.User.get_by_tgid(TelegramID(fwd_from.from_id))
        if user:
            fwd_from_text = user.displayname or user.mxid
            fwd_from_html = (f"<a href='https://matrix.to/#/{user.mxid}'>"
                             f"{escape(fwd_from_text)}</a>")

        if not fwd_from_text:
            puppet = pu.Puppet.get(TelegramID(fwd_from.from_id), create=False)
            if puppet and puppet.displayname:
                fwd_from_text = puppet.displayname or puppet.mxid
                fwd_from_html = (f"<a href='https://matrix.to/#/{puppet.mxid}'>"
                                 f"{escape(fwd_from_text)}</a>")

        if not fwd_from_text:
            try:
                user = await source.client.get_entity(PeerUser(fwd_from.from_id))
                if user:
                    fwd_from_text = pu.Puppet.get_displayname(user, False)
                    fwd_from_html = f"<b>{escape(fwd_from_text)}</b>"
            except ValueError:
                fwd_from_text = fwd_from_html = "unknown user"
    elif fwd_from.channel_id:
        portal = po.Portal.get_by_tgid(TelegramID(fwd_from.channel_id))
        if portal:
            fwd_from_text = portal.title
            if portal.alias:
                fwd_from_html = (f"<a href='https://matrix.to/#/{portal.alias}'>"
                                 f"{escape(fwd_from_text)}</a>")
            else:
                fwd_from_html = f"channel <b>{escape(fwd_from_text)}</b>"
        else:
            try:
                channel = await source.client.get_entity(PeerChannel(fwd_from.channel_id))
                if channel:
                    fwd_from_text = f"channel {channel.title}"
                    fwd_from_html = f"channel <b>{escape(channel.title)}</b>"
            except ValueError:
                fwd_from_text = fwd_from_html = "unknown channel"
    elif fwd_from.from_name:
        fwd_from_text = fwd_from.from_name
        fwd_from_html = f"<b>{escape(fwd_from.from_name)}</b>"
    else:
        fwd_from_text = "unknown source"
        fwd_from_html = f"unknown source"

    content.body = "\n".join([f"> {line}" for line in content.body.split("\n")])
    content.body = f"Forwarded from {fwd_from_text}:\n{content.body}"
    content.formatted_body = (
        f"Forwarded message from {fwd_from_html}<br/>"
        f"<tg-forward><blockquote>{content.formatted_body}</blockquote></tg-forward>")
 def get_entity_rows_by_id(self, id, exact=True):
     if exact:
         query = "SELECT * FROM c WHERE c.id = {}".format(id)
     else:
         query = "SELECT * FROM c WHERE c.id in ({}, {}, {})".format(
             utils.get_peer_id(PeerUser(id)), 
             utils.get_peer_id(PeerChat(id)),
             utils.get_peer_id(PeerChannel(id))
             )
     return self.get_entity_from_container(query)
Пример #24
0
 async def end_handler(cls, event: events.NewMessage.Event):
     players = [mention_markdown(await client.get_entity(PeerUser(p[0].url)))
                if isinstance(p[0], MessageEntityTextUrl)
                else f"**{p[1]}**" for p in [e for e in event.get_entities_text()
                                             if isinstance(e[0], (MessageEntityBold, MessageEntityTextUrl))]]
     base_score = 1 if len(players) < 6 else 1
     res = tuple(zip(players, [True if line[-1] == "贏" else False
                               for line in event.raw_text.split("\n\n\n")[0].split("\n")]))
     results = {"won": [p[0] for p in res if p[1]], "lost": [p[0] for p in res if not p[1]]}
     to_send = f"呢場狼人玩完咗啦。\n\n呢局有{len(players)}個玩家,你哋每人至少會獲得{base_score}參與分。"
Пример #25
0
    def get_entity_rows_by_id(self, key, exact=True):
        if exact:
            row = models.Entity.objects.filter(id=key).first()
        else:
            ids = (utils.get_peer_id(PeerUser(key)),
                   utils.get_peer_id(PeerChat(key)),
                   utils.get_peer_id(PeerChannel(key)))
            row = models.Entity.objects.filter(id__in=ids).first()

        return (row.id, row.hash) if row else None
Пример #26
0
def effective_chat_id(update):
    if update.CONSTRUCTOR_ID == 0x914fbf11:
        return (update.user_id, PeerUser(update.user_id))
    elif update.CONSTRUCTOR_ID == 0x16812688:
        return (update.chat_id, PeerChat(update.chat_id))
    else:
        return (update.message.to_id.channel_id, update.message.to_id)



			
Пример #27
0
    def get_entity_rows_by_id(self, key, exact=True):
        if exact:
            query = self._db_query(self.Entity, self.Entity.id == key)
        else:
            ids = (utils.get_peer_id(PeerUser(key)),
                   utils.get_peer_id(PeerChat(key)),
                   utils.get_peer_id(PeerChannel(key)))
            query = self._db_query(self.Entity, self.Entity.id in ids)

        row = query.one_or_none()
        return (row.id, row.hash) if row else None
Пример #28
0
 async def get_from_id_param(self, from_id, params):
     if params and (len(params) > 0) and params[0]:
         try:
             entity = await self.tg_bot_controller.tg_client.get_entity(str(params[0]).strip())
         except ValueError:
             try:
                 entity = await self.tg_bot_controller.tg_client.get_entity(PeerUser(int(params[0])))
             except:
                 entity = None
         if type(entity) == User:
             from_id = entity.id
     return from_id
Пример #29
0
    async def _add_telegram_user(self, user_id: TelegramID, source: Optional['AbstractUser'] = None
                                 ) -> None:
        puppet = p.Puppet.get(user_id)
        if source:
            entity: User = await source.client.get_entity(PeerUser(user_id))
            await puppet.update_info(source, entity)
            await puppet.intent_for(self).ensure_joined(self.mxid)

        user = u.User.get_by_tgid(user_id)
        if user:
            user.register_portal(self)
            await self.invite_to_matrix(user.mxid)
Пример #30
0
    def get_entity_rows_by_id(self, key: int, exact: bool = True) -> Optional[Tuple[int, int]]:
        if exact:
            query = self._db_query(self.Entity, self.Entity.id == key)
        else:
            ids = (
                utils.get_peer_id(PeerUser(key)),
                utils.get_peer_id(PeerChat(key)),
                utils.get_peer_id(PeerChannel(key))
            )
            query = self._db_query(self.Entity, self.Entity.id.in_(ids))

        row = query.one_or_none()
        return (row.id, row.hash) if row else None