示例#1
0
def command_singet(bot, update, args):
    if len(args) < 1:
        update.message.reply_text('Format: /singet <tg_user_id>')
        return

    # Parse arguments
    tg_user_id = None
    try:
        tg_user_id = int(args[0])
    except ValueError:
        update.message.reply_text('Invalid user id')
        return

    session = dbsession()
    sc = session.query(SinCounter).filter(
        SinCounter.tg_user_id == tg_user_id).first()
    reply = None
    if sc:
        reply = 'User ' + make_tg_user_url(tg_user_id) + ' has {} sin'.format(
            sc.sin)
    else:
        reply = 'User ' + make_tg_user_url(tg_user_id) + ' has not sin...yet.'

    update.message.reply_text(reply, parse_mode='MARKDOWN')
    session.close()
示例#2
0
def command_sinlimitreset(bot, update, args):
    if len(args) < 1:
        update.message.reply_text('Format: /sinadd <tg_user_id>')
        return

    # Parse arguments
    tg_user_id = None
    try:
        tg_user_id = int(args[0])
    except ValueError:
        update.message.reply_text('Invalid user id')
        return

    session = dbsession()
    sc = session.query(SinCounter).filter(
        SinCounter.tg_user_id == tg_user_id).first()
    if sc:
        sc.reset_sin()
        update.message.reply_text('User ' + make_tg_user_url(tg_user_id) +
                                  ' sin limit has been reset.',
                                  parse_mode='MARKDOWN')
        session.add(sc)
        session.commit()
        session.close()
    else:
        update.message.reply_text('User ' + make_tg_user_url(tg_user_id) +
                                  ' has not sinned...yet.',
                                  parse_mode='MARKDOWN')
示例#3
0
def command_sinadd(bot, update, args):
    if len(args) < 2:
        update.message.reply_text('Format: /sinadd <tg_user_id> <sin>')
        return

    # Parse arguments
    tg_user_id = None
    try:
        tg_user_id = int(args[0])
    except ValueError:
        update.message.reply_text('Invalid user id')
        return
    sin = None
    try:
        sin = int(args[1])
    except ValueError:
        update.message.reply_text('Invalid sin count')
        return

    session = dbsession()
    sc = session.query(SinCounter).filter(
        SinCounter.tg_user_id == tg_user_id).first()
    if not sc:
        sc = SinCounter(tg_user_id)
    sc.sin += sin
    update.message.reply_text(
        'User ' + make_tg_user_url(tg_user_id) +
        ' was given {} sin, they now have {}'.format(sin, sc.sin),
        parse_mode='MARKDOWN')
    session.add(sc)
    session.commit()
    session.close()
示例#4
0
def command_sin(bot, update):
    print('/sin')
    tguid = update.message.from_user.id

    session = dbsession()
    sc = session.query(SinCounter).filter(
        SinCounter.tg_user_id == tguid).first()
    if sc:
        update.message.reply_text('You have {} sin points'.format(sc.sin))
    else:
        update.message.reply_text('You haven\'t sinned...yet.')
示例#5
0
 def award_sin(tg_user, sin):
     session = dbsession()
     sc = session.query(SinCounter).filter(
         SinCounter.tg_user_id == tg_user.id).first()
     if not sc:
         sc = SinCounter(tg_user.id)
     sin = sc.award_sin_with_limit(sin)
     session.add(sc)
     session.commit()
     session.close()
     return sin
示例#6
0
def log_command(command, bot, update, result=None, message=None):
    session = dbsession()
    if not message:
        message = update.message.text
    log = UsageLog(message,
                   tg_user=update.message.from_user,
                   command=command,
                   result=result)
    session.add(log)
    session.commit()
    session.close()
示例#7
0
	def get_chat_blacklist(tg_chat):
		tags = []
		session = dbsession()
		# Query
		bls = session.query(ChatBlacklist)\
			.filter(ChatBlacklist.tg_chat_id == tg_chat.id)\
			.filter(ChatBlacklist.status == BLSTATUS_ACTIVE)\
			.all()
		for bl in bls:
			tags.append(bl.tag)
		session.close()
		return tags
