Python을 사용하여 매우 빠르고 쉽게 Facebook 채팅용 봇을 만드는 방법.

설명을 잘 못해서 미안해, 알잖아, 나도 나 자신을 이해못해...ㅋㅋㅋㅋ

좋아, 가능한 한 가장 빠르고 간단하게 하고 싶기 때문에 이 봇을 수행하기 위해 python 모듈fbchat을 사용하고 명령pip으로 설치할 수 있으므로 나와 같은 GnuLinux를 사용하고 패키지 관리자가 적절한 다음 명령이 작동해야 합니다.

sudo apt install python-pip; sudo pip install fbchat

다음은 봇 구축에 필요한 모든 항목을 가져오는 것이므로 첫 번째는 모듈Client과 fbcchat 로그models를 가져온 다음 모듈getpass을 가져옵니다. 로그인해야 하기 때문에 이 모듈이 필요합니다. 봇이 있는 FaceBook, 예, 우리가 로그인한 계정으로 해당 계정의 채팅에서 봇이 실행되고 getpass 모듈이 우리 계정의 암호를 입력하는 쉽고 안전한 방법을 제공합니다.

from fbchat import Client, log
from fbchat.models import *
from getpass import getpass

fbcchat의 클라이언트 클래스에는 listen()onMessage()와 같은 멋진 메서드가 있습니다.
listen()

This method initializes and runs the listening loop continually, this loop start to listen for events, we can define what should be executed or do the bot when certain events happen.


onMessage()

This method is called when the client is listening, and somebody sends a message, cool right?



이벤트 동작은 Client() 를 하위 분류한 다음 이벤트 메서드를 덮어써서 변경할 수 있습니다.

이것은 onMessage() 메서드의 코드입니다.


  def onMessage(self, author_id, message_object, thread_id, thread_type, **kwargs):
        """
        Called when the client is listening, and somebody sends a message

        :param author_id: The ID of the author
        :param message_object: The message (As a `Message` object)
        :param thread_id: Thread ID that the message was sent to. See :ref:`intro_threads`
        :param thread_type: Type of thread that the message was sent to. See :ref:`intro_threads`
        :type message_object: models.Message
        :type thread_type: models.ThreadType
        """
        log.info("{} from {} in {}".format(message_object, thread_id, thread_type.name))

예, 지금은 이 메서드가 아무 작업도 수행하지 않으므로 몇 가지 지침을 사용하여 이 메서드를 수정하겠습니다. 물론 Client() 메서드와 똑같이 작동하는 하위 클래스를 만들고 onMessage() 메서드를 덮어쓰면 추가 지침이 추가됩니다. 메시지 수신 텍스트에 따라 실행됩니다.


from fbchat import log, Client
from fbchat.models import *
from getpass import getpass

class testBot(Client):

    def onMessage(self, author_id, message_object, thread_id, thread_type, **kwargs):
        """
        Called when the client is listening, and somebody sends a message   
        :param author_id: The ID of the author
        :param message_object: The message (As a `Message` object)
        :param thread_id: Thread ID that the message was sent to. See :ref:`intro_threads`
        :param thread_type: Type of thread that the message was sent to. See :ref:`intro_threads`
        :type message_object: models.Message
        :type thread_type: models.ThreadType
        """
        log.info("{} from {} in {}".format(message_object, thread_id, thread_type.name))
        msgText=message_object.text
        msgText.lower()
        if msgText == 'hi' or msgText == "hello":
            self.send(Message(text="Hi my friend"), thread_id=thread_id,thread_type=thread_type )
        elif msgText == 'love':
            self.reactToMessage(message_object.uid, MessageReaction.LOVE)
        elif msgText == 'peace':
            self.reactToMessage(message_object.uid, MessageReaction.HEART)
            self.send(Message(text="First you must have peace in your heart, to give peace to anyone"), thread_id=thread_id, thread_type=thread_type )

client=testBot(raw_input("Insert the email of facebook account"), getpass())
client.listen()

위의 코드에서 우리는 Client() 메서드의 모든 기능을 내재하는 새 클래스를 만들고 있지만 클라이언트가 듣고 메시지를 수신할 때 호출되는 onMessage()를 덮어씁니다.

