コード例 #1
0
def calc_badge(data):
    """
    팀 뱃지

    * 0 : '입문자' : 10판 플레이
    1 : '세계정복' : 모든 채널에 봇이 초대됨
    * 2 : '동작그만' : 게임취소 명령어를 1회 사용
    * 3 : '게임중독' : 200판 플레이
    4 : '만장일치' : 팀 내 모든 플레이어가 1회이상 게임 참여
    
    
    개인 뱃지

    0 : 'POTG' : 1등을 연속으로 3번 했을때
    1 : '동반입대' : 특정플레이어와 2명이서 10판 이상 플레이
    2 : '저승사자' : 연속 5번 1위
    3 : '콩진호' : 22번 연속 2위
    4 : '도와줘요 스피드웨건' : /help 명령어 1회 사용
    """

    teamId = data["team_id"]
    teamLang = util.get_team_lang(teamId)
    channelId = data['channel']
    slackApi = util.init_slackapi(teamId)

    badgeRows = util.fetch_all_json(
        db_manager.query(
            "SELECT * "
            "FROM TEAM_BADGE "
            "WHERE "
            "team_id = %s ", (teamId, )))

    if check_badge_exist(badgeRows, 0) == False:
        rows = util.fetch_all_json(
            db_manager.query(
                "SELECT COUNT(game_id) as game_num "
                "FROM GAME_INFO "
                "WHERE "
                "team_id = %s", (teamId, )))
        if rows[0]['game_num'] >= 10:
            reward_badge(data, 0)

    if check_badge_exist(badgeRows, 2) == False:
        if data['text'] == static.GAME_COMMAND_EXIT:
            reward_badge(data, 2)

    if check_badge_exist(badgeRows, 3) == False:
        rows = util.fetch_all_json(
            db_manager.query(
                "SELECT COUNT(game_id) as game_num "
                "FROM GAME_INFO "
                "WHERE "
                "team_id = %s", (teamId, )))
        if rows[0]['game_num'] >= 200:
            reward_badge(data, 3)

    return 0
コード例 #2
0
def command_badge(data):

    teamId = data["team_id"]
    teamLang = util.get_team_lang(teamId)
    channelId = data['channel']
    slackApi = util.init_slackapi(teamId)

    rows = util.fetch_all_json(
        db_manager.query(
            "SELECT * "
            "FROM TEAM_BADGE "
            "WHERE "
            "team_id = %s ", (teamId, )))

    resultString = ""
    for row in rows:
        resultString += static.getText(
            static.CODE_TEXT_TEAM_BADGES[row['badge_id']], teamLang) + "\n"

    slackApi.chat.postMessage({
        'channel':
        channelId,
        'text':
        'TEAM BADGES',
        'attachments':
        json.dumps([{
            "text": resultString,
            "fallback": "fallbacktext",
            "callback_id": "wopr_game",
            "color": "#2f35a3",
            "attachment_type": "default",
        }])
    })
コード例 #3
0
ファイル: util.py プロジェクト: JSpiner/Soma_SlackBot_taja
def get_bot_id(teamId):
    bot_id = fetch_all_json(
        db_manager.query(
            "SELECT bot_id "
            "FROM TEAM "
            "WHERE "
            "team_id = %s "
            "LIMIT 1 ", (teamId, )))[0]['bot_id']
    return bot_id
コード例 #4
0
ファイル: util.py プロジェクト: JSpiner/Soma_SlackBot_taja
def get_team_lang(teamId):
    team_lang = fetch_all_json(
        db_manager.query(
            "SELECT team_lang "
            "FROM TEAM "
            "WHERE "
            "team_id = %s "
            "LIMIT 1 ", (teamId, )))[0]['team_lang']
    return team_lang
コード例 #5
0
def reward_badge(data, badgeId):
    teamId = data["team_id"]
    teamLang = util.get_team_lang(teamId)
    channelId = data['channel']
    slackApi = util.init_slackapi(teamId)

    db_manager.query(
        "INSERT INTO TEAM_BADGE "
        "(`team_id`, `badge_id`) "
        "VALUES "
        "(%s, %s)", (teamId, badgeId))

    time.sleep(1)
    slackApi.chat.postMessage({
        'channel':
        channelId,
        'text':
        static.getText(static.CODE_TEXT_NEW_BADGE, teamLang),
        'attachments':
        json.dumps([{
            "text":
            static.getText(static.CODE_TEXT_TEAM_BADGES[badgeId], teamLang),
            "fallback":
            "fallbacktext",
            "callback_id":
            "wopr_game",
            "color":
            "#3AA3E3",
            "attachment_type":
            "default"
        }])
    })

    if badgeId == 0:
        time.sleep(3)
        slackApi.chat.postMessage({
            'channel':
            channelId,
            'text':
            static.getText(static.CODE_TEXT_GAME_REVIEW, teamLang)
        })

    return 0
コード例 #6
0
def command_rank(data):

    teamId = data["team_id"]
    teamLang = util.get_team_lang(teamId)
    channelId = data['channel']
    slackApi = util.init_slackapi(teamId)
    print('rank_data' + str(data))

    # 내 게임 결과들 가져오기
    result = db_manager.query(
        "SELECT user_id, MAX(score) as max_score, AVG(score) as avg_score, AVG(score) as recent_score "
        "FROM GAME_RESULT "
        "WHERE game_id in ( "
        "SELECT GAME_INFO.game_id "
        "FROM GAME_INFO "
        "WHERE "
        "GAME_INFO.channel_id = %s "
        ") "
        "GROUP BY GAME_RESULT.user_id "
        "order by avg_score DESC; ", (channelId, ))

    rows = util.fetch_all_json(result)

    # 출력할 텍스트 생성
    result_string = ""
    rank = 1

    for row in rows:
        result_string = result_string + (
            static.getText(static.CODE_TEXT_RANK_FORMAT_3, teamLang) %
            (pretty_rank(rank), "*" +
             str(get_user_info(slackApi, row["user_id"])["user"]["name"]) +
             "*", pretty_score(row["max_score"]), pretty_score(
                 row["avg_score"]), pretty_score(row["avg_score"])))
        rank = rank + 1

        # 10위 까지만 출력
        if (rank == 11):
            break

    slackApi.chat.postMessage({
        "channel":
        channelId,
        "text":
        static.getText(static.CODE_TEXT_RANK, teamLang),
        'as_user':
        '******',
        "attachments":
        json.dumps([{
            "title": static.getText(static.CODE_TEXT_RECORD, teamLang),
            "text": result_string,
            "mrkdwn_in": ["text", "pretext"],
            "color": "#764FA5"
        }])
    })
