Exemplo n.º 1
0
def start_new_lottery(msg: QQMessage):
    group_number = msg.group_number
    sponsor_group_card = msg.sender_group_card
    if get_lottery_in_group(group_number):
        interpreter.send_msg(
            QQMessage(group_number=group_number, message='群里已经有正在进行的抽奖了'))
    else:
        message = msg.message
        award = message[message.find('#') + 1:]
        sponsor_number = msg.sender_number
        sponsor_card = msg.sender_group_card
        with rw_lock, open(os.path.join(CURRENT_OS_PATH, SERIALIZE_PATH),
                           'wb+') as fp:
            lottery_list.append(
                Lottery(group_number=group_number,
                        sponsor_number=sponsor_number,
                        sponsor_card=sponsor_card,
                        award=award))
            pickle.dump(lottery_list, fp)

        interpreter.set_group_card_suffix(group_number=group_number,
                                          suffix='[抽奖中]')
        interpreter.send_msg(
            QQMessage(group_number=group_number,
                      message=sponsor_group_card + '开启了抽奖 奖品:' + award))
Exemplo n.º 2
0
def test_url(torn_number, group_number, sender_number):
    errorinfo = []
    url_base="https://api.torn.com/user/"
    url_last="?selections=profile&key=%s" % GLOBAL_CONFIG.GET_API_KEY()
    rereadtime=60
    global indexer
    if 1==1:
        resp = None
        print("Inveistigating user [" + torn_number + "]")
        try:
            resp = requests.get(url_base + torn_number + url_last, timeout=7)
            print (resp)
        except (
        requests.exceptions.Timeout, requests.exceptions.ConnectionError, requests.exceptions.ConnectTimeout) as e:
            print("request exceptions:" + str(e))
            print("Inveistigate " + torn_number + " timeout")
            return
        else:
            if resp.status_code >= 400:
                print("response status code fail:" + str(resp.status_code))
                print("Inveistigate " + torn_number + " fail, status code:" + str(resp.status_code))
                return
        body = resp.text
        dct = json.loads(body)
        if ("error" in dct):
            print("API Error")
            t = Timer(rereadtime, test_url)
            t.start()
            return
        ret_message = "用户名:"+str(dct.get("name"))+"\n活动:"+str(dct.get("status").get("description"))+"\n状态:"+str(dct.get("status").get("state"))+"\n血量:"+str(dct.get("life").get("current"))+"/"+str(dct.get("life").get("maximum"))
        interpreter.send_msg(QQMessage(group_number=group_number, sender_number=sender_number, message=ret_message))
Exemplo n.º 3
0
def query_for_all_information_key(msg: QQMessage):
    key_list = [x[0] for x in bingwa_db_center.query_for_all_key()]
    text = '\n'.join(key_list)
    image_path = utils.text_to_image(text)
    interpreter.send_msg(
        QQMessage(group_number=msg.group_number,
                  sender_number=msg.sender_number,
                  image_path=image_path))
Exemplo n.º 4
0
def lottery_description(msg: QQMessage):
    all_solve_list = []
    for k, v in lottery_draw_detailed_commands_description.items():
        all_solve_list.append(k + ':' + v)
    interpreter.send_msg(
        QQMessage(group_number=msg.group_number,
                  sender_number=msg.sender_number,
                  message='\n'.join(all_solve_list)))
Exemplo n.º 5
0
def query_for_all_special_key(msg: QQMessage):
    key_list = [
        'fly', 'win', 'lost'
        'jail'
        'hosp', 'xan', 'networth', 'point', 'Mug', 'bs', 'od', 'lsd', 'extt'
    ]
    text = ', '.join(key_list)
    interpreter.send_msg(
        QQMessage(group_number=msg.group_number,
                  sender_number=msg.sender_number,
                  message=text))
