Как я могу l oop пройти через все функции в классе после ответа сервера? - PullRequest
0 голосов
/ 31 марта 2020

Мне нужен способ сделать мой код l oop с помощью функции onMessage() после обнаружения сервером нового сообщения. В настоящее время он отправит ответ один раз, тогда ничего не произойдет.

Если бы я должен был * l0010 * вернуться обратно через функцию onMessage() вручную, он просто использовал бы тот же самый сохраненный ответ, что и в первый раз, и многократно выводил бы аналогичный ответ.

ПОЖАЛУЙСТА, НЕЗНАЧИТЕЛЬНО СЛУЧАЙНЫЕ ПЕРЕМЕННЫЕ В КОДЕ: Я удалил длинные логы c, которые вычисляли ответ, так как он должен быть здесь неактуальным.

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

import nltk
from nltk.stem.lancaster import LancasterStemmer
stemmer = LancasterStemmer()

import numpy
import tflearn
import tensorflow
import random
import json
import pickle

class chatbot(Client):

    def onMessage(self, author_id=None, message_object=None, thread_id=None, thread_type=ThreadType.USER, **kwargs):
        toggle = client.fetchThreadMessages(thread_id=client.uid, limit=3) # client.uid means its our own acc
        for message in toggle:
            pText=message.text.lower()
            print("test1")
        self.markAsRead(author_id)
        log.info("Message {} from {} in {}".format(message_object, thread_id, thread_type))  
        msgText = message_object.text.lower()
        print("test2")

    def getResponse(self, message, model, words, labels, data, thread_id, thread_type, author_id):
        print("test9")
        while True:
            results = model.predict([self.bag_of_words(message, words)])
            results_index = numpy.argmax(results)
            tag = labels[results_index]

            for tg in data["intents"]:
                if tg['tag'] == tag:
                    responses = tg['responses']

            finalResponse = random.choice(responses)
            run_once = 0
            while 1:
                if run_once == 0:
                    self.sendMessage(finalResponse, thread_id, thread_type, author_id)        
                    run_once = 1


    def sendMessage(self, response, thread_id, thread_type, author_id):
        print("test10")
        if 1 == 1:# (author_id!=self.uid):
                self.send(Message(text=response), thread_id=thread_id, thread_type=thread_type)
                self.markAsDelivered(author_id, thread_id)


client = chatbot("********", "****************")
client.listen()

1 Ответ

0 голосов
/ 31 марта 2020

Проблема решена путем добавления изменения в нижней части кода:

while True:
            if run_once == 0:
                if author_id != 'YOUR USER ID':
                    self.sendMessage(finalResponse, thread_id, thread_type, author_id)        
                    run_once = 1
                    print("testA")
                    return False
                return False
        return False



def sendMessage(self, response, thread_id, thread_type, author_id):
    print("test10")
    # (author_id!=self.uid):
    print(response)
    self.send(Message(text=response), thread_id=thread_id, thread_type=thread_type)
    self.markAsDelivered(author_id, thread_id)


client = chatbot("username", "password")
while True:
    client.listen()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...