コード例 #7
0
ファイル: util.py プロジェクト: JSpiner/Soma_SlackBot_taja
def init_slackapi_bot(teamId):

    result = fetch_all_json(
        db_manager.query(
            "SELECT team_bot_access_token FROM TEAM "
            "WHERE `team_id`   =  %s "
            "LIMIT 1", (teamId, )))

    print(result)
    slackApi = SlackApi(result[0]['team_bot_access_token'])
    return slackApi
コード例 #8
0
def command_score(data):
    teamId = data["team_id"]
    teamLang = util.get_team_lang(teamId)
    channelId = data['channel']
    slackApi = util.init_slackapi(teamId)

    # 게임 결과들 가져오기

    result = db_manager.query(
        "SELECT * from GAME_RESULT "
        "RESULT inner join GAME_INFO INFO "
        "on INFO.game_id = RESULT.game_id "
        "inner join USER U "
        "on U.user_id = RESULT.user_id "
        "WHERE INFO.channel_id = %s "
        "ORDER BY score desc;", (channelId, ))

    rows = util.fetch_all_json(result)

    result_string = ""
    rank = 1
    for row in rows:
        logger_celery.info(row)
        result_string = result_string + (
            static.getText(static.CODE_TEXT_RANK_FORMAT_2, teamLang) %
            (pretty_rank(rank), "*" +
             str(get_user_info(slackApi, row["user_id"])["user"]["name"]) +
             "*", pretty_score(row["score"]), row["answer_text"]))
        rank = rank + 1

        # 10위 까지만 출력
        if (rank == 11):
            break

    slackApi.chat.postMessage({
        "channel":
        channelId,
        "text":
        static.getText(static.CODE_TEXT_SCORE, teamLang),
        'as_user':
        '******',
        "attachments":
        json.dumps([{
            "title": static.getText(static.CODE_TEXT_RECORD, teamLang),
            "text": result_string,
            "mrkdwn_in": ["text", "pretext"],
            "color": "#764FA5"
        }])
    })
コード例 #9
0
def get_rand_game(channel, teamLang):
    result = db_manager.query(
        "SELECT * "
        "FROM CHANNEL_PROBLEM "
        "INNER JOIN (select *from PROBLEM where problem_language = %s) as pb  on pb.problem_id = CHANNEL_PROBLEM.problem_id "
        "WHERE CHANNEL_PROBLEM.problem_cnt = ( "
        "SELECT MIN(CHANNEL_PROBLEM.problem_cnt) "
        "FROM CHANNEL_PROBLEM "
        "WHERE CHANNEL_PROBLEM.channel_id = %s "
        "LIMIT 1 "
        ") "
        "AND CHANNEL_PROBLEM.channel_id = %s  "
        "ORDER BY RAND() "
        "LIMIT 1", (teamLang, channel, channel))

    rows = util.fetch_all_json(result)
    logger_celery.info('[problem_id]==> ' + str(rows))
    if len(rows) == 0:

        result = db_manager.query(
            "SELECT * "
            "FROM PROBLEM "
            "where problem_language = %s "
            "ORDER BY RAND() "
            "LIMIT 1", (teamLang, ))
        rows = util.fetch_all_json(result)
        return rows[0]["problem_id"]

    else:
        db_manager.query(
            "UPDATE CHANNEL_PROBLEM "
            "SET `problem_cnt` = `problem_cnt` + 1 "
            "WHERE "
            "channel_id = %s and "
            "problem_id = %s ", (channel, rows[0]["problem_id"]))
        return rows[0]["problem_id"]
コード例 #10
0
def open_socket(teamId, data):

    redis_manager.redis_client.hset('rtm_status_' + teamId, 'status',
                                    SOCKET_STATUS_CONNECTING)
    redis_manager.redis_client.hset('rtm_status_' + teamId, 'expire_time',
                                    time.time() + SOCKET_EXPIRE_TIME)

    result = db_manager.query(
        "SELECT team_bot_access_token "
        "FROM TEAM "
        "WHERE "
        "team_id = %s "
        "LIMIT 1", (teamId, ))
    bot_token = util.fetch_all_json(result)[0]['team_bot_access_token']
    _connect(teamId, bot_token, data)
コード例 #11
0
def is_mission_clear(channel_id,game_id):
	logger_celery.info('[MISSION]==>mission clear check')
	logger_celery.info('[MISSION_channel_id]==>'+str(channel_id))
	logger_celery.info('[MISSION_game_id]==>'+str(game_id))
	
	global arr_cond_oper 
	arr_cond_oper = []
	
	mission_condi = json.loads(redis_client.get(static.GAME_MISSION_CONDI+channel_id));
	logger_celery.info('[MISSION_CONDI]==>'+str(mission_condi))
	result = db_manager.query(
		"select * from GAME_INFO as gi inner join GAME_RESULT as gr on gi.game_id = gr.game_id where  gi.game_id = %s",
		(game_id,)
	)
	rows = util.fetch_all_json(result)

	
	user_num = len(rows)
	mission_success_num = 0

	#총 참여인원이 모자라라서 미션을 하지못하였다
	if(check_enter_member(mission_condi,user_num)==False):
		
		return static.GAME_MISSION_ABSENT
	else:
		logger_celery.info('[MISSION_RESULT]==> Enough member')
		#미션조건으로부터 연산 조건을 뽑아와 arr_cond_oper에 넣는다.
		check_conditions(mission_condi)
		for oper in arr_cond_oper:
			
			logger_celery.info('[MISSION_RESULT_oper]==> '+str(oper))
		for row in rows:
			chcked_user = checking_user(row,mission_condi)
			
			#미션성공시+1 을 해준다.
			if(chcked_user == True):
				mission_success_num = mission_success_num + 1
		
		logger_celery.info('[MISSION_RESULT_success_num]==> '+str(mission_success_num))
		
		if(check_nec_member(mission_condi,mission_success_num,user_num)==True):
			return static.GAME_MISSION_SUC
		else:
			return static.GAME_MISSION_FAILE