Exemplo n.º 6
0
def query_for_information(msg: QQMessage):
    sender_card = msg.sender_group_card
    message = msg.message

    main_message = message[message.find('#') + 1:]
    key, torn_number = main_message.split('#')
    try:
        torn_number = str(int(torn_number))
        if torn_number == '0':
            torn_number = utils.split_torn_numner(sender_card)
        else:
            sender_card = torn_number
    except Exception as e:
        torn_number = utils.split_torn_numner(sender_card)

    if torn_number == '0' and False:
        interpreter.send_msg(
            QQMessage(group_number=msg.group_number,
                      sender_number=msg.sender_number,
                      message='财富密码识别失败'))
    else:
        rows = bingwa_db_center.query_for_information(key, torn_number)
        reply = ''
        if len(rows) <= 0:
            reply = '查询出错了'
        else:
            trans_date = [row[0] for row in rows]
            data = [row[1] for row in rows]
            function_type = rows[0][2]
            if trans_date[0].lower() == 'list':
                reply = '请使用更详细的关键字查询: %s' % (', '.join(data))
            elif trans_date[0].lower() == 'error':
                reply = data[0]
            else:
                reply = '%s\n' % sender_card
                reply += '查询参数: %s\n' % function_type
                reply += '当前: %s\n' % utils.number_to_format_str(data[-1])
                if len(data) > 1:
                    data_steps = [
                        data[i] - data[i - 1] for i in range(1, len(data))
                    ]
                    reply += "增量: %s" % utils.number_to_format_str(
                        data_steps[0])
                    for step in data_steps[1:]:
                        reply += ' -> %s' % utils.number_to_format_str(step)
                    reply += '\n'

                    reply += '平均: %s' % utils.number_to_format_str(
                        sum(data_steps) / len(data_steps))

        interpreter.send_msg(
            QQMessage(group_number=msg.group_number,
                      sender_number=msg.sender_number,
                      message=reply))
Exemplo n.º 7
0
def abort_lottery(msg: QQMessage):
    group_number = msg.group_number
    sender_number = msg.sender_number
    lottery = get_lottery_in_group(group_number)
    if not lottery or lottery.sponsor_number != sender_number:
        return
    else:
        lottery_list_lock.acquire()
        lottery_list.remove(lottery)
        lottery_list_lock.release()
        interpreter.send_msg(
            QQMessage(group_number=group_number, message='抽奖中止了'))
Exemplo n.º 8
0
def query_pointsmarket(msg: QQMessage):
	reply = ''
	item_list = APICenter.query_pointsmarket()
	if len(item_list) > 0:
		reply += '当前Points价格:\n'
		for cost, quantity in item_list:
			reply += '价格:%d 数量%d\n' % (cost, quantity)
		reply = reply[:-1]
	else:
		reply = '查询出错'
	image_path = utils.text_to_image(reply)
	interpreter.send_msg(QQMessage(group_number=msg.group_number, sender_number=msg.sender_number, message=reply, image_path=image_path))
	return
Exemplo n.º 9
0
def abort_lottery(msg: QQMessage):
    group_number = msg.group_number
    sender_number = msg.sender_number
    lottery = get_lottery_in_group(group_number)
    if not lottery or lottery.sponsor_number != sender_number:
        return
    else:
        with rw_lock, open(os.path.join(CURRENT_OS_PATH, SERIALIZE_PATH),
                           'wb+') as fp:
            lottery_list.remove(lottery)
            pickle.dump(lottery_list, fp)
        interpreter.send_msg(
            QQMessage(group_number=group_number, message='抽奖中止了'))
        interpreter.set_group_card_suffix(group_number=group_number,
                                          suffix='[没有抽奖]')
Exemplo n.º 10
0
def current_lottery(msg: QQMessage):
    group_number = msg.group_number
    lottery = get_lottery_in_group(group_number)
    if not lottery:
        interpreter.send_msg(
            QQMessage(group_number=group_number, message='当前没有抽奖'))
        return
    else:
        interpreter.send_msg(
            QQMessage(group_number=group_number,
                      message='现在正在进行的是由%s送出的%s的抽奖\n参与抽奖的有:\n%s' %
                      (lottery.sponsor_card, lottery.award, '\n'.join([
                          participant.participant_card
                          for participant in lottery.participants
                      ]))))
Exemplo n.º 11
0
def query_bazaar_by_nickname(msg: QQMessage):
	message = msg.message
	to_match = message[message.find('#')+1:]
	if len(to_match) == 0:
		interpreter.send_msg(QQMessage(group_number=msg.group_number, sender_number=msg.sender_number, message='商品名不能为空'))
		return

	match_list = process.extractBests(to_match, item_nickname_map.keys())
	match_name_list = [m[0] for m in match_list]
	confidences_list = [m[1] for m in match_list]
	reply = ''
	if confidences_list[0] > 60:
		# 置信度大于60
		match_name = match_name_list[0]
		reply += match_name + '\n'
		item_id = item_nickname_map[match_name]
		item_list = APICenter.query_bazaar_item(item_id)

		if len(item_list) == 0:
			reply += '市场上没有该商品\n'
		for item in item_list[:5]:
			reply += '价格:%s, 数量:%d\n' % (utils.number_to_format_str(item[0]), item[1])

		maybe = []
		for match_name, confidence in match_list[1:4]:
			if confidence > 60 and item_nickname_map[match_name] != item_id and item_nickname_map[match_name] not in [item_nickname_map[may_name] for may_name in maybe]:
				maybe.append(match_name)
		if maybe:
			print(maybe)
			reply += '您可能要查找: %s' % '、'.join(maybe)
		else:
			reply = reply[:-1]

	else:
		maybe = []
		for match_name, confidence in match_list[:4]:
			if confidence > 60 and item_nickname_map[match_name] not in [item_nickname_map[may_name] for may_name in maybe]:
				maybe.append(match_name)
		if maybe:
			print(maybe)
			reply += '您可能要查找: %s' % '、'.join(maybe)
	if len(reply) == 0:
		reply = '查无结果'
	interpreter.send_msg(QQMessage(group_number=msg.group_number, sender_number=msg.sender_number, message=reply))
	return