示例#8
0
def cmd_greeting(bot, update):
    session = database.dbsession()

    # Query db for greeting
    greetcfg = session.query(GreetConfig).filter(
        GreetConfig.tg_chatid == update.message.chat_id).one_or_none()

    # Split message
    idx = update.message.text.find(' ')
    if idx == -1:
        reply = 'Type /greeting followed by what ' +\
         'you would like me to say when a new mortal joins this group.'
        if greetcfg:
            reply += ' The greeting for this group is:\n"{}"'.format(
                greetcfg.greeting)
            reply += ' \nDisable this greeting with /greeting delete.'
        else:
            reply += ' This group does not have a greeting set.'
        update.message.reply_text(reply)
        return
    greeting = update.message.text[idx + 1:]

    # Determine action: delete or set
    if greeting.lower() == 'delete':
        if greetcfg:
            session.delete(greetcfg)
            session.commit()
            update.message.reply_text('As you wish. I will no longer greet new ' + \
             'members of this group.')
        else:
            update.message.reply_text('I am not presently instructed to greet ' + \
             'new members of this group.')
    elif len(greeting) > GREETING_LENGTH_LIMIT:
        update.message.reply_text('The length of this greeting is too great for ' + \
         'me to remember. I can only remember greetings that are {} characters or less; '.format(GREETING_LENGTH_LIMIT) + \
         'the one you provided is {} characters. Try using a link to a website like pastebin.org.'.format(len(greeting)))
    else:
        if not greetcfg:
            greetcfg = GreetConfig(update.message.chat_id)
        greetcfg.greeting = greeting
        greetcfg.set_by = update.message.from_user.id
        session.add(greetcfg)
        session.commit()
        update.message.reply_text('As you wish. I will greet new members of this ' + \
         'group with the following message:\n"{}"'.format(greeting))
示例#9
0
def command_sinlimit(bot, update):
    tguid = update.message.from_user.id

    session = dbsession()
    sc = session.query(SinCounter).filter(
        SinCounter.tg_user_id == tguid).first()
    if sc:
        dt = sc.sin_reset - datetime.now()
        reset_str = None
        secs = math.floor(dt.total_seconds())
        if secs <= 0:
            reset_str = 'reset {} ago'.format(format_seconds(-secs))
        else:
            reset_str = 'resetting in {}'.format(format_seconds(secs))
        update.message.reply_text('You have {} sin available, {}.'.format(
            sc.sin_avail, reset_str))
    else:
        update.message.reply_text('You haven\'t sinned...yet.')
示例#10
0
def command_addchatbl(bot, update, args):
	if len(args) == 0:
		update.message.reply_text('Format: /addchatbl <tag>')
		return
	tag = args[0]
	session = dbsession()
	# Query for already-existing tag
	bl = session.query(ChatBlacklist)\
		.filter(ChatBlacklist.tg_chat_id == update.message.chat.id)\
		.filter(ChatBlacklist.tag == tag)\
		.filter(ChatBlacklist.status == BLSTATUS_ACTIVE)\
		.first()
	if bl:
		update.message.reply_text('Tag already blacklisted in this chat: ' + tag)
	else:
		bl = ChatBlacklist(update.message.chat, update.message.from_user, tag)
		session.add(bl)
		session.commit()
		update.message.reply_text('Added tag to this chat\'s blacklist: ' + tag)
	session.close()
示例#11
0
def command_delchatbl(bot, update, args):
	if len(args) == 0:
		update.message.reply_text('Format: /delchatbl <tag>')
		return
	tag = args[0]
	session = dbsession()
	# Query
	bls = session.query(ChatBlacklist)\
		.filter(ChatBlacklist.tg_chat_id == update.message.chat.id)\
		.filter(ChatBlacklist.tag == tag)\
		.filter(ChatBlacklist.status == BLSTATUS_ACTIVE)\
		.all()
	# Delete
	n = 0
	for bl in bls:
		bl.delete()
		session.add(bl)
		n += 1
	session.commit()
	session.close()
	if n > 0:
		update.message.reply_text('Deleted tag from chat blacklist: ' + tag)
	else:
		update.message.reply_text('This chat does not have this tag blacklisted: ' + tag)