コード例 #12
0
def command_typing(data):
    teamId = data["team_id"]
    teamLang = util.get_team_lang(teamId)
    channelId = data['channel']
    slackApi = util.init_slackapi(teamId)

    gamemode = redis_client.get('game_mode_' + channelId)
    if gamemode == "kok":
        game_id = redis_client.get('kokgame_id_' + channelId)
        users = redis_client.hgetall('kokusers_' + game_id)

        sw = False
        for key, value in users.items():
            if key == data['user'] and value == "1":
                sw = True
                break

        if sw == False:
            print("=====================================")
            return 0

    # 부정 복사 판단
    if static.CHAR_PASTE_ESCAPE in data['text']:
        sendMessage(slackApi, channelId,
                    static.getText(static.CODE_TEXT_WARNING_PASTE, teamLang))
        return

    #미션일경우.
    if (redis_client.get(static.GAME_MISSION_NOTI_CODE + channelId) != 'None'):
        #리버스 미션일경우.
        if (int(redis_client.get(static.GAME_MISSION_NOTI_CODE +
                                 channelId)) == static.GAME_MISSION_REVERSE):
            logger_celery.info('[MISSION_REVERESE]')
            reverse_text = ''.join(reversed(data["text"]))
            logger_celery.info('[MISSION_REVERESE] ==> user:'******' problem' +
                               redis_client.get("problem_text_" + channelId))
            distance = util.get_edit_distance(
                reverse_text, redis_client.get("problem_text_" + channelId))

        # 랜덤 swap일경우. 원래본문을 swap된것으로 바꿔서 비교한다.
        elif (int(redis_client.get(static.GAME_MISSION_NOTI_CODE +
                                   channelId)) == static.GAME_MISSION_SWAP):
            logger_celery.info('[MISSION_SWAP]')
            pre = redis_client.get(static.GAME_MISSION_SWAP_CHOSUNG +
                                   channelId)
            after = redis_client.get(static.GAME_MISSION_SWAP_AFTER +
                                     channelId)
            distance = util.get_edit_distance_for_swap(
                data["text"], redis_client.get("problem_text_" + channelId),
                pre, after)

        else:
            distance = util.get_edit_distance(
                data["text"], redis_client.get("problem_text_" + channelId))

    else:
        distance = util.get_edit_distance(
            data["text"], redis_client.get("problem_text_" + channelId))

    start_time = redis_client.get("start_time_" + channelId)
    current_time = time.time() * 1000
    elapsed_time = (current_time - float(start_time)) * 1000

    game_id = redis_client.get("game_id_" + channelId)

    # 점수 계산
    speed = round(util.get_speed(data["text"], elapsed_time), 3)
    problem_text = redis_client.get("problem_text_" + channelId)

    accuracy = round(
        util.get_accuracy(max([data['text'], problem_text], key=len),
                          distance), 3)
    score = util.get_score(speed, accuracy)
    accuracy = accuracy * 100

    logger_celery.info('distance : ' + str(distance))
    logger_celery.info('speed : ' + str(speed))
    logger_celery.info('elapsed_time : ' + str(elapsed_time))
    logger_celery.info('accur : ' + str(accuracy))
    logger_celery.info('text : ' + str(data["text"]))

    result = db_manager.query(
        "SELECT game_id "
        "FROM GAME_RESULT "
        "WHERE "
        "game_id = %s and user_id = %s "
        "LIMIT 1", (game_id, data["user"]))

    rows = util.fetch_all_json(result)
    if len(rows) == 0:

        # 게임 결과 저장
        db_manager.query(
            "INSERT INTO GAME_RESULT "
            "(game_id, user_id, answer_text, score, speed, accuracy, elapsed_time) "
            "VALUES"
            "(%s, %s, %s, %s, %s, %s, %s)",
            (game_id, data["user"], data["text"].encode('utf-8'), score, speed,
             accuracy, elapsed_time))

        user_name = get_user_info(slackApi, data["user"])["user"]["name"]

        try:
            #이후 채널 랭크 업데이트.
            result = db_manager.query(
                "SELECT * , "
                "( "
                "SELECT count(*) "
                "FROM ( "
                "SELECT user_id,avg(score) as scoreAvgUser FROM GAME_RESULT GROUP BY user_id  order by scoreAvgUser desc "
                ") "
                "userScoreTB "
                ") as userAllCnt "
                "FROM ( "
                "SELECT @counter:=@counter+1 as rank ,userScoreTB.user_id,userScoreTB.scoreAvgUser as average "
                "FROM ( "
                " SELECT user_id,avg(score) as scoreAvgUser FROM GAME_RESULT GROUP BY user_id  order by scoreAvgUser desc "
                ") "
                "userScoreTB "
                "INNER JOIN (SELECT @counter:=0) b "
                ") as rankTB where user_id = %s ", (data["user"], ))
            rows = util.fetch_all_json(result)

            userAll = rows[0]["userAllCnt"]
            rank = rows[0]["rank"]
            levelHirechy = rank / userAll * 100

            level = 3
            #100~91
            if levelHirechy > 90:
                level = 1
            #90~71
            elif levelHirechy > 70 and levelHirechy < 91:
                level = 2
            #70~31
            elif levelHirechy > 30 and levelHirechy < 81:
                level = 3
            #30~10
            elif levelHirechy > 10 and levelHirechy < 31:
                level = 4
            #10~0
            elif levelHirechy > -1 and levelHirechy < 11:
                level = 5

            #이후 채널 랭크 업데이트.

            result = db_manager.query(
                "UPDATE USER SET user_level = %s WHERE user_id = %s",
                (level, data["user"]))

        except Exception as e:
            logger_celery.error(str(e))

        try:
            result = db_manager.query(
                "SELECT user_id "
                "FROM USER "
                "WHERE "
                "user_id = %s "
                "LIMIT 1", (data["user"], ))
            rows = util.fetch_all_json(result)

            if len(rows) == 0:

                db_manager.query(
                    "INSERT INTO USER "
                    "(team_id, user_id, user_name) "
                    "VALUES "
                    "(%s, %s, %s) ", (teamId, data["user"], user_name))
        except exc.SQLAlchemyError as e:
            logger_celery.error("[DB] err==>" + str(e))
コード例 #13
0
def command_myscore(data):
    teamId = data["team_id"]
    teamLang = util.get_team_lang(teamId)
    channelId = data['channel']
    userId = data["user"]
    slackApi = util.init_slackapi(teamId)

    # user_name 가져오기
    user_info = get_user_info(slackApi, userId)
    user_name = user_info['user']['name']

    # 내 게임 결과들 가져오기
    result = db_manager.query(
        "SELECT * , ( "
        "SELECT COUNT(*) + 1 "
        "FROM GAME_RESULT "
        "WHERE "
        "score > a.score and "
        "game_id = a.game_id"
        ") as rank "
        "FROM GAME_RESULT as a "
        "WHERE "
        "user_id = %s order by score desc;", (userId, ))

    rows = util.fetch_all_json(result)

    # 해당 팀의 언어설정 가져오기
    result_team_lang = db_manager.query(
        "SELECT * FROM TEAM "
        "WHERE "
        "team_id = %s;", (teamId, ))

    team_rows = util.fetch_all_json(result_team_lang)
    teamLang = team_rows[0]['team_lang']

    result_myscore_announcements = db_manager.query(
        "SELECT * FROM slackbot.MY_SCORE_ANNOUNCEMENT "
        "WHERE "
        "language = %s;", (teamLang, ))

    myscore_announcements = util.fetch_all_json(result_myscore_announcements)
    myscore_announcement = myscore_announcements[int(
        len(myscore_announcements) * random.random())]['announcement']

    # 출력할 텍스트 생성
    result_string = "Name : " + "*" + user_name + "*" + "\n"
    result_string = result_string + myscore_announcement + "\n"
    rank = 1

    for row in rows:
        result_string = result_string + (
            static.getText(static.CODE_TEXT_RANK_FORMAT_1, teamLang) %
            (pretty_rank(rank), pretty_score(row["score"]),
             pretty_accur(row["accuracy"]), pretty_speed(
                 row["speed"]), " " + pretty_speed(row["rank"]) + " "))
        rank = rank + 1

        # 10위 까지만 출력
        if (rank == 11):
            break

    slackApi.chat.postMessage({
        "channel":
        channelId,
        "text":
        static.getText(static.CODE_TEXT_MY_SCORE, teamLang),
        'as_user':
        '******',
        "attachments":
        json.dumps([{
            "title": static.getText(static.CODE_TEXT_RECORD, teamLang),
            "text": result_string,
            "mrkdwn_in": ["text", "pretext"],
            "color": "#764FA5"
        }])
    })