Exemplo n.º 12
0
def query_for_rank(msg: QQMessage):
    sender_card = msg.sender_group_card
    message = msg.message
    main_message = message[message.find('#')+1:]
    key, torn_number = main_message.split('#')
    rows = bingwa_db_center.query_for_information(key)
    reply = ''
    if len(rows) <= 0:
        reply ='查询出错了'
    else:
        for row in rows
        reply += row
        reply += '\n'
    interpreter.send_msg(
            QQMessage(group_number=msg.group_number, sender_number=msg.sender_number, message=reply))
# --*-- 接口 --*-- #
bingwa_db_commands = {
    '信息#': query_for_information,
    '排行#': query_for_rank,
    '所有参数#': query_for_all_key
}

bingwa_db_commands_description = {
    '信息#': '信息#[关键字]#[id]查询数据,id留空则查询财富密码',
    '所有参数#': '查询所有参数'
}

#
def solve_description():
    return bingwa_db_commands_description


def solve_test(msg: QQMessage):
    message = msg.message.lower()
    command = message
    for command in bingwa_db_commands.keys():
        if message.startswith(command):
            return bingwa_db_commands.get(command)


def solve(msg: QQMessage):
    if solve_test(msg):
        thread = threading.Thread(target=solve_test(msg), args=(msg,))
        thread.start()
Exemplo n.º 13
0
def search_flower_plushie_for(msg: QQMessage):
	message = msg.message
	nickname = message[message.find('#')+1:].lower()
	country = get_country_by_nickname(nickname)

	countries = []
	if country:
		countries = [country]
	else:
		countries = country_nickname_map.keys()

	target_ids = []
	for item_ids in [country_flower_plushie_map.get(country) for country in countries]:
		for item_id in item_ids:
			target_ids.append(item_id)

	target_dict = {}
	for item in spider.foreign_item_list:
		if item.item_id in target_ids:
			# FIXME: xanax的id有几个重复 要判断是不是南非的
			if item.item_id == 206 and item.country != 'South Africa':
				pass
			else:
				if target_dict.get(item.country):
					target_dict[item.country].append(item)
				else:
					target_dict[item.country] = [item]

	if not target_dict:
		interpreter.send_msg(QQMessage(group_number=msg.group_number, sender_number=msg.sender_number, message='查询出错'))
	else:
		ret_message = ''
		for country,items in target_dict.items():
			country_name = country_name_map[country]
			ret_message += "%s" % country_name
			if len(country_name) < 3:
				ret_message += '\t'
			ret_message += ':'
			for item in items:
				ret_message += "  %s%d" % (item_name_map[item.item_id], item.stock)
			ret_message += '\n'
		interpreter.send_msg(QQMessage(group_number=msg.group_number, sender_number=msg.sender_number, message=ret_message[:-1]))
	return
Exemplo n.º 14
0
def participate_in_lottery(msg: QQMessage):
    group_number = msg.group_number
    sender_number = msg.sender_number
    sender_group_card = msg.sender_group_card
    lottery = get_lottery_in_group(group_number)
    if not lottery:
        return
    else:
        if sender_number in [
                x.participant_number for x in lottery.participants
        ]:
            interpreter.send_msg(
                QQMessage(sender_number=sender_number,
                          message=sender_group_card + ': 您已参加'))
        else:
            participant = Participant(participant_number=sender_number,
                                      participant_card=sender_group_card)
            lottery.participants.append(participant)
            interpreter.send_msg(
                QQMessage(sender_number=sender_number,
                          message=sender_group_card + ': 参加成功'))
