Python telegram 模块,TelegramError() 实例源码

我们从Python开源项目中,提取了以下38个代码示例,用于说明如何使用telegram.TelegramError()

项目:mobot    作者:JokerQyou    | 项目源码 | 文件源码
def _check_ssl_cert(self, cert, key):
        # Check SSL-Certificate with openssl, if possible
        try:
            exit_code = subprocess.call(
                ["openssl", "x509", "-text", "-noout", "-in", cert],
                stdout=open(os.devnull, 'wb'),
                stderr=subprocess.STDOUT)
        except OSError:
            exit_code = 0
        if exit_code is 0:
            try:
                self.httpd.socket = ssl.wrap_socket(
                    self.httpd.socket, certfile=cert, keyfile=key, server_side=True)
            except ssl.SSLError as error:
                self.logger.exception('Failed to init SSL socket')
                raise TelegramError(str(error))
        else:
            raise TelegramError('SSL Certificate invalid')
项目:notipy-server    作者:michaelimfeld    | 项目源码 | 文件源码
def get_telegram_bot():
    """
    Creates a telegram bot instance.

    Returns:
        telegram.Bot: The bot instance.

    Raises:
        TelegramConfigurationError: If the telegram bot was not properly
            configured.
    """
    logger = logging.getLogger()
    try:
        return Bot(Config().telegram_token)
    except (FileNotFoundError, ValueError, TelegramError) as exc:
        logger.error("Telegram token not present or invalid: '%s'", str(exc))
        raise TelegramConfigurationError("Telegram token not "
                                         "present or invalid.")
项目:UnivaqBot    作者:giacomocerquone    | 项目源码 | 文件源码
def botupdated_message(bot, job):
    """
    Defining a command to notify the user and tell them what updates have been released
    It is called at every execution ONLY if there are documents in a specific db collection
    """

    messages = list(DATABASE.messages.find())
    DATABASE.messages.remove()

    invalid_chatid = []

    for message in messages:
        for chat_id in USERS['telegramID']:
            try:
                bot.sendMessage(chat_id, parse_mode='HTML',
                                text=message['text'])
            except TelegramError:
                invalid_chatid.append(chat_id)

    for chat_id in invalid_chatid:
        USERS['telegramID'].remove(chat_id)
        unsubscribe_user(chat_id, 'telegramID')
项目:ptbtest    作者:Eldinnie    | 项目源码 | 文件源码
def test_editMessageCaption(self):
        self.mockbot.editMessageCaption(chat_id=12, message_id=23)

        data = self.mockbot.sent_messages[-1]
        self.assertEqual(data['method'], "editMessageCaption")
        self.assertEqual(data['chat_id'], 12)
        self.mockbot.editMessageCaption(
            inline_message_id=23, caption="new cap", photo=True)
        data = self.mockbot.sent_messages[-1]
        self.assertEqual(data['method'], "editMessageCaption")
        with self.assertRaises(TelegramError):
            self.mockbot.editMessageCaption()
        with self.assertRaises(TelegramError):
            self.mockbot.editMessageCaption(chat_id=12)
        with self.assertRaises(TelegramError):
            self.mockbot.editMessageCaption(message_id=12)
项目:ZloyBot    作者:Djaler    | 项目源码 | 文件源码
def process_update(obj, update):
    if isinstance(update, TelegramError):
        obj.dispatch_error(None, update)

    else:
        for group in obj.groups:
            for handler in obj.handlers[group]:
                try:
                    if handler.check_update(update):
                        handler.handle_update(update, obj)
                except Exception as e:
                    try:
                        obj.dispatch_error(update, e)
                    except Exception:
                        obj.logger.exception(
                            'An uncaught error was raised while '
                            'handling the error')
项目:TelegramBots    作者:d-qoi    | 项目源码 | 文件源码
def updateChatList(bot, job):
    logger.debug("-----------------------updatedChatList--------------------")
    logger.info("Updating the chat list")
    results = mDatabase.groups.find()
    for doc in results:
        try:
            chat = bot.getChat(chat_id = doc['_id'])
            logger.info("Chat %s (%s) responded." % (chat.title, chat.id))
            mDatabase.groups.find_one_and_update({'_id':doc['_id']},
                                           { '$set' : {'title':chat.title}})
        except TelegramError:
            logger.info("Not yet removing %s (%s) from the database, it is not responding" % (doc['title'],doc['_id']))
            #mDatabase.groups.remove({'_id':doc['_id']})

        except:
            logger.info("Other error when checking %s (%s), check networking" % (doc['title'],doc['_id']))
