Example #1
0
def auto_rand_pass():
    import django
    django.setup()
    tz_tokyo = pytz.timezone('Asia/Tokyo')
    time = datetime.datetime.now()
    print(tz_tokyo.localize(time))
    reply_list_list = ReplyList.objects.filter(time_limit_date__lt=tz_tokyo.localize(time), has_replied=False).filter(~Q(time_limit_date=None))
    #r_list_list = ReplyList.objects.filter(time_limit_date__it=datetime.datetime.now())

    from one_month import settings

    print("---------------")
    if not reply_list_list:
        print("@@@@skip@@@@")
        print("パスすべき質問がありませんでした。スキップします")
        return 1

    for reply_list in reply_list_list:
        print("###pass###")
        qa_manager = QAManager()
        pass_success = qa_manager.pass_question(reply_list.question, qa_manager.reply_list_update_random_except)

        if pass_success:
            # 宛先にロボットが含まれるかどうか調べる
            try:
                to_robot = QuestionDestination.objects.filter(question=reply_list.question)
                to_robot = [i for i in to_robot if i.tag.code == 99]
            except QuestionDestination.DoesNotExist:
                to_robot = []

            # 何回目のパスでロボットが返信してくるか。現在は1に固定
            if len(to_robot) and reply_list.question.pass_counter() == 1 and not reply_list.question.has_reply():
                text = ''
                reply_data = ReplyRobot().reply(reply_list.question)
                if len(reply_data['reply_list']) == 0:
                    text += "難問です。答えられたらすごいです。\n"
                else:
                    text = "[StackOverFlowより] 以下のページはどうでしょうか?\n\n" + "\n".join(reply_data['reply_list']) + "\n"
                if len(reply_data['word_list']) != 0:
                    urls = []
                    for w in reply_data['word_list']:
                        # すべてのユーザの過去の全質問(各質問の回答は含まない)の中から、抽出結果でキーワード検索をかける(最大3件)
                        questions, reply_lists = QAManager.search_keyword_all_user(keyword=str(w), question=True, tag=True,
                                                                                   reply=False)
                        for q in questions:
                            if q.id != reply_list.question.id and len(urls) <= 2:
                                urls.append(q.title + "\n" + 'http://' + settings.HOST_NAME + '/dotchain/q_detail/' + str(q.id) + '\n')
                    text += "\n[過去の質問より] 以下のページはどうでしょうか?\n\n" + "\n".join(list(set(urls))) if len(
                        urls) else "\n過去の関連質問はありませんでした。"
                    text += "\n\n抽出結果:" + "、".join(reply_data['word_list'])
                text += "\n推定ジャンル:" + reply_data['genre']

                robot, created = User.objects.get_or_create(username='******',
                                                            defaults=dict(first_name='太郎', last_name='ロボット', ), )
                Reply.objects.create(question=reply_list.question, answerer=robot, text=text)
        else:
            reply_list.question.update(is_closed=True)
