def _kick(to_kick, limit_secs=0, msg=None): if limit_secs: # 加入计时黑名单 black_list.set(to_kick, limit_secs) to_kick.remove() ret = '@{} 已被成功移出! 😈'.format(to_kick.name) start_new_thread(try_send, kwargs=dict(chat=to_kick, msg=msg)) if to_kick in kick_votes: voters = kick_votes[to_kick][0] voters = '\n'.join(map(lambda x: '@{}'.format(x.name), voters)) ret += '\n\n投票人:\n{}'.format(voters) return ret
now=datetime.datetime.now(), uptime=str(uptime).split('.')[0], memory='{:.2f} MB'.format(memory_usage / 1024**2), messages=len(messages)) def remove_qr(): if os.path.isfile(qr_path): # noinspection PyBroadException try: os.remove(qr_path) except: pass start_new_thread(run_flask_app, (qr_path, _status_text)) bot = Bot('bot.pkl', qr_callback=qr_callback, login_callback=remove_qr, logout_callback=_restart) bot.auto_mark_as_read = True if bot.self.name != bot_nick_name: logging.error('Wrong User!') bot.logout() _restart() # bot.chats(update=True) bot.enable_puid('bot.puid')
''' def heartbeat(): while bot.alive: time.sleep(3600) # noinspection PyBroadException try: logger.error("LCBot is Online") except ResponseError as e: if 1100 <= e.err_code <= 1102: logger.critical('LCBot offline: {}'.format(e)) _restart() start_new_thread(heartbeat) ''' 条件邀请 ''' def condition_invite(user): if user.sex == 2: female_groups = bot.groups().search(female_group)[0] try: female_groups.add_members(user, use_invitation=True) pass except: pass if (user.province in city_group.keys() or user.city in city_group.keys()): try:
return status_text fresh_groups() get_logger() #logger.error(str("登陆成功!" + get_time())) #start_new_thread(heartbeat) def fresh_bsj(): r = redis.Redis(host='localhost', port=6379, decode_responses=True) while True: content = r.rpop("content1") if content == None: time.sleep(60) else: logger.error(content) time.sleep(60) start_new_thread(fresh_bsj) @bot.register(groups, except_self=False) def sync_my_groups(msg): sync_message_in_groups(msg, groups) embed()
else: index = randrange(len(group)) target_group = group[index] try: target_group.add_members(user, use_invitation=True) except: user.send("邀请错误!机器人邀请好友进群已达当日限制。请您明日再试") else: user.send("该群状态有误,您换个关键词试试?") fresh_groups() get_logger() logger.error(str("机器人登陆成功!" + get_time())) start_new_thread(heartbeat) # 下方为消息处理 @bot.register(msg_types=FRIENDS) def new_friends(msg): ''' 处理加好友请求信息。 如果验证信息文本是字典的键值之一,则尝试拉群。 ''' random_sleep() user = msg.card.accept() if msg.text.lower() in config.keyword_of_group.keys(): invite(user, msg.text.lower()) else:
def main(): start_new_thread(heartbeat) bot.join()
def sync_message_in_groups(msg, groups, prefix=None, suffix=None, raise_for_unsupported=False, run_async=True): """ 将消息同步到多个微信群中 支持以下消息类型 * 文本 (`TEXT`) * 视频(`VIDEO`) * 文件 (`ATTACHMENT`) * 图片/自定义表情 (`PICTURE`) * 但不支持表情商店中的表情 * 名片 (`CARD`) * 仅支持公众号名片,以及自己发出的个人号名片 * 分享 (`SHARING`) * 会被转化为 `标题 + 链接` 形式的纯文本 * 语音 (`RECORDING`) * 会以文件方式发送 * 地图 (`MAP`) * 会转化为 `位置名称 + 地图链接` 形式的文本消息 :param Message msg: 需同步的消息对象 :param Group groups: 需同步的群列表 :param str prefix: * 转发时的 **前缀** 文本,原消息为文本时会自动换行 * 若不设定,则使用默认前缀作为提示 :param str suffix: * 转发时的 **后缀** 文本,原消息为文本时会自动换行 * 默认为空 :param bool raise_for_unsupported: | 为 True 时,将为不支持的消息类型抛出 `NotImplementedError` 异常 :param bool run_async: 是否异步执行,为 True 时不堵塞线程 :: my_groups = [group1, group2, group3 ...] @bot.register(my_groups, except_self=False) def sync_my_groups(msg): sync_message_in_groups(msg, my_groups) """ def process(): for group in groups: if group == msg.chat: continue msg.forward(chat=group, prefix=prefix, suffix=suffix, raise_for_unsupported=raise_for_unsupported) if prefix is None: prefix = forward_prefix(msg.member) if run_async: start_new_thread(process, use_caller_name=True) else: process()
def heartbeat(): while bot.alive: time.sleep(3600) # noinspection PyBroadException try: logger.error(get_time() + " 机器人目前在线,共有好友 【" + str(len(bot.friends())) + "】 群 【 " + str(len(bot.groups())) + "】") except ResponseError as e: if 1100 <= e.err_code <= 1102: logger.critical('xiaobai offline: {}'.format(e)) _restart() start_new_thread(heartbeat) def get_btshq(keyword): url = 'http://api.chbtc.com/data/v1/ticker?currency=' + keyword + '_cny' r = requests.get(url) # r.encoding = 'utf-8' # f = r.text.encode('utf-8') f = r.text print(f) doc = json.loads(f) return doc['ticker']['last'] ''' 定时提醒bts行情
group = bot.groups().search(g) if group: group[0].send(content) ##发送给朋友 else: friends = mail["subject"].replace(";", ";").replace( ",", ";").replace(" ", ";").split(";") for friend in friends: receiver = bot.search(friend) if receiver: receiver[0].send(content) # 删除邮件会导致id>maxid 此时重新定义id为maxid if mail_id > max_mail_id: mail_id = max_mail_id except Exception as e: logger.debug(e) mail_login() if __name__ == "__main__": mail_login() start_new_thread(heartbeat) start_new_thread(send_mail) while True: send_wechat() time.sleep(30) bot.join()