项目:TelegramBots    作者:d-qoi    | 项目源码 | 文件源码
def updateChatList(bot, job):
    logger.debug("-----------------------updatedChatList--------------------")
    logger.info("Updating the chat list")
    results = MDB.groups.find()
    for doc in results:
        try:
            chat = bot.getChat(chat_id = doc['_id'])
            logger.info("Chat %s (%s) responded." % (chat.title, chat.id))
            admins = [chatmember.user.id for chatmember in bot.getChatAdministrators(chat_id=doc['_id'])]
            MDB.groups.find_one_and_update({'_id':doc['_id']},
                                           { '$set' : {'title':chat.title, "admins":admins}})
        except TelegramError as te:
            logger.warning("Removing %s (%s) from the database, it is not responding, re-add the bot if this is incorrect." % (doc['title'],doc['_id']))
            logger.debug("Error received: %s" % (str(te)))
            MDB.groups.remove({'_id':doc['_id']})

        except:
            logger.info("Other error when checking %s (%s), check networking" % (doc['title'],doc['_id']))
项目:InLaTeXbot    作者:vdrhtc    | 项目源码 | 文件源码
def respondToMessageQuery(self, message):
        senderId = message.from_user.id
        chatId = message.chat.id
        messageId = message.message_id
        expression = message.text

        errorMessage = None
        try:
            imageStream, pdfStream = self._latexConverter.convertExpressionToPng(expression, senderId, str(messageId)+str(senderId), returnPdf=True)
            self._bot.sendDocument(chatId, pdfStream, filename="expression.pdf")
            self._bot.sendPhoto(chatId, imageStream)
        except ValueError as err:
            errorMessage = self.getWrongSyntaxResult(expression, err.args[0])
        except TelegramError as err:
            errorMessage = self._resourceManager.getString("telegram_error")+str(err)
            self.logger.warn(errorMessage)
        finally:
            if not errorMessage is None:
                self._bot.sendMessage(chatId, errorMessage)
            self.logger.debug("Answered to message from %d, chatId %d, expression: %s", 
                                                        senderId, chatId, expression)
项目:deluge-telegramer    作者:noam09    | 项目源码 | 文件源码
def _check_ssl_cert(self, cert, key):
        # Check SSL-Certificate with openssl, if possible
        try:
            exit_code = subprocess.call(
                ["openssl", "x509", "-text", "-noout", "-in", cert],
                stdout=open(os.devnull, 'wb'),
                stderr=subprocess.STDOUT)
        except OSError:
            exit_code = 0
        if exit_code is 0:
            try:
                self.httpd.socket = ssl.wrap_socket(
                    self.httpd.socket, certfile=cert, keyfile=key, server_side=True)
            except ssl.SSLError as error:
                self.logger.exception('Failed to init SSL socket')
                raise TelegramError(str(error))
        else:
            raise TelegramError('SSL Certificate invalid')
项目:sonarr_telegram_bridge    作者:tsnoam    | 项目源码 | 文件源码
def send_tg(self, msg: str):
        for i in self.chat_ids:
            attempt = 1
            sleep_tm = 1
            while 1:
                try:
                    self.bot.sendMessage(i, msg, parse_mode='Markdown')

                except telegram.error.NetworkError:
                    self._logger.warning(
                        'telegram servers in trouble; attempt={} sleep={}'.format(
                            attempt, sleep_tm))
                    time.sleep(sleep_tm)
                    attempt += 1
                    if sleep_tm < 60:
                        sleep_tm *= 2
                    continue

                except telegram.TelegramError:
                    self._logger.exception('failed sending telegram')

                break
项目:py_mbot    作者:evgfilim1    | 项目源码 | 文件源码
def delete_message(self, chat=None, message_id=None, message=None):
        """Deletes message

        Args:
            chat(Optional[int|str]): chat ID or '@channel_name'
            message_id(Optional[int]): ID of message to be deleted
            message(Optional[:class:`telegram.Message`]): message to be deleted

        Returns:
            bool: ``True`` on success, ``False`` otherwise

        Raises:
            ValueError: if ``chat``, ``message_id`` and ``message`` are ``None``

        """
        if (chat is None or message_id is None) and message is None:
            raise ValueError('Either `chat` and `message_id` or `message` must be given')
        if message is not None:
            chat = message.chat_id
            message_id = message.message_id

        try:
            return self._bot.delete_message(chat, message_id)
        except TelegramError as e:
            logger.exception('Exception was raised while deleting message', exc_info=e)
            return False
