Python中的fbchat模块 - 无法获取要发送的消息

时间:2018-02-01 02:40:15

标签: python facebook

我正在尝试使用机器人发送Facebook消息。这是我到目前为止的代码。

import fbchat
from fbchat import Client
from fbchat import models

client = Client('my_facebook_username', 'my_facebook_password')

Client.send(message='a', thread_id='tom.dry.18', 
thread_type=models.ThreadType.USER)

这是我收到的错误消息:

Client.send(message='a', thread_id='tom.dry.18', 
thread_type=models.ThreadType.USER)

TypeError: send() missing 1 required positional argument: 'self'

我该怎么办?

1 个答案:

答案 0 :(得分:0)

python是区分大小写的

Client.send(message='a', thread_id='tom.dry.18', thread_type=models.ThreadType.USER)

应该是

client.send(message='a', thread_id='tom.dry.18',  thread_type=models.ThreadType.USER)

不是非常技术性的详细说明:

应该从客户端实例而不是客户端类调用实例方法send

考虑以下示例

class Foo(object):
    def __init__(self, name):
        self.name = name
    def bar(self, greeting):
        print('{} {}!'.format(greeting, self.name))
foo = Foo(name='foo')

foo.bar(greeting='hello')
# prints
hello foo!


Foo.bar(greeting=hello') # this is analogous to your bug
# outputs error traceback
TypeError                                 Traceback (most recent call last)
<ipython-input-9-23d058707a46> in <module>()
----> 1 Foo.bar(greeting='hello')

TypeError: bar() missing 1 required positional argument: 'self'

实例方法中的第一个参数接受一个实例,当从实例调用时,会隐式传递该实例。

例如,在上述玩具问候语申请中

Foo.bar(foo, greeting='hello')
# correctly prints out
hello foo!

当您撰写foo.bar(greeting='hello')时,它等同于Foo.bar(foo, greeting='hello')

第一个参数不必被称为self,尽管这是python中应该遵循的约定。

考虑:

class Foobar(object):
    def __init__(this, name):
        this.name = name
    def bar(me, greeting):
        print('{} {}!'.format(greeting, me.name))

foobar = Foobar('foobar')
foobar.bar(greeting='hello')
# prints
hello foobar
Foobar.bar(foobar, greeting='hello')
# also prints
hello foobar

要避免上述拼写错误,请避免使用仅大小写不同的名称

  • 可能会考虑fb_client而不是client作为Client实例的名称

  • 可能会在整个代码库中强制执行规则,即实例名称不应影响其类名,即foo=Foo('foo')应视为错误