示例#12
0
def command_delbl(bot, update, args):
	if len(args) == 0:
		update.message.reply_text('Format: /deleteblacklist <tag>')
		return
	tag = args[0]
	session = dbsession()
	# Query
	bls = session.query(UserBlacklist)\
		.filter(UserBlacklist.tg_user_id == update.message.from_user.id)\
		.filter(UserBlacklist.tag == tag)\
		.filter(UserBlacklist.status == BLSTATUS_ACTIVE)\
		.all()
	# Delete
	n = 0
	for bl in bls:
		bl.delete()
		session.add(bl)
		n += 1
	session.commit()
	session.close()
	if n > 0:
		update.message.reply_text('Deleted tag from your blacklist: ' + tag)
	else:
		update.message.reply_text('You have not blacklisted tag: ' + tag)
示例#13
0
def get_greeting(chat_id):
    session = database.dbsession()
    greetcfg = session.query(GreetConfig).filter(
        GreetConfig.tg_chatid == chat_id).one_or_none()
    return greetcfg.greeting if greetcfg else None
示例#14
0
def command_log(bot, update, args):
    session = dbsession()

    s = None
    if len(args) >= 1:
        if args[0] == 'user':
            i = None
            try:
                if args[1] == 'me':
                    i = update.message.from_user.id
                else:
                    i = int(args[1])
            except ValueError:
                pass
            if i != None:
                logs = session.query(UsageLog).filter(
                    UsageLog.tg_user_id == i).order_by(
                        UsageLog.recorded.desc()).limit(8).all()
                if len(logs) > 0:
                    s = 'Recent Log for [{tg_user_id}](tg://user?id={tg_user_id}):'.format(
                        tg_user_id=i)
                    for log in logs:
                        if log.command != None:
                            s += '\n`[{id}]`: {command}'.format(
                                id=log.id, command=log.command)
                        else:
                            s += '\n`[{id}]`: {message}'.format(
                                id=log.id, command=log.message)
                else:
                    s = 'No logs with that user id'
            else:
                s = 'Invalid user id'
        elif args[0] == 'entry':
            i = None
            try:
                i = int(args[1])
            except ValueError:
                pass
            if i != None:
                log = session.query(UsageLog).filter(UsageLog.id == i).one()
                if log:
                    s = '*Recorded*: {}'.format(
                        log.recorded.strftime(DATETIME_FORMAT))
                    if log.tg_user_id != None:
                        s += '\n*User:* [{tg_user_id}](tg://user?id={tg_user_id})'.format(
                            tg_user_id=log.tg_user_id)
                    if log.command != None:
                        s += '\n*Command:* {}'.format(log.command)
                    s += '\n*Message:*\n{}'.format(log.message)
                else:
                    s = 'Unknown entry number'
            else:
                s = 'Invalid entry number'
    else:
        s = 'Recent Log:'
        logs = session.query(UsageLog).order_by(
            UsageLog.recorded.desc()).limit(8).all()
        for log in logs:
            s += '\n`[{}]`: '.format(log.id)
            if log.tg_user_id != None:
                s += '[{tg_user_id}](tg://user?id={tg_user_id}): '.format(
                    tg_user_id=log.tg_user_id)
            if log.command != None:
                s += '/{}'.format(log.command)
            else:
                s += '{}'.format(log.message)

    update.message.reply_text(s, parse_mode='MARKDOWN')
示例#15
0
def log_simple(text, tg_user=None):
    session = dbsession()
    session.add(UsageLog(text, tg_user=tg_user))
    session.commit()
    session.close()
示例#16
0
# into the database. sin.json contained one json object, the keys
# were Telegram user IDs and the values were the sin count.

import json

from config import config
from sin import SinCounter
from database import Base, dbsession, init

with open("sin.json") as f:
	imported_sin = json.loads(f.read())

userIdStrs = imported_sin.keys()
print("There are " + str(len(userIdStrs)) + " user ids")

init()
session = dbsession()
i = 0
for userIdStr in userIdStrs:
	userId = int(userIdStr)
	sc = session.query(SinCounter).filter(SinCounter.tg_user_id == userId).first()
	if not sc:
		sc = SinCounter(userId)
	sc.sin = imported_sin[userIdStr]
	session.add(sc)
	i = i + 1
	if i % 25 == 0:
		print("{} / {}".format(i, len(userIdStrs)))
session.commit()
session.close()
print("Done")