コード例 #14
0
def command_start(data, round=0):
    teamId = data["team_id"]
    channelId = data['channel']
    slackApi = util.init_slackapi(teamId)
    teamLang = util.get_team_lang(teamId)

    result = db_manager.query("select *from GAME_INFO where channel_id = %s",
                              (channelId, ))
    rows = util.fetch_all_json(result)

    if len(rows) == 0:
        #게임 카운터를 1로 설정한다.
        redis_client.set(static.GAME_MANAGER_PLAY_COUNTER + channelId, '1')

    logger_celery.info('start')

    if not is_channel_has_bot(teamId, channelId):
        redis_client.set("status_" + channelId, static.GAME_STATE_IDLE)
        #게임 카운터를 1로 설정한다.
        redis_client.set(static.GAME_MANAGER_PLAY_COUNTER + channelId, '1')
        print("First !! =>" +
              redis_client.get(static.GAME_MANAGER_PLAY_COUNTER + channelId))

        slackApi.chat.postMessage({
            "channel":
            channelId,
            "text":
            static.getText(static.CODE_TEXT_BOT_NOTFOUND, teamLang),
            'as_user':
            '******',
            "attachments":
            json.dumps([{
                "text":
                static.getText(static.CODE_TEXT_INVITE_BOT, teamLang),
                "fallback":
                "fallbacktext",
                "callback_id":
                "wopr_game",
                "color":
                "#3AA3E3",
                "attachment_type":
                "default",
                "actions": [{
                    "name":
                    "invite_bot",
                    "text":
                    static.getText(static.CODE_TEXT_INVITE, teamLang),
                    "type":
                    "button",
                    "value":
                    "invite_bot",
                    "confirm": {
                        "title":
                        static.getText(static.CODE_TEXT_INVITE_ASK, teamLang),
                        "text":
                        static.getText(static.CODE_TEXT_CAN_REMOVE, teamLang),
                        "ok_text":
                        static.getText(static.CODE_TEXT_OPTION_INVITE,
                                       teamLang),
                        "dismiss_text":
                        static.getText(static.CODE_TEXT_OPTION_LATER,
                                       teamLang),
                    }
                }]
            }])
        })
        return

    redis_client.set("status_" + channelId, static.GAME_STATE_STARTING)

    # 채널 정보가 DB에 있는지 SELECT문으로 확인 후 없으면 DB에 저장
    result = db_manager.query(
        "SELECT * FROM slackbot.CHANNEL WHERE slackbot.CHANNEL.channel_id = %s;",
        (data['channel'], ))

    # DB에 채널 정보가 없다면
    if (result.fetchone() is None):

        ctime = datetime.datetime.now()

        # 채널 이름 가져오기
        channel_list = get_channel_list(slackApi)
        logger_celery.info(channel_list)
        channels = channel_list['channels']
        channel_name = ""
        for channel_info in channels:
            # id가 같으면 name을 가져온다/
            if (channel_info['id'] == data['channel']):
                channel_name = channel_info['name']

        try:
            db_manager.query(
                "INSERT INTO CHANNEL"
                "(team_id, channel_id, channel_name, channel_joined_time)"
                "VALUES"
                "(%s, %s, %s, %s);",
                (teamId, data['channel'], channel_name, ctime))

            result = db_manager.query("SELECT * from PROBLEM")

            rows = util.fetch_all_json(result)

            arrQueryString = []
            arrQueryString.append(
                'INSERT INTO CHANNEL_PROBLEM (channel_id,problem_id) values ')

            for row in rows:
                arrQueryString.append('("' + data['channel'] + '","' +
                                      str(row['problem_id']) + '")')
                arrQueryString.append(',')

            arrQueryString.pop()
            lastQuery = "".join(arrQueryString)

            result = db_manager.query(lastQuery)
        except Exception as e:
            logger_celery.error('error : ' + str(e))

    #만약 미션이 선택되었다면?!
    #미션에해당하는 멘트들을 가져오고 해당 멘트를 레디스에서 긁어와서 메시지로 뿌려준다.
    if (mission_manager.pickUpGameEvent(data['channel'],
                                        teamId) == static.GAME_TYPE_MISSION):
        logger_celery.info('[MISSION]==>START!')
        sendMessage(
            slackApi, channelId,
            redis_client.get(static.GAME_MISSION_NOTI + data['channel']))
        logger_celery.info('[MISSION_CONDI_inREDSI]==> ' +
                           static.GAME_MISSION_CONDI + data['channel'])
        # print(redis_client.get(static.GAME_MISSION_CONDI+data['channel']))

        # 문제들 가져오기
    texts = util.get_problems(teamLang)
    logger_celery.info('[LANG_TEAM]==> ' + teamLang)

    # 문제 선택하기
    problem_id = get_rand_game(data['channel'], teamLang)
    logger_celery.info('[problem_id]==> ' + str(problem_id))
    problem_text = texts[problem_id]
    #미션인지확인하고,
    if (redis_client.get(static.GAME_MISSION_NOTI_CODE + channelId) != 'None'):
        # 랜덤 초이스인경우엔

        if (int(redis_client.get(static.GAME_MISSION_NOTI_CODE +
                                 channelId)) == static.GAME_MISSION_SWAP):
            randomChar = mission_manager.mission_swap_get_Random_Chosung(
                problem_text, channelId, teamLang)
            sendMessage(
                slackApi, channelId,
                mission_manager.mission_swap_get_options_centence(
                    randomChar, channelId, teamLang))

    titleResponse = sendMessage(slackApi, channelId,
                                util.get_start_centence(teamLang))
    # sendMessage(slackApi, channelId, util.get_start_centence(teamLang))

    response = sendMessage(slackApi, channelId,
                           static.getText(static.CODE_TEXT_COUNT_1, teamLang))

    text_ts = response['ts']
    title_ts = titleResponse['ts']

    time.sleep(1)
    strs = [
        static.getText(static.CODE_TEXT_COUNT_2, teamLang),
        static.getText(static.CODE_TEXT_COUNT_3, teamLang)
    ]
    logger_celery.info('strs => ' + str(strs))
    for i in range(0, 2):
        slackApi.chat.update({
            "ts": text_ts,
            "channel": channelId,
            "text": strs[i],
            'as_user': '******'
        })
        time.sleep(1.0)

    slackApi.chat.update({
        "ts":
        text_ts,
        "channel":
        channelId,
        "text":
        static.getText(static.CODE_TEXT_SUGGEST_PROBLEM, teamLang) %
        (static.CHAR_PASTE_ESCAPE.join(problem_text)),
        'as_user':
        '******'
    })

    redis_client.set("status_" + channelId,
                     static.GAME_STATE_PLAYING)  # 현재 채널 상태 설정
    redis_client.set(
        "start_time_" + channelId,
        time.time() * 1000,
    )  # 시작 시간 설정
    redis_client.set("problem_text_" + channelId, problem_text)  # 해당 게임 문자열 설정
    redis_client.set("problem_id_" + channelId, problem_id)  # 해당 게임 문자열 설정
    redis_client.set("game_id_" + channelId,
                     util.generate_game_id())  # 현재 게임의 ID

    #threading.Timer(10, game_end, [slackApi, teamId, channelId, title_ts]).start()
    timeout = util.get_time(problem_text)
    for i in range(1, timeout):
        stTime = time.time()
        slackApi.chat.update({
            "ts":
            title_ts,
            "channel":
            channelId,
            "text":
            static.getText(static.CODE_TEXT_START_GAME_COUNT, teamLang) %
            (str(timeout - i)),
            'as_user':
            '******'
        })
        if time.time() - stTime <= 1:
            time.sleep(1 - (time.time() - stTime))

    slackApi.chat.update({
        "ts":
        title_ts,
        "channel":
        channelId,
        "text":
        static.getText(static.CODE_TEXT_START_GAME_END, teamLang),
        'as_user':
        '******'
    })
    game_end(slackApi, data, round)