위의 코드에서 요점을 설명하겠습니다. message_object는 채팅에서 수신하는 적절한 메시지입니다. 객체처럼 보입니다. 예, facebook에서 보내거나 받는 모든 메시지에는 몇 가지atributes가 있습니다. 예, 텍스트뿐만 아니라 메시지에는 다음 속성이 있습니다.

#: The actual message
text = None
#: A list of :class:`Mention` objects
mentions = None
#: A :class:`EmojiSize`. Size of a sent emoji
emoji_size = None
#: The message ID
uid = None
#: ID of the sender
author = None
#: Timestamp of when the message was sent
timestamp = None
#: Whether the message is read
is_read = None
#: A dict with user's IDs as keys, and their :class:`MessageReaction` as values
reactions = None
#: A :class:`Sticker`
sticker = None
#: A list of attachments
attachments = None

따라서 이 부분에서 코드는 수신된 메시지의 텍스트를 변수 msgText에 저장한 다음 메서드lower()를 사용하여 모든 텍스트를 소문자로 변환합니다. 이렇게 하면 문자열을 비교할 때 문제가 발생하지 않습니다.

msgText=message_object.text
msgText.lower()

다음은 텍스트 수신을 기반으로 무언가를 수행하는 조건문입니다.

if msgText == 'hi' or msgText == "hello":
    self.send(Message(text="Hi my friend"), thread_id=thread_id,thread_type=thread_type )
elif msgText == 'love':
    self.reactToMessage(message_object.uid, MessageReaction.LOVE)
elif msgText == 'peace':
    self.reactToMessage(message_object.uid, MessageReaction.HEART)
    self.send(Message(text="First you must have peace in your heart, to give peace to anyone"), thread_id=thread_id, thread_type=thread_type )


메시지 수신 텍스트가 "hi"또는 "hello"인 경우 우리if 문에서 볼 수 있듯이 봇은 메서드send()를 사용하여 "Hi my friend"메시지를 반환합니다. 이 메서드에는 최소한 값이 필요하며 thread_id, 스레드는 두 가지를 참조할 수 있습니다. 메신저 그룹 채팅 또는 단일 Facebook 사용자, 페이스북에서 모든 사용자는 이 부분에 있기 때문에 thread_id와 동일한 고유한 uid를 갖습니다.

self.send(Message(text="Hi my friend"), thread_id=thread_id,thread_type=thread_type )

나는 변수 thread_id를 사용하여 thread_id의 값을 설정합니다. 왜냐하면 우리가 메시지를 받을 때 변수 thread_id는 메시지를 보내는 사람의 thread_id로 설정되기 때문입니다. 이를 통해 봇은 항상 메시지를 보낸 사람에게 메시지에 응답합니다.

다음은 이렇습니다.

elif msgText == 'love':
    self.reactToMessage(message_object.uid, MessageReaction.LOVE)

위의 코드에서 msg 텍스트가 "love"인 경우 우리 봇은 reactToMessage() 메서드를 사용하여 해당 메시지에 반응하여 love 반응을 제공합니다. 모든 메시지 개체에는 고유한 id가 있으므로 message_object.uid는 수신의 id입니다. msg, 메시지 텍스트가 "love"인 경우 우리 봇은 모든 메시지에 대한 사랑 반응으로 반응하므로 다음 코드 부분을 계속 진행하겠습니다.

elif msgText == 'peace':
    self.reactToMessage(message_object.uid, MessageReaction.HEART)
    self.send(Message(text="First you must have peace in your heart, to give peace to anyone"), thread_id=thread_id, thread_type=thread_type )

위의 코드에서 우리 봇은 "먼저 마음에 평화가 있어야 합니다. 누구에게나 평화를 주어야 합니다."라는 텍스트로 수신 메시지에 응답합니다. ".

그리고 마지막으로 이:

client=testBot(raw_input("Insert the email of facebook account"), getpass())
client.listen()

위의 코드는 faceBook에 로그인하고 이벤트를 수신하도록 봇을 배치합니다.

그리고 여기 봇이 작동하고 있습니다....ㅋㅋㅋ...멋지죠?


그래서 이것이 나의 모든 부분입니다. 안녕, 아니무스, 절대 포기하지 말고 계속 노력하세요.

좋은 웹페이지 즐겨찾기