code: def augment_bot(self, bot):
          
          # Because a plain object cannot be set attributes, we need a class.
          class BotProxy(object):
              pass
  
          proxy = BotProxy()
  
          send_methods = ['sendMessage',
                          'forwardMessage',
                          'sendPhoto',
                          'sendAudio',
                          'sendDocument',
                          'sendSticker',
                          'sendVideo',
                          'sendVoice',
                          'sendVideoNote',
                          'sendLocation',
                          'sendVenue',
                          'sendContact',
                          'sendGame',
                          'sendInvoice',
                          'sendChatAction',]
  
          for method in send_methods:
              setattr(proxy, method, self.augment_send(getattr(bot, method)))
  
          edit_methods = ['editMessageText',
                          'editMessageCaption',
                          'editMessageReplyMarkup',]
  
          for method in edit_methods:
              setattr(proxy, method, self.augment_edit(getattr(bot, method)))
  
          delete_methods = ['deleteMessage']
  
          for method in delete_methods:
              setattr(proxy, method, self.augment_delete(getattr(bot, method)))
  
          def public_untouched(nv):
              name, value = nv
              return (not name.startswith('_')
                      and name not in send_methods + edit_methods + delete_methods)
  
          for name, value in filter(public_untouched, inspect.getmembers(bot)):
              setattr(proxy, name, value)
  
          return proxy
docs: :return:
              a proxy to ``bot`` with these modifications:
  
              - all ``send*`` methods augmented by :meth:`augment_send`
              - all ``edit*`` methods augmented by :meth:`augment_edit`
              - ``deleteMessage()`` augmented by :meth:`augment_delete`
              - all other public methods, including properties, copied unchanged