项目:py_mbot    作者:evgfilim1    | 项目源码 | 文件源码
def ban_member(self, chat, user_id=None, user=None):
        """Bans chat member

        Args:
            chat(int|str): chat ID or '@channel_name'
            user_id(Optional[int]): user ID to be banned
            user(Optional[:class:`telegram.User`]): user to be banned

        Returns:
            bool: ``True`` on success, ``False`` otherwise

        Raises:
            ValueError: if both ``user_id`` and ``user`` were (not) given

        """
        if (user_id is None and user is None) or (user_id is not None and user is not None):
            raise ValueError('Either `user_id` or `user` must be given')
        if user is not None:
            user_id = user.id

        try:
            self._bot.kick_chat_member(chat, user_id)
        except TelegramError as e:
            logger.exception('Exception was raised while kicking member', exc_info=e)
            return False
        return True
项目:py_mbot    作者:evgfilim1    | 项目源码 | 文件源码
def unban_member(self, chat, user_id=None, user=None):
        """Unbans chat member

        Args:
            chat(int|str): chat ID or '@channel_name'
            user_id(Optional[int]): user ID to be unbanned
            user(Optional[:class:`telegram.User`]): user to be unbanned

        Returns:
            bool: ``True`` on success, ``False`` otherwise

        Raises:
            ValueError: if both ``user_id`` and ``user`` were (not) given

        """
        if (user_id is None and user is None) or (user_id is not None and user is not None):
            raise ValueError('Either `user_id` or `user` must be given')
        if user is not None:
            user_id = user.id

        try:
            self._bot.unban_chat_member(chat, user_id)
        except TelegramError as e:
            logger.exception('Exception was raised while unbanning member', exc_info=e)
            return False
        return True
项目:mobot    作者:JokerQyou    | 项目源码 | 文件源码
def is_image(stream):
        """Check if the content file is an image by analyzing its headers.

        Args:
            stream (str): A str representing the content of a file.

        Returns:
            str: The str mimetype of an image.
        """
        image = imghdr.what(None, stream)
        if image:
            return 'image/%s' % image

        raise TelegramError('Could not parse file content')
项目:mobot    作者:JokerQyou    | 项目源码 | 文件源码
def _bootstrap(self, max_retries, clean, webhook_url, allowed_updates, cert=None):
        retries = 0
        while 1:

            try:
                if clean:
                    # Disable webhook for cleaning
                    self.bot.deleteWebhook()
                    self._clean_updates()
                    sleep(1)

                self.bot.setWebhook(
                    url=webhook_url, certificate=cert, allowed_updates=allowed_updates)
            except (Unauthorized, InvalidToken):
                raise
            except TelegramError:
                msg = 'error in bootstrap phase; try={0} max_retries={1}'.format(retries,
                                                                                 max_retries)
                if max_retries < 0 or retries < max_retries:
                    self.logger.warning(msg)
                    retries += 1
                else:
                    self.logger.exception(msg)
                    raise
            else:
                break
            sleep(1)
项目:mobot    作者:JokerQyou    | 项目源码 | 文件源码
def process_update(self, update):
        """
        Processes a single update.

        Args:
            update (object):
        """

        # An error happened while polling
        if isinstance(update, TelegramError):
            self.dispatch_error(None, update)

        else:
            for group in self.groups:
                for handler in self.handlers[group]:
                    try:
                        if handler.check_update(update):
                            handler.handle_update(update, self)
                            break
                    # Dispatch any errors
                    except TelegramError as te:
                        self.logger.warn('A TelegramError was raised while processing the '
                                         'Update.')

                        try:
                            self.dispatch_error(update, te)
                        except Exception:
                            self.logger.exception('An uncaught error was raised while '
                                                  'handling the error')
                        finally:
                            break

                    # Errors should not stop the thread
                    except Exception:
                        self.logger.exception('An uncaught error was raised while '
                                              'processing the update')
                        break
项目:mobot    作者:JokerQyou    | 项目源码 | 文件源码
def add_error_handler(self, callback):
        """
        Registers an error handler in the Dispatcher.

        Args:
            handler (function): A function that takes ``Bot, Update,
                TelegramError`` as arguments.
        """

        self.error_handlers.append(callback)
项目:mobot    作者:JokerQyou    | 项目源码 | 文件源码
def dispatch_error(self, update, error):
        """
        Dispatches an error.

        Args:
            update (object): The update that caused the error
            error (telegram.TelegramError): The Telegram error that was raised.
        """

        for callback in self.error_handlers:
            callback(self.bot, update, error)
