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()
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')
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()
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.')
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
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()
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
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))
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.')
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()
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)
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)
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
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')
def log_simple(text, tg_user=None): session = dbsession() session.add(UsageLog(text, tg_user=tg_user)) session.commit() session.close()
# 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")