Exemplo n.º 15
0
def start_new_lottery(msg: QQMessage):
    group_number = msg.group_number
    sponsor_group_card = msg.sender_group_card
    if get_lottery_in_group(group_number):
        interpreter.send_msg(
            QQMessage(group_number=group_number, message='群里已经有正在进行的抽奖了'))
    else:
        message = msg.message
        award = message[message.find('#') + 1:]
        sponsor_number = msg.sender_number
        sponsor_card = msg.sender_group_card
        lottery_list_lock.acquire()
        lottery_list.append(
            Lottery(group_number=group_number,
                    sponsor_number=sponsor_number,
                    sponsor_card=sponsor_card,
                    award=award))
        lottery_list_lock.release()
        interpreter.send_msg(
            QQMessage(group_number=group_number,
                      message=sponsor_group_card + '开启了抽奖 奖品:' + award))
Exemplo n.º 16
0
def end_lottery(msg: QQMessage):
    message = msg.message
    group_number = msg.group_number
    sender_number = msg.sender_number

    try:
        lucky_sum = int(message[message.find('#') + 1:])
        if lucky_sum <= 0:
            raise Exception
    except Exception as e:
        interpreter.send_msg(
            QQMessage(group_number=group_number, message='参数有误'))
        return

    lottery = get_lottery_in_group(group_number)
    if not lottery or lottery.sponsor_number != sender_number:
        return
    else:
        with rw_lock, open(os.path.join(CURRENT_OS_PATH, SERIALIZE_PATH),
                           'wb+') as fp:
            lottery_list.remove(lottery)
            pickle.dump(lottery_list, fp)

        participants = lottery.participants
        if len(participants) <= 0:
            interpreter.set_group_card_suffix(group_number=group_number,
                                              suffix='[没有抽奖]')
            interpreter.send_msg(
                QQMessage(group_number=group_number, message='参与人数不足,抽奖已结束'))
        else:
            lucky_list = []
            for idx in random.sample(range(0, len(participants)),
                                     min(lucky_sum, len(participants))):
                lucky_list.append(participants[idx])

            interpreter.set_group_card_suffix(group_number=group_number,
                                              suffix='[没有抽奖]')
            interpreter.send_msg(
                QQMessage(group_number=group_number,
                          message='开奖结果:\n%s\n获得了%s送出的:%s' % ('\n'.join([
                              "[CQ:at,qq=%s]" % participant.participant_number
                              for participant in lucky_list
                          ]), lottery.sponsor_card, lottery.award)))
            for p in participants:
                interpreter.send_msg(
                    QQMessage(sender_number=p.participant_number,
                              message='开奖结果:\n%s\n获得了%s送出的:%s' % ('\n'.join([
                                  "%s" % participant.participant_card
                                  for participant in lucky_list
                              ]), lottery.sponsor_card, lottery.award)))
Exemplo n.º 17
0
def current_lottery(msg: QQMessage, use_image=True):
    group_number = msg.group_number
    lottery = get_lottery_in_group(group_number)
    if not lottery:
        interpreter.set_group_card_suffix(group_number=group_number,
                                          suffix='[没有抽奖]')
        interpreter.send_msg(
            QQMessage(group_number=group_number, message='当前没有抽奖'))
        return
    else:
        interpreter.set_group_card_suffix(group_number=group_number,
                                          suffix='[抽奖中]')
        reply = '现在正在进行的是\n由%s送出的%s的抽奖\n参与抽奖共计%d人:\n%s' % (
            lottery.sponsor_card, lottery.award, len(
                lottery.participants), '\n'.join([
                    participant.participant_card
                    for participant in lottery.participants
                ]))
        if use_image:
            interpreter.send_msg(
                QQMessage(group_number=group_number,
                          image_path=utils.text_to_image(reply)))
        else:
            interpreter.send_msg(
                QQMessage(group_number=group_number, message=reply))
Exemplo n.º 18
0
def participate_in_lottery(msg: QQMessage):
    group_number = msg.group_number
    sender_number = msg.sender_number
    sender_group_card = msg.sender_group_card
    lottery = get_lottery_in_group(group_number)
    if not lottery:
        interpreter.send_msg(
            QQMessage(group_number=group_number, message='当前没有抽奖'))
        return
    else:
        if sender_number in [
                x.participant_number for x in lottery.participants
        ]:
            interpreter.send_msg(
                QQMessage(sender_number=sender_number,
                          message=sender_group_card + ': 您已参加\n[%s - %s]' %
                          (lottery.sponsor_card, lottery.award)))
        else:
            participant = Participant(participant_number=sender_number,
                                      participant_card=sender_group_card)
            with rw_lock, open(os.path.join(CURRENT_OS_PATH, SERIALIZE_PATH),
                               'wb+') as fp:
                lottery.participants.append(participant)
                pickle.dump(lottery_list, fp)
            interpreter.send_msg(
                QQMessage(sender_number=sender_number,
                          message=sender_group_card + ': 参加成功\n[%s - %s]' %
                          (lottery.sponsor_card, lottery.award)))