Example #2
0
def question_pass(request, id=None):
    """
    来た質問をパスする。
    次に質問を回す人は、質問者と既にパスした人にはならないようにする。
    また、質問者以外のユーザを質問が回り終わったら、質問者にお知らせする。

    v1.1新機能:ロボット(AI)による自動返信。
                ある回数(現在は1回に固定)だけパスされたら質問から抽出されたキーワードを使って検索URLを返信する。
                カテゴリがITの場合はStackOverFlowで検索+過去の関連質問を返信する。
                その他の場合は過去の関連質問を返信する。
    """

    reply_list = ReplyList.objects.get(id=id)
    if reply_list.has_replied:
        return top_default(request, msg=m.INFO_QUESTION_ALREADY_AUTO_PASS)

    qa_manager = QAManager()
    pass_success = qa_manager.pass_question(reply_list.question, qa_manager.reply_list_update_random_except)

    if pass_success:
        # 宛先にロボットが含まれるかどうか調べる
        try:
            to_robot = QuestionDestination.objects.filter(question=reply_list.question)
            to_robot = [i for i in to_robot if i.tag.code == 99]
        except QuestionDestination.DoesNotExist:
            to_robot = []

        # 何回目のパスでロボットが返信してくるか。現在は1に固定
        if len(to_robot) and reply_list.question.pass_counter() == 1 and not reply_list.question.has_reply():
            text = ''
            reply_data = ReplyRobot().reply(reply_list.question)
            if len(reply_data['reply_list']) == 0:
                text += "難問です。答えられたらすごいです。\n"
            else:
                text = "[StackOverFlowより] 以下のページはどうでしょうか?\n\n" + "\n".join(reply_data['reply_list']) + "\n"
            if len(reply_data['word_list']) != 0:
                urls = []
                for w in reply_data['word_list']:
                    # すべてのユーザの過去の全質問(各質問の回答は含まない)の中から、抽出結果でキーワード検索をかける(最大3件)
                    questions, reply_lists = QAManager.search_keyword_all_user(keyword=str(w), question=True, tag=True,
                                                                               reply=False)
                    for q in questions:
                        if q.id != reply_list.question.id and len(urls) <= 2:
                            urls.append(q.title + "\n" + 'http://' + settings.HOST_NAME + '/dotchain/q_detail/' + str(q.id) + '\n')
                text += "\n[過去の質問より] 以下のページはどうでしょうか?\n\n" + "\n".join(list(set(urls))) if len(
                    urls) else "\n過去の関連質問はありませんでした。"
                text += "\n\n抽出結果:" + "、".join(reply_data['word_list'])
            text += "\n推定ジャンル:" + reply_data['genre']

            robot, created = User.objects.get_or_create(username='******',
                                                        defaults=dict(first_name='太郎', last_name='ロボット', ), )
            Reply.objects.create(question=reply_list.question, answerer=robot, text=text)
        return top_default(request, msg=m.INFO_QUESTION_PASS)
    else:
        reply_list.question.update(is_closed=True)
        return top_default(request, msg='{0}\n{1}'.format(m.INFO_QUESTION_PASS, m.INFO_PASS_FINISH))
Example #3
0
def auto_rand_pass():
    import django
    django.setup()
    tz_tokyo = pytz.timezone('Asia/Tokyo')
    time = datetime.datetime.now()
    print(tz_tokyo.localize(time))
    reply_list_list = ReplyList.objects.filter(time_limit_date__lt=tz_tokyo.localize(time), has_replied=False).filter(~Q(time_limit_date=None))
    #r_list_list = ReplyList.objects.filter(time_limit_date__it=datetime.datetime.now())

    print("---------------")
    if not reply_list_list:
        print("@@@@skip@@@@")
        print("パスすべき質問がありませんでした。スキップします")
        return 1

    for reply_list in reply_list_list:
        print("###pass###")
        qa_manager = QAManager()
        qa_manager.pass_question(reply_list.question, qa_manager.reply_list_update_random_except)
Example #4
0
def question_pass(request, id=None):
    """
    来た質問をパスする。
    次に質問を回す人は、質問者と既にパスした人にはならないようにする。
    また、質問者以外のユーザを質問が回り終わったら、質問者にお知らせする。
    """
    reply_list = ReplyList.objects.get(id=id)
    if reply_list.has_replied:
        msg = 'すでにパスした質問です。'
        return top_default(request, msg)

    qa_manager = QAManager()
    if qa_manager.pass_question(reply_list.question, qa_manager.reply_list_update_random_except):
        msg = '質問をパスしました。'

        # 何回目のパスでロボットが返信してくるか
        if reply_list.question.pass_counter() == 1 and not reply_list.question.has_reply():
            reply = Reply()
            reply.question = reply_list.question
            reply_data = ReplyRobot().reply(reply_list.question)
            if len(reply_data['reply_list']) == 0:
                reply.text = "難問です。答えられたらすごいです。"
            else:
                reply.text = "以下のページはどうでしょうか?\n\n" + "\n".join(reply_data['reply_list'])
            if len(reply_data['word_list']) != 0:
                reply.text += "\n\n抽出結果:" + "、".join(reply_data['word_list'])
            reply.text += "\n推定ジャンル:" + reply_data['genre']
            # ロボットのidを指定
            reply.answerer = User.objects.get(id=1)
            reply.save()
        return top_default(request, msg)
    else:
        reply_list.question.is_closed = True
        reply_list.question.save()
        msg = '質問をパスしました。\n'
        msg += '次の送信先がないため質問は締め切られます。'
        return top_default(request, msg)