コード例 #15
0
def game_end(slackApi, data, round=0):

    teamId = data['team_id']
    channelId = data['channel']

    teamLang = util.get_team_lang(teamId)
    sendMessage(slackApi, channelId,
                static.getText(static.CODE_TEXT_GAME_DONE, teamLang))

    start_time = redis_client.get("start_time_" + channelId)
    game_id = redis_client.get("game_id_" + channelId)
    problem_id = redis_client.get("problem_id_" + channelId)

    logger_celery.info(start_time)

    start_time_to_time_tamp = datetime.datetime.utcfromtimestamp(
        (float(start_time) / 1000) +
        (9 * 3600)).strftime('%Y-%m-%d %H:%M:%S.%f')

    # 현재 상태 변경
    redis_client.set("status_" + channelId, static.GAME_STATE_CALCULATING)

    sendMessage(slackApi, channelId,
                static.getText(static.CODE_TEXT_CALC_SCORE, teamLang))
    time.sleep(2)

    # 참여유저수 query로 가져오기
    result = db_manager.query(
        "SELECT * FROM slackbot.GAME_RESULT WHERE slackbot.GAME_RESULT.game_id = %s;",
        (game_id, ))

    # 가져온 쿼리 결과로 user_num을 계산
    rows = util.fetch_all_json(result)
    user_num = len(rows)

    ctime = datetime.datetime.now()
    db_manager.query(
        "INSERT INTO GAME_INFO "
        "(game_id, channel_id, team_id, start_time, end_time, problem_id, user_num)"
        "VALUES"
        "(%s, %s, %s, %s, %s, %s, %s) ",
        (game_id, channelId, teamId, start_time_to_time_tamp, ctime,
         problem_id, user_num))

    result = db_manager.query(
        "SELECT * FROM GAME_RESULT "
        "WHERE game_id = %s order by score desc", (game_id, ))
    rows = util.fetch_all_json(result)

    logger_celery.info('game result orow' + str(rows))

    #참여인원에대한 플래그는 하상 0 이다.
    redis_client.set(static.GAME_MISSION_FLG_MIN_MEMBER + channelId, 0)

    # #none이아니면 미션이라는 이야기이다.
    # logger_celery.info('isMission? '+redis_client.get(static.GAME_MISSION_NOTI_CODE+ channelId))
    # logger_celery.info(redis_client.get(static.GAME_MISSION_NOTI_CODE+ channelId)!='None')
    # logger_celery.info(redis_client.get(static.GAME_MISSION_NOTI_CODE+ channelId) is not None)

    if (str(redis_client.get(static.GAME_MISSION_NOTI_CODE + channelId)) !=
            'None'):
        # code가 102인경우 ==> 1등과 2등을 바꿔져야한다.
        # 단 로우가 2이상일경우에만..
        if (int(redis_client.get(static.GAME_MISSION_NOTI_CODE + channelId))
                == static.GAME_MISSION_SENCONDORY and len(rows) > 1):
            redis_client.set(static.GAME_MISSION_FLG_MIN_MEMBER + channelId, 1)

            first_user_id = rows[0]['user_id']
            second_user_id = rows[1]['user_id']

            # logger_celery.info('[MISSION_SECONDORY] UPDATE 1th = '+get_user_info(slackApi,first_user_id)["user"]["name"] +' 2th = '+get_user_info(slackApi,second_user_id)["user"]["name"])

            #1등자리에 2등을 넣고
            try:

                #first에 #을붙인다.
                db_manager.query(
                    "UPDATE GAME_RESULT "
                    "set user_id = %s where game_id = %s and user_id = %s ",
                    (first_user_id + '#', game_id, first_user_id))
                #그리고 second에 first를 넣고
                db_manager.query(
                    "UPDATE GAME_RESULT "
                    "set user_id = %s where game_id = %s and user_id = %s ",
                    (first_user_id, game_id, second_user_id))

                db_manager.query(
                    "UPDATE GAME_RESULT "
                    "set user_id = %s where game_id = %s and user_id = %s ",
                    (second_user_id, game_id, first_user_id + '#'))

            except Exception as e:
                logger_celery.error(str(e))
        else:
            redis_client.set(static.GAME_MISSION_FLG_MIN_MEMBER + channelId, 0)

        result = db_manager.query(
            "SELECT * FROM GAME_RESULT "
            "WHERE game_id = %s order by score desc", (game_id, ))
        rows = util.fetch_all_json(result)

    result_string = ""
    rank = 1
    if data['mode'] == "kok":
        kokgame_id = redis_client.get('kokgame_id_' + channelId)
        users = redis_client.hgetall('kokusers_' + kokgame_id)

        for key, value in users.items():
            redis_client.hset("kokusers_" + kokgame_id, key, "0")

    for row in rows:
        result_string = result_string + (
            static.getText(static.CODE_TEXT_RANK_FORMAT_4, teamLang) %
            (pretty_rank(rank),
             str(get_user_info(slackApi, row["user_id"])["user"]["name"]),
             str(int(row["score"])), pretty_accur(
                 row["accuracy"]), str(int(row["speed"]))))
        rank = rank + 1
        if data['mode'] == "kok":
            if rank == len(rows) + 1:
                redis_client.hset("kokusers_" + kokgame_id, row["user_id"],
                                  "0")
            else:
                redis_client.hset("kokusers_" + kokgame_id, row["user_id"],
                                  "1")

    sendResult = str(result_string)
    logger_celery.info(channelId)

    slackApi.chat.postMessage({
        "channel":
        channelId,
        "text":
        static.getText(static.CODE_TEXT_GAME_RESULT, teamLang),
        'as_user':
        '******',
        "attachments":
        json.dumps([{
            "title": static.getText(static.CODE_TEXT_RECORD, teamLang),
            "text": sendResult,
            "mrkdwn_in": ["text", "pretext"],
            "color": "#764FA5"
        }])
    })

    #### 게임이 끝나고 미션 클리어했는지 판단해주는 로직이다.

    #none이아니면 미션이라는 이야기이다.
    if (redis_client.get(static.GAME_MISSION_NOTI_CODE + channelId) != 'None'):
        #code가 100보다작을경우 => genral한 미션일경우다
        if (int(redis_client.get(static.GAME_MISSION_NOTI_CODE + channelId)) <
                100):
            mission_result = mission_manager.is_mission_clear(
                channelId, game_id)
            if (mission_result == static.GAME_MISSION_ABSENT):
                logger_celery.info('[MISSION_RESULT]==> notEnough member')
                sendMessage(
                    slackApi, channelId,
                    static.getText(static.CODE_TEXT_MISSION_RESULT_MIN_MEMBER,
                                   teamLang))
            elif (mission_result == static.GAME_MISSION_SUC):
                logger_celery.info('[MISSION_RESULT]==> MISSION SUCCESS')
                sendMessage(
                    slackApi, channelId,
                    static.getText(static.CODE_TEXT_MISSION_RESULT_SUCCESS,
                                   teamLang))
            elif (mission_result == static.GAME_MISSION_FAILE):
                logger_celery.info('[MISSION_RESULT]==> MISSION FAILE')
                sendMessage(
                    slackApi, channelId,
                    static.getText(static.CODE_TEXT_MISSION_RESULT_FAIL,
                                   teamLang))
        #Random일 경우
        elif (int(redis_client.get(static.GAME_MISSION_NOTI_CODE +
                                   channelId)) == static.GAME_MISSION_REVERSE):
            logger_celery.info('[MISSION_RESULT]==> REVERSE MISSION END')
            sendMessage(
                slackApi, channelId,
                static.getText(static.CODE_TEXT_MISSION_RESULT_REVERSE,
                               teamLang))
        #2등만보여줄경우.
        elif (int(redis_client.get(static.GAME_MISSION_NOTI_CODE + channelId))
              == static.GAME_MISSION_SENCONDORY):

            if (int(
                    redis_client.get(static.GAME_MISSION_FLG_MIN_MEMBER +
                                     channelId)) == 1):
                logger_celery.info('[MISSION_RESULT]==> SECONDORY MISSION END')
                sendMessage(
                    slackApi, channelId,
                    static.getText(static.CODE_TEXT_MISSION_RESULT_SECONDORY,
                                   teamLang))
            elif (int(
                    redis_client.get(static.GAME_MISSION_FLG_MIN_MEMBER +
                                     channelId)) == 0):
                logger_celery.info(
                    '[MISSION_RESULT]==> SECONDORY MISSION END not enough member'
                )
                sendMessage(
                    slackApi, channelId,
                    static.getText(static.CODE_TEXT_MISSION_RESULT_MIN_MEMBER,
                                   teamLang))
            # mission_manager.mission_reverse_typing()

    #게임한것이 10개인지 판단 하여 채널 레벨을 업데이트 시켜준다.
    try:

        result = db_manager.query(
            "SELECT  IF(COUNT(*)>10,true,false) as setUpChannelLevel "
            "FROM GAME_INFO as gi WHERE channel_id = %s "
            "ORDER BY gi.start_time DESC LIMIT 10", (channelId, ))
        rows = util.fetch_all_json(result)
        logger_celery.info(rows)
        # 레벨을 산정한다.
        if rows[0]['setUpChannelLevel'] == 1:
            logger_celery.info("true")

            result = db_manager.query(
                "SELECT u.user_id,u.user_level FROM ( "
                "SELECT  * FROM GAME_INFO as gi WHERE channel_id = %s  ORDER BY gi.start_time DESC LIMIT 10 "
                ") as recentGameTB "
                "inner join GAME_RESULT as gr on recentGameTB.game_id = gr.game_id "
                "inner join USER as u on u.user_id = gr.user_id group by u.user_id ",
                (channelId, ))
            rows = util.fetch_all_json(result)
            logger_celery.info(rows)

            levelSum = 0
            for row in rows:
                levelSum = row["user_level"]

            logger_celery.info(levelSum)

            #이후 반올림하여 채널랭크를 측정.
            channelRank = round(levelSum / len(row))
            #이후 채널 랭크 업데이트.

            result = db_manager.query(
                "UPDATE CHANNEL SET channel_level = %s WHERE channel_id = %s",
                (channelRank, channelId))
        #아무일도일어나지 않는다.
        else:
            logger_celery.info("false")

    except Exception as e:
        logger_celery.error(str(e))

    # 현재 상태 변경
    redis_client.set("status_" + channelId, static.GAME_STATE_IDLE)

    if data['mode'] == "kok":
        print("start next round")
        start_kok(data, round + 1)

    badge_manager.calc_badge(data)

    # if(redis_client.get(static.GAME_MANAGER_PLAY_COUNTER+channelId) is not None):

    game_cnt = int(
        redis_client.get(static.GAME_MANAGER_PLAY_COUNTER + channelId))
    #6보다 카운트가작으면 ++
    if (game_cnt < 7):
        redis_client.set(static.GAME_MANAGER_PLAY_COUNTER + channelId,
                         str(game_cnt + 1))
        #6이면 마지막이니까 kok알림.
    elif (game_cnt == 7):
        time.sleep(3)
        slackApi.chat.postMessage({
            'channel':
            channelId,
            'text':
            static.getText(static.CODE_TEXT_GUID_KOK, teamLang)
        })
        redis_client.set(static.GAME_MANAGER_PLAY_COUNTER + channelId,
                         str(game_cnt + 1))