项目:vk-channelify    作者:reo7sp    | 项目源码 | 文件源码
def filter_by_hashtag(bot, update, db, users_state):
    user_id = update.message.from_user.id

    users_state[user_id] = dict()
    users_state[user_id]['channels'] = dict()
    keyboard = []
    keyboard_row = []
    for channel in db.query(Channel).filter(Channel.owner_id == str(user_id)).order_by(Channel.created_at.desc()):
        try:
            channel_chat = bot.get_chat(chat_id=channel.channel_id)
            users_state[user_id]['channels'][channel_chat.title] = channel.channel_id
            keyboard_row.append(channel_chat.title)
            if len(keyboard_row) == 2:
                keyboard.append(keyboard_row)
                keyboard_row = []
        except telegram.TelegramError:
            logger.warning('filter_by_hashtag: cannot get title of channel {}'.format(channel.channel_id))
            traceback.print_exc()
    if len(keyboard_row) != 0:
        keyboard.append(keyboard_row)

    update.message.reply_text('???????? ?????', reply_markup=ReplyKeyboardMarkup(keyboard, one_time_keyboard=True))
    return ASKED_CHANNEL_ID_IN_FILTER_BY_HASHTAG
项目:ptbtest    作者:Eldinnie    | 项目源码 | 文件源码
def test_editMessageReplyMarkup(self):
        self.mockbot.editMessageReplyMarkup(chat_id=1, message_id=1)
        data = self.mockbot.sent_messages[-1]
        self.assertEqual(data['method'], "editMessageReplyMarkup")
        self.assertEqual(data['chat_id'], 1)
        self.mockbot.editMessageReplyMarkup(inline_message_id=1)
        data = self.mockbot.sent_messages[-1]
        self.assertEqual(data['method'], "editMessageReplyMarkup")
        self.assertEqual(data['inline_message_id'], 1)
        with self.assertRaises(TelegramError):
            self.mockbot.editMessageReplyMarkup()
        with self.assertRaises(TelegramError):
            self.mockbot.editMessageReplyMarkup(chat_id=12)
        with self.assertRaises(TelegramError):
            self.mockbot.editMessageReplyMarkup(message_id=12)
项目:tgbot    作者:PaulSonOfLars    | 项目源码 | 文件源码
def broadcast(bot, update):
    to_send = update.effective_message.text.split(None, 1)
    if len(to_send) >= 2:
        chats = sql.get_all_chats() or []
        for chat in chats:
            try:
                bot.sendMessage(int(chat.chat_id), to_send[1])
                sleep(0.1)
            except TelegramError:
                print("Couldn't send broadcast to {}, group name {}".format(chat.chat_id, chat.chat_name),
                      file=sys.stderr)
项目:TelegramBots    作者:d-qoi    | 项目源码 | 文件源码
def registerMe(bot, update):
    if not checkValidCommand(update.message.text, bot.username):
        return

    if not checkTypeGroup(update):
        update.message.reply_text("This only works in groups the bot is in. If you would like to add the bot to a group, do so and then send /registerme")
        return

    #userDict = createUserDict(update.message.from_user)
    userDict = update.message.from_user.id
    logger.debug("New User: %s" % str(userDict))
    mDatabase.groups.update({'_id':update.message.chat.id},
                            {'$addToSet':{'users':userDict},
                             '$set':{'title':update.message.chat.title}},
                            upsert=True)

    logger.info("Register Me called for %s (%s)" % (update.message.chat.title, update.message.chat.id))
    keyboard = [[InlineKeyboardButton("Register Me!", 
                                      callback_data="RegisterMe")]]
    markup = InlineKeyboardMarkup(keyboard)
    reply_text = "If you would like to register with this bot for this group, send /registerme, or click the button below."
    try:
        bot.sendMessage(chat_id = update.message.chat.id,
                        text = reply_text,
                        reply_markup = markup)
    except TelegramError as TE:
        logger.error("Caught this from registerMe: %s" % str(TE))
项目:TelegramBots    作者:d-qoi    | 项目源码 | 文件源码
def forwardToAll(bot, list_of_chats, from_chat_id, message_id):
    logger.debug("List of chats to forward a message to: %s" % list_of_chats)

    if not list_of_chats: #If there are no chats to foward to.
        return

    for chat in list_of_chats:
        try:
            bot.forward_message(chat_id=chat,
                                from_chat_id=from_chat_id,
                                message_id=message_id)
        except TelegramError as te:
            logger.debug("Unable to send message to %s from %s. May want to remove it, or resolve the thread." %(chat, from_chat_id))
            logger.debug("Error from forward to all: %s" % te)
项目:TelegramBots    作者:d-qoi    | 项目源码 | 文件源码
def alertAdmins(bot, username):
    admins = []
    logger.debug('alerting admins:')
    for group in MDB.groups.find():
        logger.debug("Admins in group %s: %s" %(group['title'], group['admins']))
        admins += group['admins']
    admins = set(admins)
    for admin in admins:
        try:
            bot.send_message(chat_id=admin,
                            text="%s is sending feedback, send /cancel to select and respond to them." % username)
        except TelegramError as te:
            logger.debug("Not all admins are interacting with the bot.")
            logger.debug("Error in alert Admins: %s" % te)
