def initial_handler(self, msg, chat_handler): if len(GroupMembership.select().where(GroupMembership.user == chat_handler.user)) > 0: groups = "Here are your groups:\n" for group_mem in GroupMembership.select().where(GroupMembership.user == chat_handler.user): groups += " " + group_mem.group.group_name + "\n" self.finished() yield from chat_handler.sender.sendMessage(groups) else: self.finished() yield from chat_handler.sender.sendMessage(_s["msg_nousergroups"])
def initial_handler(self, msg, chat_handler): if len(GroupMembership.select().where(GroupMembership.user == chat_handler.user)) > 0: groups = "Please respond with the name of the group you would like to mute\n\n" groups += "Currently you are in the following groups:\n" options = [] for group_mem in GroupMembership.select().where(GroupMembership.user == chat_handler.user): groups += " " + group_mem.group.group_name + "\n" options.append(group_mem.group.group_name) self.current_handler = self.handle_group yield from chat_handler.sender.sendMessage(groups, reply_markup={'keyboard': [options]}) else: yield from chat_handler.sender.sendMessage(_s["msg_usernogroups"])
async def auto_group_char(user, character): try: player_name = user.display_name() # find all group links for this character char_links = [ set(link.group.group_name for link in GroupLink.select().where( GroupLink.character_field_name == field_name, GroupLink.field_value == getattr(character, field_name))) for field_name in Character._meta.fields.keys() ] flat_links = set.union(*char_links) for linked_group_name in flat_links: linked_group = Group.select().where( Group.group_name == linked_group_name).get() add = True link_fields = { link.character_field_name: False for link in GroupLink.select().where( GroupLink.group == linked_group) } # make sure this character satisfies every link for this group for link in GroupLink.select().where( GroupLink.group == linked_group): if getattr(character, link.character_field_name) == link.field_value: link_fields[link.character_field_name] = True for lf in link_fields: add = add and link_fields[lf] approved = linked_group.auto_approval if len(GroupApproval.select().where( GroupApproval.user == user, GroupApproval.group == linked_group)) > 0: approved = True if add and approved: GroupMembership.create_or_get(user=user, group=linked_group) logging.warning("Added " + player_name + " to " + linked_group.group_name) except: traceback.print_exc()
def initial_handler(self, msg, chat_handler): if len(GroupMembership.select().where( GroupMembership.user == chat_handler.user)) > 0: groups = "Please respond with the name of the group you would like to mute\n\n" groups += "Currently you are in the following groups:\n" options = [] for group_mem in GroupMembership.select().where( GroupMembership.user == chat_handler.user): groups += " " + group_mem.group.group_name + "\n" options.append(group_mem.group.group_name) self.current_handler = self.handle_group yield from chat_handler.sender.sendMessage( groups, reply_markup={'keyboard': [options]}) else: yield from chat_handler.sender.sendMessage(_s["msg_usernogroups"])
async def legacy_pinggroup(request): group = request.match_info.get('group', "group") text = request.match_info.get('text', "'message'") fromp = request.match_info.get('from', "'message'") tasks = [] success = 0 # look up the group, for each user id send the 'message' for member in GroupMembership.select().where( GroupMembership.group == Group.select().where( Group.legacy_name == group)): tasks.append( safe_send(member.user.telegram_id, "Ping from " + fromp + " to " + group + ":\n\n" + text)) success += 1 def chunks(l, n): for i in range(0, len(l), n): yield l[i:i + n] start_time = time.time() for chunk in chunks(tasks, get_config_item("THROTTLE_CHUNK_SIZE", 20)): await asyncio.gather(*chunk) await asyncio.sleep(1) elapsed = time.time() - start_time rounded = math.floor(elapsed * 100) / 100 msg = "Ping sent to " + str(success) + " users in " + str( rounded) + " seconds" return web.Response(body=msg.encode('utf-8'))
async def legacy_pinggroup(request): group = request.match_info.get('group', "group") text = request.match_info.get('text', "'message'") fromp = request.match_info.get('from', "'message'") tasks = [] success = 0 # look up the group, for each user id send the 'message' for member in GroupMembership.select().where(GroupMembership.group==Group.select().where(Group.legacy_name == group)): tasks.append(safe_send(member.user.telegram_id, "Ping from "+fromp+" to "+group+":\n\n"+text)) success += 1 def chunks(l, n): for i in range(0, len(l), n): yield l[i:i+n] start_time = time.time() for chunk in chunks(tasks, get_config_item("THROTTLE_CHUNK_SIZE", 20)): await asyncio.gather(*chunk) await asyncio.sleep(1) elapsed = time.time() - start_time rounded = math.floor(elapsed*100)/100 msg = "Ping sent to "+str(success)+" users in "+str(rounded)+" seconds" return web.Response(body=msg.encode('utf-8'))
async def initial_handler(self, msg, chat_handler): if len(Group.select().where(Group.group_name == get_config_item( "OPS_GROUP", "ncdot"))) > 0: ncdotgroup = Group.select().where( Group.group_name == get_config_item("OPS_GROUP", "ncdot")).get() if len(GroupMembership.select().where( GroupMembership.group == ncdotgroup, GroupMembership.user == chat_handler.user)) > 0: try: r = await aiohttp.get( get_config_item("OPS_JSON_URL", 'ncdotopsurl')) self._ops = (await r.json())["ops"] self.finished() if self._ops != []: await self.send_template(chat_handler, "OPS") else: await chat_handler.sender.sendMessage("No ops planned") except: traceback.print_exc() self.finished() await chat_handler.sender.sendMessage("error getting !ops") else: self.finished() await chat_handler.sender.sendMessage( "you are not in ncdot group") else: self.finished() await chat_handler.sender.sendMessage("no ncdot group")
async def auto_group_char(user, character): try: player_name = user.display_name() # find all group links for this character char_links = [ set(link.group.group_name for link in GroupLink.select().where( GroupLink.character_field_name == field_name, GroupLink.field_value == getattr(character, field_name)) ) for field_name in Character._meta.fields.keys() ] flat_links = set.union(*char_links) for linked_group_name in flat_links: linked_group = Group.select().where(Group.group_name == linked_group_name).get() add = True link_fields = {link.character_field_name: False for link in GroupLink.select().where(GroupLink.group == linked_group)} # make sure this character satisfies every link for this group for link in GroupLink.select().where(GroupLink.group == linked_group): if getattr(character, link.character_field_name) == link.field_value: link_fields[link.character_field_name] = True for lf in link_fields: add = add and link_fields[lf] approved = linked_group.auto_approval if len(GroupApproval.select().where( GroupApproval.user == user, GroupApproval.group == linked_group)) > 0: approved = True if add and approved: GroupMembership.create_or_get( user=user, group=linked_group ) logging.warning("Added " + player_name + " to " + linked_group.group_name) except: traceback.print_exc()
def handle_message(self, msg, chat_handler): content_type, chat_type, chat_id = telepot.glance2(msg) tasks = [] success = 0 failure = 0 muted = 0 for group_membership in GroupMembership.select().where(GroupMembership.group == self._group): try: if not Mute.select().where(Mute.group == self._group, Mute.user==group_membership.user, Mute.until > datetime.datetime.now()): telegram_id = group_membership.user.telegram_id main_character_name = chat_handler.user.main_character.name group_name = self._group.group_name if content_type == "text": tasks.append(self.safe_send(telegram_id, main_character_name, group_name, msg)) elif content_type == "photo": tasks.append(self.bot.sendMessage(telegram_id,"Ping from:" + main_character_name + " to " + group_name)) tasks.append(self.bot.sendPhoto(telegram_id, msg["photo"][1]["file_id"], caption=msg["caption"])) elif content_type == "document": tasks.append(self.bot.sendMessage(telegram_id,"Ping from:" + main_character_name + " to " + group_name)) tasks.append(self.bot.sendDocument(telegram_id, msg["document"]["file_id"])) elif content_type == "voice": tasks.append(self.bot.sendMessage(telegram_id,"Ping from:" + main_character_name + " to " + group_name)) tasks.append(self.bot.sendVoice(telegram_id, msg["voice"]["file_id"])) elif content_type == "video": tasks.append(self.bot.sendMessage(telegram_id,"Ping from:" + main_character_name + " to " + group_name)) tasks.append(self.bot.sendVideo(telegram_id, msg["video"]["file_id"])) elif content_type == "sticker": tasks.append(self.bot.sendMessage(telegram_id,"Ping from:" + main_character_name + " to " + group_name)) tasks.append(self.bot.sendSticker(telegram_id, msg["sticker"]["file_id"])) success += 1 else: muted += 1 except: failure += 1 self.finished() start_time = time.time() yield from chat_handler.throttle(tasks) elapsed = time.time() - start_time rounded = math.floor(elapsed*100)/100 yield from chat_handler.sender.sendMessage( "Ping sent to "+str(success)+" users in "+str(rounded)+" seconds" )
def handle_group(self, msg, chat_handler): if (yield from assert_text(msg,chat_handler)): group_name = msg["text"] if len(Group.select().where(Group.group_name==group_name)) > 0 : self._group = Group.select().where(Group.group_name == group_name).get() if chat_handler.user.auth_level > 2: self.current_handler = self.handle_message yield from chat_handler.sender.sendMessage(_s["msg_pingmessageq"],reply_markup={'hide_keyboard': True}) elif len(GroupMembership.select().where(GroupMembership.group == self._group, GroupMembership.user == chat_handler.user)) > 0: self.current_handler = self.handle_message yield from chat_handler.sender.sendMessage(_s["msg_pingmessageq"],reply_markup={'hide_keyboard': True}) else: yield from chat_handler.sender.sendMessage(_s["msg_notagroup"]) else: yield from chat_handler.sender.sendMessage(_s["msg_notagroup"])
async def initial_handler(self, msg, chat_handler): if len(Group.select().where(Group.group_name == get_config_item("OPS_GROUP", "ncdot"))) > 0: ncdotgroup = Group.select().where(Group.group_name == get_config_item("OPS_GROUP", "ncdot")).get() if len(GroupMembership.select().where(GroupMembership.group == ncdotgroup, GroupMembership.user == chat_handler.user))> 0: try: r = await aiohttp.get(get_config_item("OPS_JSON_URL", 'ncdotopsurl')) self._ops = (await r.json())["ops"] self.finished() if self._ops != []: await self.send_template(chat_handler, "OPS") else: await chat_handler.sender.sendMessage("No ops planned") except: traceback.print_exc() self.finished() await chat_handler.sender.sendMessage("error getting !ops") else: self.finished() await chat_handler.sender.sendMessage("you are not in ncdot group") else: self.finished() await chat_handler.sender.sendMessage("no ncdot group")
def handle_group(self, msg, chat_handler): if (yield from assert_text(msg, chat_handler)): group_name = msg["text"] if len(Group.select().where(Group.group_name == group_name)) > 0: self._group = Group.select().where( Group.group_name == group_name).get() if chat_handler.user.auth_level > 2: self.current_handler = self.handle_message yield from chat_handler.sender.sendMessage( _s["msg_pingmessageq"], reply_markup={'hide_keyboard': True}) elif len(GroupMembership.select().where( GroupMembership.group == self._group, GroupMembership.user == chat_handler.user)) > 0: self.current_handler = self.handle_message yield from chat_handler.sender.sendMessage( _s["msg_pingmessageq"], reply_markup={'hide_keyboard': True}) else: yield from chat_handler.sender.sendMessage( _s["msg_notagroup"]) else: yield from chat_handler.sender.sendMessage(_s["msg_notagroup"])
async def legacy_parse(request): global last_message, last_message_time data = await request.post() raw = data["messages"] #remove irc formatting pattern = r'[\x02\x0F\x16\x1D\x1F]|\x03(\d{,2}(,\d{,2})?)?' raw = re.sub(pattern, '', raw) if raw[-2:] == ",]": raw = raw[:-2] + "]" parsed = [] try: parsed = json.loads(raw) except Exception: e = sys.exc_info()[0] print(e) traceback.print_exc() print(raw) r = re.compile( get_config_item("IRSSI_PING_FORMAT", "\[BROADCAST/([\w\s;]*)]\s(\w*)\:\s(.*)")) msg = "" for pingrow in parsed: #ping_time = pingrow["time"] #sender = pingrow["sender"] message = pingrow["message"] m = r.search(message) legacy_groups = m.groups()[0].split(";") legacy_sender = m.groups()[1] message = m.groups()[2] if pingrow[ "message"] != last_message or last_message_time + datetime.timedelta( minutes=30) < datetime.datetime.now(): last_message = pingrow["message"] last_message_time = datetime.datetime.now() for group in legacy_groups: group_name = group.lower().strip() tasks = [] success = 0 # look up the group, for each user id send the 'message' for member in GroupMembership.select().where( GroupMembership.group == Group.select().where( Group.legacy_name == group_name)): tasks.append( safe_send( member.user.telegram_id, "Ping from " + legacy_sender + " to " + group_name + ":\n\n" + message)) success += 1 def chunks(l, n): for i in range(0, len(l), n): yield l[i:i + n] start_time = time.time() for chunk in chunks(tasks, get_config_item("THROTTLE_CHUNK_SIZE", 20)): await asyncio.gather(*chunk) await asyncio.sleep(1) elapsed = time.time() - start_time rounded = math.floor(elapsed * 100) / 100 msg += "Ping sent to " + str( success) + " users for " + group_name + " in " + str( rounded) + " seconds\n" print(msg) return web.Response(body=msg.encode('utf-8'))
async def legacy_parse(request): global last_message, last_message_time data = await request.post() raw = data["messages"] #remove irc formatting pattern = r'[\x02\x0F\x16\x1D\x1F]|\x03(\d{,2}(,\d{,2})?)?' raw = re.sub(pattern, '', raw) if raw[-2:] == ",]": raw = raw[:-2]+"]" parsed = [] try: parsed = json.loads(raw) except Exception: e = sys.exc_info()[0] print(e) traceback.print_exc() print(raw) r = re.compile(get_config_item("IRSSI_PING_FORMAT", "\[BROADCAST/([\w\s;]*)]\s(\w*)\:\s(.*)")) msg = "" for pingrow in parsed: #ping_time = pingrow["time"] #sender = pingrow["sender"] message = pingrow["message"] m = r.search(message) legacy_groups = m.groups()[0].split(";") legacy_sender = m.groups()[1] message = m.groups()[2] if pingrow["message"] != last_message or last_message_time + datetime.timedelta(minutes=30) < datetime.datetime.now(): last_message = pingrow["message"] last_message_time = datetime.datetime.now() for group in legacy_groups: group_name = group.lower().strip() tasks = [] success = 0 # look up the group, for each user id send the 'message' for member in GroupMembership.select().where(GroupMembership.group==Group.select().where(Group.legacy_name == group_name)): tasks.append(safe_send(member.user.telegram_id, "Ping from "+legacy_sender+" to "+group_name+":\n\n"+message)) success += 1 def chunks(l, n): for i in range(0, len(l), n): yield l[i:i+n] start_time = time.time() for chunk in chunks(tasks, get_config_item("THROTTLE_CHUNK_SIZE", 20)): await asyncio.gather(*chunk) await asyncio.sleep(1) elapsed = time.time() - start_time rounded = math.floor(elapsed*100)/100 msg += "Ping sent to "+str(success)+" users for "+group_name+" in "+str(rounded)+" seconds\n" print(msg) return web.Response(body=msg.encode('utf-8'))
def handle_message(self, msg, chat_handler): content_type, chat_type, chat_id = telepot.glance2(msg) tasks = [] success = 0 failure = 0 muted = 0 for group_membership in GroupMembership.select().where( GroupMembership.group == self._group): try: if not Mute.select().where( Mute.group == self._group, Mute.user == group_membership.user, Mute.until > datetime.datetime.now()): telegram_id = group_membership.user.telegram_id main_character_name = chat_handler.user.main_character.name group_name = self._group.group_name if content_type == "text": tasks.append( self.safe_send(telegram_id, main_character_name, group_name, msg)) elif content_type == "photo": tasks.append( self.bot.sendMessage( telegram_id, "Ping from:" + main_character_name + " to " + group_name)) tasks.append( self.bot.sendPhoto(telegram_id, msg["photo"][1]["file_id"], caption=msg["caption"])) elif content_type == "document": tasks.append( self.bot.sendMessage( telegram_id, "Ping from:" + main_character_name + " to " + group_name)) tasks.append( self.bot.sendDocument(telegram_id, msg["document"]["file_id"])) elif content_type == "voice": tasks.append( self.bot.sendMessage( telegram_id, "Ping from:" + main_character_name + " to " + group_name)) tasks.append( self.bot.sendVoice(telegram_id, msg["voice"]["file_id"])) elif content_type == "video": tasks.append( self.bot.sendMessage( telegram_id, "Ping from:" + main_character_name + " to " + group_name)) tasks.append( self.bot.sendVideo(telegram_id, msg["video"]["file_id"])) elif content_type == "sticker": tasks.append( self.bot.sendMessage( telegram_id, "Ping from:" + main_character_name + " to " + group_name)) tasks.append( self.bot.sendSticker(telegram_id, msg["sticker"]["file_id"])) success += 1 else: muted += 1 except: failure += 1 self.finished() start_time = time.time() yield from chat_handler.throttle(tasks) elapsed = time.time() - start_time rounded = math.floor(elapsed * 100) / 100 yield from chat_handler.sender.sendMessage("Ping sent to " + str(success) + " users in " + str(rounded) + " seconds")