コード例 #16
0
ファイル: app.py プロジェクト: JSpiner/Soma_SlackBot_taja
def slack_oauth():
    code = request.args.get('code')
    r = requests.post("https://slack.com/api/oauth.access",
                      data={
                          'client_id': key['slackapp']['client_id'],
                          'client_secret': key['slackapp']['client_secret'],
                          'code': code
                      })

    response = json.loads(r.text)

    app.logger.info(response)
    ctime = datetime.datetime.now()
    result = db_manager.query(
        "SELECT * FROM TEAM "
        "WHERE "
        "team_id = %s "
        "LIMIT 1", (response['team_id'], ))
    rows = util.fetch_all_json(result)

    if len(rows) == 0:
        db_manager.query(
            "INSERT INTO TEAM "
            "(`team_id`, `team_name`, `team_joined_time`, `team_access_token`, `team_bot_access_token`, `bot_id`)"
            "VALUES"
            "(%s, %s, %s, %s, %s, %s)",
            (response['team_id'], response['team_name'], ctime,
             response['access_token'], response['bot']['bot_access_token'],
             response['bot']['bot_user_id']))
    else:
        db_manager.query(
            "UPDATE TEAM "
            "SET "
            "team_bot_access_token = %s , "
            "team_access_token = %s , "
            "bot_id = %s "
            "WHERE "
            "team_id = %s",
            (response['bot']['bot_access_token'], response['access_token'],
             response['bot']['bot_user_id'], response['team_id']))

    accessToken = response['access_token']
    teamLang = util.get_team_lang(response['team_id'])
    """
    slackApi = SlackApi(accessToken)
    slackBotApi = SlackApi(response['bot']['bot_access_token'])
    slackMembers = slackApi.im.list()['ims']

    for member in slackMembers:
        slackBotApi.chat.postMessage(
            {
                'as_user'       : 'true',
                'channel'       : member['user'],
                'username'      : 'surfinger',
                'icon_url'      : 'http://icons.iconarchive.com/icons/vcferreira/firefox-os/256/keyboard-icon.png',
                'text'          : static.getText(static.CODE_TEXT_JOIN_BOT, teamLang),
                'attachments'   : json.dumps(
                    [
                        {
                            "text": "",
                            "fallback": "fallbacktext",
                            "callback_id": "wopr_game",
                            "color": "#3AA3E3",
                            "attachment_type": "default",
                            "actions": [
                                {
                                    "name": "lang_en",
                                    "text": ":us: English",
                                    "type": "button",
                                    "value": "lang_en"
                                },
                                {
                                    "name": "lang_kr",
                                    "text": ":kr: 한국어",
                                    "type": "button",
                                    "value": "lang_kr"
                                }
                            ]
                        }
                    ]
                )
            }
        )
    """
    return redirect(url_for('static', filename='successView.html'))