项目:deluge-telegramer    作者:noam09    | 项目源码 | 文件源码
def _bootstrap(self, max_retries, clean, webhook_url, allowed_updates, cert=None):
        retries = 0
        while 1:

            try:
                if clean:
                    # Disable webhook for cleaning
                    self.bot.delete_webhook()
                    self._clean_updates()
                    sleep(1)

                self.bot.set_webhook(
                    url=webhook_url, certificate=cert, allowed_updates=allowed_updates)
            except (Unauthorized, InvalidToken):
                raise
            except TelegramError:
                msg = 'error in bootstrap phase; try={0} max_retries={1}'.format(retries,
                                                                                 max_retries)
                if max_retries < 0 or retries < max_retries:
                    self.logger.warning(msg)
                    retries += 1
                else:
                    self.logger.exception(msg)
                    raise
            else:
                break
            sleep(1)
项目:deluge-telegramer    作者:noam09    | 项目源码 | 文件源码
def start(self):
        """Thread target of thread 'dispatcher'.

        Runs in background and processes the update queue.

        """
        if self.running:
            self.logger.warning('already running')
            return

        if self.__exception_event.is_set():
            msg = 'reusing dispatcher after exception event is forbidden'
            self.logger.error(msg)
            raise TelegramError(msg)

        self._init_async_threads(uuid4(), self.workers)
        self.running = True
        self.logger.debug('Dispatcher started')

        while 1:
            try:
                # Pop update from update queue.
                update = self.update_queue.get(True, 1)
            except Empty:
                if self.__stop_event.is_set():
                    self.logger.debug('orderly stopping')
                    break
                elif self.__exception_event.is_set():
                    self.logger.critical('stopping due to exception in another thread')
                    break
                continue

            self.logger.debug('Processing Update: %s' % update)
            self.process_update(update)

        self.running = False
        self.logger.debug('Dispatcher thread stopped')
项目:deluge-telegramer    作者:noam09    | 项目源码 | 文件源码
def dispatch_error(self, update, error):
        """Dispatches an error.

        Args:
            update (:obj:`str` | :class:`telegram.Update` | None): The update that caused the error
            error (:class:`telegram.TelegramError`): The Telegram error that was raised.

        """
        for callback in self.error_handlers:
            callback(self.bot, update, error)
项目:deluge-telegramer    作者:noam09    | 项目源码 | 文件源码
def __init__(self, data):
        self.data = data
        self.boundary = choose_boundary()

        for t in FILE_TYPES:
            if t in data:
                self.input_name = t
                self.input_file = data.pop(t)
                break
        else:
            raise TelegramError('Unknown inputfile type')

        if hasattr(self.input_file, 'read'):
            self.filename = None
            self.input_file_content = self.input_file.read()
            if 'filename' in data:
                self.filename = self.data.pop('filename')
            elif hasattr(self.input_file, 'name'):
                # on py2.7, pylint fails to understand this properly
                # pylint: disable=E1101
                self.filename = os.path.basename(self.input_file.name)

            try:
                self.mimetype = self.is_image(self.input_file_content)
                if not self.filename or '.' not in self.filename:
                    self.filename = self.mimetype.replace('/', '.')
            except TelegramError:
                if self.filename:
                    self.mimetype = mimetypes.guess_type(
                        self.filename)[0] or DEFAULT_MIME_TYPE
                else:
                    self.mimetype = DEFAULT_MIME_TYPE
项目:deluge-telegramer    作者:noam09    | 项目源码 | 文件源码
def is_image(stream):
        """Check if the content file is an image by analyzing its headers.

        Args:
            stream (:obj:`str`): A str representing the content of a file.

        Returns:
            :obj:`str`: The str mime-type of an image.

        """
        image = imghdr.what(None, stream)
        if image:
            return 'image/%s' % image

        raise TelegramError('Could not parse file content')
项目:py_mbot    作者:evgfilim1    | 项目源码 | 文件源码
def send_text_message(self, chat, text, markdown=False, html=False, reply_to=None,
                          force_reply_to=False, **kwargs):
        """Sends message

        Notes:
            For now, this method supports only sending message with markdown or HTML parsing

        Args:
            chat(int|str): chat ID or '@channel_name'
            text(str): text to send
            markdown(Optional[bool]): parse text as markdown
            html(Optional[bool]): parse text as html
            reply_to(Optional[int]): ID of message to reply to
            force_reply_to(Optional[bool]): Replies to message even in private chats

        Returns:
            int|bool: message_id if message was sent, ``False`` otherwise

        Raises:
            ValueError: if ``markdown`` and ``html`` are both ``True``

        """
        if markdown and html:
            raise ValueError('`markdown` and `html` are self-exclusive')

        if markdown:
            parse_mode = ParseMode.MARKDOWN
        elif html:
            parse_mode = ParseMode.HTML
        else:
            parse_mode = None

        if reply_to and self.is_private_chat(chat) and not force_reply_to:
            reply_to = None

        try:
            msg = self._bot.send_message(chat, text, parse_mode=parse_mode,
                                         reply_to_message_id=reply_to, **kwargs)
        except TelegramError as e:
            logger.exception('Exception was raised while sending message', exc_info=e)
            return False
        return msg.message_id
