Exemple #1
0
async def cardviewer_announce(session):
    if not flask.request.is_json:
        return flask.jsonify(message="Request not JSON"), 400

    req = flask.request.get_json()

    cards = server.db.metadata.tables['cards']
    card_multiverse = server.db.metadata.tables['card_multiverse']

    query = sqlalchemy.select([cards.c.id, cards.c.name, cards.c.text])

    if 'multiverseid' in req:
        query = query.select_from(cards.join(card_multiverse)).where(
            card_multiverse.c.id == req['multiverseid'])
    elif 'name' in req:
        name = cardname.to_query(req['name'])
        exact = cardname.clean_text(req['name'])
        hidden = False
        if 'variant' in req:
            name += escape_like("_" + req['variant'])
            exact += "_" + req['variant']
            hidden = True

        exact_query = sqlalchemy.exists().where(cards.c.filteredname == exact)
        if not hidden:
            exact_query = exact_query.where(~cards.c.hidden)

        query = query.where((exact_query & (cards.c.filteredname == exact))
                            | (~exact_query
                               & cards.c.filteredname.ilike(name)))
        if not hidden:
            query = query.where(~cards.c.hidden)
    elif 'host' in req or 'augment' in req:
        name = ""
        if 'augment' in req:
            name += cardname.to_query(req['augment']) + escape_like("_aug")
        if 'host' in req:
            name += ("_" if name != "" else "") + cardname.to_query(
                req['host']) + escape_like("_host")
        query = query.where(cards.c.filteredname.ilike(name))
    else:
        return flask.jsonify(message=""), 400

    with server.db.engine.begin() as conn:
        cards = conn.execute(query).fetchall()

    if len(cards) == 0:
        return flask.jsonify(message="No such card"), 400
    elif len(cards) > 1:
        return flask.jsonify(message="Matched multiple cards"), 400

    card_id, name, text = cards[0]

    await common.rpc.bot.cardviewer.announce(card_id)

    return flask.jsonify(
        name=name,
        text=text,
    )
Exemple #2
0
async def cardviewer_announce(session):
	if not flask.request.is_json:
		return flask.jsonify(message="Request not JSON"), 400
	
	req = flask.request.get_json()
	log.debug("Received cardviewer: %r", req)

	cards = server.db.metadata.tables['cards']
	card_multiverse = server.db.metadata.tables['card_multiverse']

	query = sqlalchemy.select([cards.c.id, cards.c.name, cards.c.text])

	if 'multiverseid' in req:
		query = query.select_from(cards.join(card_multiverse)).where(card_multiverse.c.id == req['multiverseid'])
	elif 'name' in req:
		name = cardname.to_query(req['name'])
		exact = cardname.clean_text(req['name'])
		hidden = False
		if 'variant' in req:
			name += escape_like("_" + req['variant'])
			exact += "_" + req['variant']
			hidden = True

		exact_query = sqlalchemy.exists().where(cards.c.filteredname == exact)
		if not hidden:
			exact_query = exact_query.where(~cards.c.hidden)

		query = query.where(
			(exact_query & (cards.c.filteredname == exact))
				| (~exact_query & cards.c.filteredname.ilike(name)))
		if not hidden:
			query = query.where(~cards.c.hidden)
	elif 'host' in req or 'augment' in req:
		name = ""
		if 'augment' in req:
			name += cardname.to_query(req['augment']) + escape_like("_aug")
		if 'host' in req:
			name += ("_" if name != "" else "") + cardname.to_query(req['host']) + escape_like("_host")
		query = query.where(cards.c.filteredname.ilike(name))
	else:
		return flask.jsonify(message=""), 400

	with server.db.engine.begin() as conn:
		cards = conn.execute(query).fetchall()

	if len(cards) == 0:
		return flask.jsonify(message="No such card"), 400
	elif len(cards) > 1:
		return flask.jsonify(message="Matched multiple cards"), 400

	card_id, name, text = cards[0]

	await common.rpc.bot.cardviewer.announce(card_id)

	return flask.jsonify(
		name=name,
		text=text,
	)
Exemple #3
0
def to_query(text):
    return "%" + "%".join(
        escape_like(clean_text(word)) for word in text.split()) + "%"
Exemple #4
0
def to_query(text):
	return "%" + "%".join(escape_like(clean_text(word)) for word in text.split()) + "%"