コード例 #17
0
def pickUpGameEvent(channelId,teamId):
	
	logger_celery.info('[MISSION]==>pickUp GameEvent')
	teamLang = util.get_team_lang(teamId)

	#기존 레디스정보가있다면 None 로 초기화시켜라 ==> None 은 없는것이나 마찬가지
	# redis_client.set(static.GAME_MISSION_ID + channelId, None)
	redis_client.set(static.GAME_MISSION_NOTI + channelId, 'None')
	redis_client.set(static.GAME_MISSION_CONDI + channelId, 'None')
	redis_client.set(static.GAME_MISSION_TYPE + channelId, 'None')
	redis_client.set(static.GAME_MISSION_NOTI_CODE + channelId,'None')

	#첫판일경우 100
	play_cnt = redis_client.get(static.GAME_MANAGER_PLAY_COUNTER+channelId)

	if( play_cnt == '1' or play_cnt == '2'):
		play_mission_per = 0
		play_mission_general = 'None'
		play_mission_id = 'None'
	elif(play_cnt == '3'):
		play_mission_per = 100
		play_mission_general = 0
		play_mission_id = 101
	elif(play_cnt == '4'):
		play_mission_per = 100
		play_mission_general = 0
		play_mission_id = 103
	elif(play_cnt == '5'):
		play_mission_per = 100
		play_mission_general = 0
		play_mission_id = 102
	elif(play_cnt == '6'):
		play_mission_per = 100
		play_mission_general = 100
		play_mission_id = 1
	elif(play_cnt == '7'):
		play_mission_per = 100
		play_mission_general = 100
		play_mission_id = 2							
	else:
		play_mission_per = 50
		play_mission_general = 50
		play_mission_id = 'None'


	print(' playCnt => ' +str(play_cnt)+' missionper => '+str(play_mission_per)+ ' play_general=> '+str(play_mission_general)+' play_di => '+str(play_mission_id))

	#미션실행 모드이다. 
	#현재 테스트용으로 50% 확률로 미션게임이 나오도록 작업하였다.
	if util.getRandomPercent(play_mission_per) :

		#다시 50% 확률로 general/special 한 미션이 나온다.
		if util.getRandomPercent(play_mission_general) :
			logger_celery.info('[MISSION]==> general Mission')

			if(play_cnt=='6' or play_cnt=='7'):
				result = db_manager.query(
					"select *from GAME_MISSION_NOTI as gnoti inner join GAME_MISSION_INFO as ginfo on gnoti.id = ginfo.mission_noti_code where ginfo.validity = 1 and gnoti.lang =%s and type ='general'  and mission_noti_code =%s",
					(teamLang,play_mission_id)
				)
			else:
				result = db_manager.query(
					"select *from GAME_MISSION_NOTI as gnoti inner join GAME_MISSION_INFO as ginfo on gnoti.id = ginfo.mission_noti_code where ginfo.validity = 1 and gnoti.lang =%s and type ='general'  ORDER BY rand() LIMIT 1 ",
					(teamLang,)
				)

			rows = util.fetch_all_json(result)
			mission_noti_code = rows[0]['mission_noti_code']
			mission_noti = rows[0]['mission_noti']
			mission_condi = rows[0]['condi'];
			mission_type = rows[0]['type'];

			redis_client.set(static.GAME_MISSION_NOTI_CODE + channelId,mission_noti_code)
			redis_client.set(static.GAME_MISSION_TYPE + channelId,mission_type)
			redis_client.set(static.GAME_MISSION_NOTI + channelId,mission_noti)
			redis_client.set(static.GAME_MISSION_CONDI + channelId,mission_condi)

		else:
			logger_celery.info('[MISSION]==> special Mission')
			
			if(play_cnt=='3' or play_cnt=='4' or play_cnt=='5'):
				result = db_manager.query(
					# "select *from GAME_MISSION_NOTI as gnoti inner join GAME_MISSION_INFO as ginfo on gnoti.id = ginfo.mission_noti_code where ginfo.validity = 1 and gnoti.lang =%s and type ='special'  ORDER BY rand() LIMIT 1 ",
					"select *from GAME_MISSION_NOTI as gnoti inner join GAME_MISSION_INFO as ginfo   on gnoti.id = ginfo.mission_noti_code where ginfo.validity = 1 and gnoti.lang =%s and type ='special'  and mission_noti_code =%s",
					(teamLang,play_mission_id)
				)
			else:
				result = db_manager.query(
					"select *from GAME_MISSION_NOTI as gnoti inner join GAME_MISSION_INFO as ginfo on gnoti.id = ginfo.mission_noti_code where ginfo.validity = 1 and gnoti.lang =%s and type ='special'  ORDER BY rand() LIMIT 1 ",
					# "select *from GAME_MISSION_NOTI as gnoti inner join GAME_MISSION_INFO as ginfo   on gnoti.id = ginfo.mission_noti_code where ginfo.validity = 1 and gnoti.lang =%s and type ='special'  and mission_noti_code =103",
					(teamLang,)
				)			

			rows = util.fetch_all_json(result)
			print(rows)
			mission_noti_code = rows[0]['mission_noti_code']
			mission_noti = rows[0]['mission_noti']
			mission_type = rows[0]['type'];
			
			redis_client.set(static.GAME_MISSION_NOTI_CODE + channelId,mission_noti_code)
			redis_client.set(static.GAME_MISSION_TYPE + channelId,mission_type)
			redis_client.set(static.GAME_MISSION_NOTI + channelId,mission_noti)
		

		return static.GAME_TYPE_MISSION
	#노말 모드이다.
	else :
		logger_celery.info('[MISSION]==>NOPE! just Normal mode')

		return static.GAME_TYPE_NORMAL