项目:mobot    作者:JokerQyou    | 项目源码 | 文件源码
def __init__(self, data):
        self.data = data
        self.boundary = choose_boundary()

        if 'audio' in data:
            self.input_name = 'audio'
            self.input_file = data.pop('audio')
        elif 'document' in data:
            self.input_name = 'document'
            self.input_file = data.pop('document')
        elif 'photo' in data:
            self.input_name = 'photo'
            self.input_file = data.pop('photo')
        elif 'sticker' in data:
            self.input_name = 'sticker'
            self.input_file = data.pop('sticker')
        elif 'video' in data:
            self.input_name = 'video'
            self.input_file = data.pop('video')
        elif 'voice' in data:
            self.input_name = 'voice'
            self.input_file = data.pop('voice')
        elif 'certificate' in data:
            self.input_name = 'certificate'
            self.input_file = data.pop('certificate')
        else:
            raise TelegramError('Unknown inputfile type')

        if hasattr(self.input_file, 'read'):
            self.filename = None
            self.input_file_content = self.input_file.read()
            if 'filename' in data:
                self.filename = self.data.pop('filename')
            elif hasattr(self.input_file, 'name'):
                # on py2.7, pylint fails to understand this properly
                # pylint: disable=E1101
                self.filename = os.path.basename(self.input_file.name)

            try:
                self.mimetype = self.is_image(self.input_file_content)
                if not self.filename or '.' not in self.filename:
                    self.filename = self.mimetype.replace('/', '.')
            except TelegramError:
                self.mimetype = mimetypes.guess_type(self.filename)[0] or DEFAULT_MIME_TYPE
项目:mobot    作者:JokerQyou    | 项目源码 | 文件源码
def _start_polling(self, poll_interval, timeout, read_latency, bootstrap_retries, clean,
                       allowed_updates):
        """
        Thread target of thread 'updater'. Runs in background, pulls
        updates from Telegram and inserts them in the update queue of the
        Dispatcher.

        """
        cur_interval = poll_interval
        self.logger.debug('Updater thread started')

        self._bootstrap(bootstrap_retries, clean=clean, webhook_url='', allowed_updates=None)

        while self.running:
            try:
                updates = self.bot.getUpdates(
                    self.last_update_id,
                    timeout=timeout,
                    read_latency=read_latency,
                    allowed_updates=allowed_updates)
            except RetryAfter as e:
                self.logger.info(str(e))
                cur_interval = 0.5 + e.retry_after
            except TelegramError as te:
                self.logger.error("Error while getting Updates: {0}".format(te))

                # Put the error into the update queue and let the Dispatcher
                # broadcast it
                self.update_queue.put(te)

                cur_interval = self._increase_poll_interval(cur_interval)
            else:
                if not self.running:
                    if len(updates) > 0:
                        self.logger.debug('Updates ignored and will be pulled '
                                          'again on restart.')
                    break

                if updates:
                    for update in updates:
                        self.update_queue.put(update)
                    self.last_update_id = updates[-1].update_id + 1

                cur_interval = poll_interval

            sleep(cur_interval)
