TypeError:get_updates()缺少1个必需的位置参数:“ self”

时间:2019-05-15 12:12:26

标签: python api bots telegram

我正在尝试构建python电报bot,但我一直收到此错误,并且无法找到错误的来源... 详细信息:

我的课:

class weed4us_bot():
    def __init__(self, config):
        self.token = self.read_token_from_config_file(config)
        self.base = 'https://api.telegram.org/bot{}/'.format(self.token)

    def get_updates(self, offset=None):
        url = self.base + 'getUpdates?timeout=100'
        if offset:
            url = url + '&offset={}'.format(offset + 1)
        r = requests.get(url)
        return json.loads(r.content)

    def send_massage(self, msg, chat_id):
        url = self.base + 'sendMessage?chat_id={}&text={}'.format(chat_id, msg)
        if msg is not None:
            requests.get(url)

def read_token_from_config_file(config):
    parser = cfg.ConfigParser()
    parser.read(config)
    return parser.get('creds', 'token')

我的主文件:

from main_bot import weed4us_bot as bot

update_id = None

def make_reply(msg):
    if msg is not None:
        reply = 'okay'
        return reply


while True:
    print('...')
    updates = bot.get_updates(offset=update_id)
    updates = updates['result']
    if updates:
        for item in updates:
            update_id = item['update_id']
            try:
                message = item['message']['text']
            except:
                message = None
            from_ = item['message']['from']['id']
            reply = make_reply(message)
            bot.send_massage(reply, From_)

而且我不断收到此错误:

  

TypeError:get_updates()缺少1个必需的位置参数:“ self”

有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

get_updates是类weed4us_bot中的方法,因此,如果要调用此方法,则需要在此类的对象上调用它。因此,首先需要创建一个类为obj = weed4us_bot()的对象,然后调用此方法obj.get_updates(offset=update_id)

还有另一种可能的方法来调用此方法:weed4us_bot.get_updates(object, offset=update_id),但仍然需要创建此类的对象。

您的错误发生在此行:updates = bot.get_updates(offset=update_id)。要解决此问题,您可以首先创建weed4us_bot类的对象:bot_object = bot(some_config),然后在对象:bot_object.get_updates(offset=update_id)上调用方法。或将weed4us_bot对象作为自身传递。您可以通过以下方式进行操作:bot.get_updates(bot(some_config), offset=update_id)