コード例 #18
0
ファイル: app.py プロジェクト: JSpiner/Soma_SlackBot_taja
def slack_event_btn():
    payload = json.loads(request.form.get('payload'))
    channelId = payload['channel']['id']
    teamId = payload['team']['id']
    teamLang = util.get_team_lang(teamId)
    slackApi = util.init_slackapi(teamId)

    app.logger.info("btn callback" + str(payload))

    if payload['actions'][0]['name'] == 'invite_bot':

        if channelId[0] == "G":  # private channel
            slackApi.groups.invite({
                'channel': channelId,
                'user': util.get_bot_id(teamId)
            })
        else:  # public channel
            slackApi.channels.invite({
                'channel': channelId,
                'user': util.get_bot_id(teamId)
            })
    elif payload['actions'][0]['name'] == 'lang_en':

        db_manager.query(
            "UPDATE TEAM "
            "SET "
            "team_lang = %s "
            "WHERE "
            "team_id = %s ", ("en", teamId))

        slackApi.chat.postMessage({
            'channel':
            channelId,
            'text':
            static.getText(static.CODE_TEXT_LANG_CHANGED, "en"),
            'as_user':
            '******'
        })
    elif payload['actions'][0]['name'] == 'lang_kr':

        db_manager.query(
            "UPDATE TEAM "
            "SET "
            "team_lang = %s "
            "WHERE "
            "team_id = %s ", ("kr", teamId))

        slackApi.chat.postMessage({
            'channel':
            channelId,
            'text':
            static.getText(static.CODE_TEXT_LANG_CHANGED, "kr"),
            'as_user':
            '******'
        })
    elif payload['actions'][0]['name'] == 'kok_join':
        ts = redis_manager.redis_client.get('kokmsg_' + channelId)
        game_id = redis_manager.redis_client.get('kokgame_id_' + channelId)

        redis_manager.redis_client.hset('kokusers_' + game_id,
                                        payload['user']['id'], "1")
        users = redis_manager.redis_client.hgetall('kokusers_' + game_id)

        print(users)
        userString = ""
        for key, value in users.items():
            if value == "1":
                userString += "<@" + key + ">  "
        slackApi.chat.update({
            'channel':
            channelId,
            'text':
            "",
            'ts':
            ts,
            'attachments':
            json.dumps([{
                "text":
                static.getText(static.CODE_TEXT_KOK_ENTRY, teamLang) %
                (userString),
                "fallback":
                "fallbacktext",
                "callback_id":
                "wopr_game",
                "color":
                "#FF2222",
                "attachment_type":
                "default",
                "actions": [{
                    "name": "kok_join",
                    "text": ":dagger_knife: Join",
                    "type": "button",
                    "value": "kok_join"
                }]
            }])
        })

    return ''
コード例 #19
0
import sys
sys.path.append("../")
from Common.manager import db_manager
from Common import util

db_manager.query(
    "INSERT INTO TEAM "
    "(`team_id`, `team_name`, `team_joined_time`, `team_access_token`, `team_bot_access_token`, `bot_id`)"
    "VALUES"
    "(%s, %s, %s, %s, %s, %s)",
    ("ff", "ff`3!@#$%^안녕하세요 dfdfdf", "2016-01-01", "fdfdf", "ffff", "fff"))
"""
result = db_manager.session.execute(
    "SELECT * FROM TEAM WHERE team_id = :t1",
    {"t1":"1 or '1'='1'"}
)
rows = util.fetch_all_json(result)
print(rows)

db_manager.session.execute(
    "INSERT INTO TEAM " 
    "(`team_id`, `team_name`, `team_joined_time`, `team_access_token`, `team_bot_access_token`, `bot_id`)"
    "VALUES"
    "(:v1, :v2, :v3, :v4, :v5, :v6)",
    { 
        "v1":"ddd3",
        "v2":"ddd, 34` !@#$%^&* '2' \"435",
        "v3":"2016-01-01",
        "v4":"ddd",
        "v5":"ddd",
        "v6":"ddd"
コード例 #20
0
ファイル: app.py プロジェクト: JSpiner/Soma_SlackBot_taja
fileHandler = logging.FileHandler('./logs/Bot_app.log')
fileHandler.setFormatter(formatter)
stream_handler = logging.StreamHandler()

app.logger.addHandler(fileHandler)
app.logger.addHandler(stream_handler)

# set log level
app.logger.setLevel(logging.DEBUG)

#load josn key file
with open('../key.json', 'r') as f:
    key = json.load(f)

##reset all socket status
result = db_manager.query("SELECT team_id " "FROM TEAM ")
rows = util.fetch_all_json(result)
for row in rows:
    redis_manager.redis_client.hset('rtm_status_' + row['team_id'], 'status',
                                    static.SOCKET_STATUS_IDLE)

# @app.route('/success', methods=['GET'])
# def redirect_to_index():
#     return redirect(url_for('static', filename='index2.html'))

# @app.route('/success')
# def hello(name=None):
#     return render_template('index2.html', name=name)


@app.route('/', methods=['GET', 'POST'])