项目:teamSpeakTelegram    作者:jossalgon    | 项目源码 | 文件源码
def assign_user_alias_step2(bot, update, chat_data):
    message = update.effective_message
    chat_id = update.effective_chat.id
    markup = []

    first_message = bool(update.message)
    page = chat_data[message.message_id]['pages'] if not first_message else 1

    user_ids = get_user_ids()

    start = 10 * (page - 1) if page > 1 else 0
    end = start + 10 if start + 10 < len(user_ids) else len(user_ids)
    for i in range(start, end, 2):
        j = i + 1
        try:
            user1 = bot.get_chat_member(chat_id=user_ids[i], user_id=user_ids[i]).user
            username1 = '@' + user1.username if user1.username else user1.first_name
        except TelegramError:
            username1 = 'ID: ' + str(user_ids[i])
        row = [InlineKeyboardButton(username1, callback_data='USER_ALIAS_%s' % str(user_ids[i]))]
        if j < len(user_ids):
            try:
                user2 = bot.get_chat_member(chat_id=user_ids[j], user_id=user_ids[j]).user
                username2 = '@' + user2.username if user2.username else user2.first_name
            except TelegramError:
                username2 = 'ID: ' + str(user_ids[j])
            row.append(InlineKeyboardButton(username2, callback_data='USER_ALIAS_%s' % str(user_ids[j])))
        markup.append(row)

    markup = markup_append_pagination(bot, update, user_ids, markup, page, 'USER_ALIAS')
    markup.append([InlineKeyboardButton('?? ' + _('Skip'), callback_data='USER_ALIAS_%s' % str(0))])

    reply_markup = InlineKeyboardMarkup(markup)
    text = '?? ' + _('Ok, is this user on Telegram?')

    if not first_message:
        msg = bot.edit_message_text(text, chat_id=chat_id, message_id=message.message_id, reply_markup=reply_markup,
                                    parse_mode='Markdown')
    elif len(user_ids) == 0:
        msg = bot.send_message(chat_id, _('No results'))
    else:
        msg = bot.send_message(chat_id, text, disable_notification=True, reply_markup=reply_markup,
                               parse_mode='Markdown')
        chat_data[msg.message_id] = dict()
        chat_data[msg.message_id]['pages'] = page

    if message.reply_to_message:
        cldbid = chat_data['alias_cldbid'][str(message.reply_to_message.message_id)][1]
        del chat_data['alias_cldbid'][str(message.reply_to_message.message_id)]
        bot.delete_message(chat_id=chat_id, message_id=message.reply_to_message.message_id)
        chat_data['alias_cldbid'][str(msg.message_id)] = message.text, cldbid
项目:UnivaqBot    作者:giacomocerquone    | 项目源码 | 文件源码
def notify_news(bot, job):
    """Defining method that will be repeated over and over"""

    translation = {
        'disim': 'Disim',
        'univaq': 'Univaq',
        'discab_general': 'Discab',
        'discab_biotechnology': 'Biotecnologie',
        'discab_medical': 'Discab Medicina',
        'discab_motor_science': 'Scienze Motorie',
        'discab_psychology': 'Psicologia',
        'mesva_general': 'Mesva',
        'mesva_medical': 'Mesva Medicina',
        'mesva_environmental_science': 'Scienze Ambientali',
        'mesva_biological_science': 'Scienze Biologiche'
    }

    checked = check_news()
    unread_news = checked['unread_news']
    pulled_news = checked['pulled_news']
    invalid_chatid = []

    for section in unread_news:
        if unread_news[section]:
            news_to_string = "<b>"+translation[section]+"</b>\n\n"

            utils.NEWS = pulled_news
            utils.store_news(pulled_news)

            for item in unread_news[section]:
                news_to_string += ('- <a href="{link}">{title}</a>\n'
                                   '\t<i>{description}</i>\n\n').format(**item)

            for chat_id in utils.USERS[section]:
                try:
                    bot.sendMessage(chat_id, parse_mode='HTML', disable_web_page_preview=True,
                                    text=news_to_string)
                except TelegramError:
                    invalid_chatid.append(chat_id)

            for chat_id in invalid_chatid:
                utils.USERS[section].remove(chat_id)
                utils.unsubscribe_user(chat_id, section)
项目:tgbot    作者:PaulSonOfLars    | 项目源码 | 文件源码
def lock(bot, update, args):
    chat = update.effective_chat
    message = update.effective_message
    if can_delete(chat, bot.id):
        if len(args) >= 1:
            if args[0] in LOCK_TYPES:
                sql.update_lock(chat.id, args[0], locked=True)
                message.reply_text("Locked {} messages for all non-admins!".format(args[0]))

            elif args[0] in RESTRICTION_TYPES:
                sql.update_restriction(chat.id, args[0], locked=True)
                message.reply_text("locked {}".format(args[0]))
                members = users_sql.get_chat_members(chat.id)
                if args[0] == "messages":
                    for mem in members:
                        try:
                            bot.restrict_chat_member(chat.id, mem.user,
                                                     can_send_messages=True)
                        except TelegramError:
                            pass
                elif args[0] == "media":
                    for mem in members:
                        try:
                            bot.restrict_chat_member(chat.id, mem.user,
                                                     can_send_messages=True,
                                                     can_send_media_messages=True)
                        except TelegramError:
                            pass
                elif args[0] == "other":
                    for mem in members:
                        try:
                            bot.restrict_chat_member(chat.id, mem.user,
                                                     can_send_messages=True,
                                                     can_send_media_messages=True,
                                                     can_send_other_messages=True)
                        except TelegramError:
                            pass
                elif args[0] == "previews":
                    for mem in members:
                        try:
                            bot.restrict_chat_member(chat.id, mem.user,
                                                     can_send_messages=True,
                                                     can_send_media_messages=True,
                                                     can_add_web_page_previews=True)
                        except TelegramError:
                            pass

    else:
        message.reply_text("I'm not an administrator, or haven't got delete rights.")