Exemplo n.º 19
0
def query_for_monthly_rank(msg: QQMessage):
    message = msg.message
    query_key = None
    query_faction_key = None
    try:
        _, query_key, query_faction_key = message.split('#')
        if len(query_faction_key) == 0:
            query_faction_key = 0
        else:
            query_faction_key = int(query_faction_key)
        if query_faction_key < 0:
            raise Exception('rank faction 参数错误')
        query_faction_key = str(query_faction_key)
    except Exception as e:
        print('rank 拆分参数出错')
        interpreter.send_msg(
            QQMessage(group_number=msg.group_number,
                      sender_number=msg.sender_number,
                      message='拆分参数出错'))
        return

    rows = bingwa_db_center.query_for_monthly_rank(query_key,
                                                   query_faction_key)

    if len(rows) <= 0:
        interpreter.send_msg(
            QQMessage(group_number=msg.group_number,
                      sender_number=msg.sender_number,
                      message='查询出错了'))
    elif len(rows) == 1 and rows[0][1] == 2509529 and rows[0][-1] == 0:
        interpreter.send_msg(
            QQMessage(group_number=msg.group_number,
                      sender_number=msg.sender_number,
                      message=rows[0][-2]))
    else:
        tb = PrettyTable()
        tb.field_names = ['RankID', 'player_id', 'name', 'Faction', 'Data']
        for row in rows:
            row = [x for x in row]
            row[-1] = utils.number_to_format_str(row[-1])
            tb.add_row(row)
        interpreter.send_msg(
            QQMessage(
                group_number=msg.group_number,
                sender_number=msg.sender_number,
                image_path=utils.text_to_image('月报查询:%s  faction:%s\n' %
                                               (query_key, query_faction_key) +
                                               str(tb))))
Exemplo n.º 20
0
def restart_spider(msg: QQMessage):
	sender_number = msg.sender_number
	if sender_number not in GLOBAL_CONFIG.super_user:
		return

	interpreter.send_msg(QQMessage(group_number=msg.group_number, sender_number=msg.sender_number, message='正在重启库存'))
	global spider_thread
	if spider_thread.is_alive():
		_async_raise(spider_thread.ident, SystemExit)
		spider_thread = spider.commence_life_cycle()
		interpreter.send_msg(QQMessage(group_number=msg.group_number, sender_number=msg.sender_number, message='强制退出并重启'))
	else:
		spider_thread = spider.commence_life_cycle()
		interpreter.send_msg(QQMessage(group_number=msg.group_number, sender_number=msg.sender_number, message='已重启'))
Exemplo n.º 21
0
def end_lottery(msg: QQMessage):
    message = msg.message
    group_number = msg.group_number
    sender_number = msg.sender_number

    try:
        lucky_sum = int(message[message.find('#') + 1:])
        if lucky_sum <= 0:
            raise Exception
    except Exception as e:
        interpreter.send_msg(
            QQMessage(group_number=group_number, message='参数有误'))
        return

    lottery = get_lottery_in_group(group_number)
    if not lottery or lottery.sponsor_number != sender_number:
        return
    else:

        lottery_list_lock.acquire()
        lottery_list.remove(lottery)
        lottery_list_lock.release()

        participants = lottery.participants
        if len(participants) <= 0:
            interpreter.send_msg(
                QQMessage(group_number=group_number, message='参与人数不足,抽奖已结束'))
        else:
            lucky_list = []
            while len(lucky_list) < lucky_sum and len(lucky_list) < len(
                    participants):
                r = random.randint(0, len(participants) - 1)
                if participants[r] not in lucky_list:
                    lucky_list.append(participants[r])
            interpreter.send_msg(
                QQMessage(group_number=group_number,
                          message='开奖结果:\n%s\n获得了%s送出的:%s' % ('\n'.join([
                              participant.participant_card
                              for participant in lucky_list
                          ]), lottery.sponsor_card, lottery.award)))
Exemplo n.º 22
0
def query_chain_simple(msg):
    raw_message = APICenter.chain_simple_info_make()
    interpreter.send_msg(
        QQMessage(message=raw_message,
                  group_number=msg.group_number,
                  sender_number=msg.sender_number))