项目:HashDigestBot    作者:wagnerluis1982    | 项目源码 | 文件源码
def config(token, db_url, op_name, values):
        operation, name = op_name

        try:
            digestbot = hdbot.HDBot(token, db_url)
            cfg = digestbot.get_config()
            logging.info("Using configuration at %s", db_url)
        except Exception as e:
            raise CLIError(e)

        with contextlib.closing(digestbot):
            if operation == '--add' and name == 'chat':
                # validation
                if len(values) < 2:
                    raise CLIError("Not enough arguments for --add chat")

                # get values
                name = values[0]
                email = values[1]
                # validations
                util.validate_username(name, exception=CLIError)
                util.validate_email_address(email, exception=CLIError)

                # get extra values if provided
                try:
                    extra = dict(v.split('=') for v in values[2:])
                except ValueError:
                    raise CLIError("Bad format in extra values for --add chat")

                # ensure the format @groupname
                name = '@'+name if name[0] != '@' else name

                # get chat_id
                try:
                    tgchat = digestbot.get_chat(name)
                except TelegramError:
                    raise CLIError("chat '%s' not found" % name)

                # add this chat to the config database
                try:
                    if cfg.has_chat(tgchat.id):
                        if confirm("Chat %s already in config, you are about to update it.\n"
                                   "Do you want to continue?" % name, default=True):
                            whatdone = 'updated'
                        else:
                            raise CLIError("Configuration aborted by user")
                    else:
                        whatdone = 'added'
                    cfg.add_chat(chat_id=tgchat.id, name=name[1:], sendto=email, **extra)
                    print("config: chat %s was %s" % (name, whatdone))
                except TypeError as e:
                    raise CLIError(e)
项目:deluge-telegramer    作者:noam09    | 项目源码 | 文件源码
def _start_polling(self, poll_interval, timeout, read_latency, bootstrap_retries, clean,
                       allowed_updates):
        # """
        # Thread target of thread 'updater'. Runs in background, pulls
        # updates from Telegram and inserts them in the update queue of the
        # Dispatcher.
        # """

        cur_interval = poll_interval
        self.logger.debug('Updater thread started')

        self._bootstrap(bootstrap_retries, clean=clean, webhook_url='', allowed_updates=None)

        while self.running:
            try:
                updates = self.bot.get_updates(
                    self.last_update_id,
                    timeout=timeout,
                    read_latency=read_latency,
                    allowed_updates=allowed_updates)
            except RetryAfter as e:
                self.logger.info(str(e))
                cur_interval = 0.5 + e.retry_after
            except TelegramError as te:
                self.logger.error("Error while getting Updates: {0}".format(te))

                # Put the error into the update queue and let the Dispatcher
                # broadcast it
                self.update_queue.put(te)

                cur_interval = self._increase_poll_interval(cur_interval)
            else:
                if not self.running:
                    if len(updates) > 0:
                        self.logger.debug('Updates ignored and will be pulled '
                                          'again on restart.')
                    break

                if updates:
                    for update in updates:
                        self.update_queue.put(update)
                    self.last_update_id = updates[-1].update_id + 1

                cur_interval = poll_interval

            sleep(cur_interval)
项目:deluge-telegramer    作者:noam09    | 项目源码 | 文件源码
def process_update(self, update):
        """Processes a single update.

        Args:
            update (:obj:`str` | :class:`telegram.Update` | :class:`telegram.TelegramError`):
                The update to process.

        """
        # An error happened while polling
        if isinstance(update, TelegramError):
            try:
                self.dispatch_error(None, update)
            except Exception:
                self.logger.exception('An uncaught error was raised while handling the error')
            return

        for group in self.groups:
            try:
                for handler in (x for x in self.handlers[group] if x.check_update(update)):
                    handler.handle_update(update, self)
                    break

            # Stop processing with any other handler.
            except DispatcherHandlerStop:
                self.logger.debug('Stopping further handlers due to DispatcherHandlerStop')
                break

            # Dispatch any error.
            except TelegramError as te:
                self.logger.warning('A TelegramError was raised while processing the Update')

                try:
                    self.dispatch_error(update, te)
                except DispatcherHandlerStop:
                    self.logger.debug('Error handler stopped further handlers')
                    break
                except Exception:
                    self.logger.exception('An uncaught error was raised while handling the error')

            # Errors should not stop the thread.
            except Exception:
                self.logger.exception('An uncaught error was raised while processing the update')