word_cloud_bot/func.py
机器人总动员 8af81b178c None
2021-05-09 22:02:32 +08:00

127 lines
4.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import datetime
import time
import connector
import telegram
from telegram.ext import CommandHandler, MessageHandler, Filters
from config import TOKEN, LIMIT_COUNT, EXCLUSIVE_MODE
import schedule
from task import add_task
bot = telegram.Bot(token=TOKEN)
def start(update, context):
try:
connector.get_connection().keys()
print('进入start函数')
update.message.reply_text(
'在呢!系统运行正常~',
)
except Exception as e:
print(e)
print('进入start函数')
update.message.reply_text("系统故障Redis连接失败请检查")
update.message.reply_text("错误信息:" + str(e))
def rank(update, context):
try:
r = connector.get_connection()
chat_type = update.effective_chat.type
user_id = update.effective_user.id
chat_id = update.effective_message.chat_id
try:
username = update.effective_user.username
except Exception as e:
username = update.effective_user.id
# 限制为群组
if chat_type != "supergroup":
update.message.reply_text("此命令只有在群组中有效")
return
if r.exists("{}_frequency_limit".format(chat_id)):
r.setrange("{}_frequency_limit".format(chat_id), 0, int(r.get("{}_frequency_limit".format(chat_id))) + 1)
else:
struct_time = time.localtime(time.time())
# 数据过期时间为当前小时的 59 分
ex_time = datetime.datetime(
struct_time.tm_year,
struct_time.tm_mon,
struct_time.tm_mday,
struct_time.tm_hour,
59
)
r.set("{}_frequency_limit".format(chat_id), 1)
r.expireat("{}_frequency_limit".format(chat_id), ex_time)
count = int(r.get("{}_frequency_limit".format(chat_id)))
if count > LIMIT_COUNT:
update.message.reply_text("该群组在这个小时内的生成配额已经用完,请稍后再试~")
return
add_task(chat_id)
print("群组: {},用户: {}|{} 发起了主动触发请求".format(chat_id, username, user_id, ))
update.message.reply_text("统计数据将在分析完毕后发送到当前群组,请稍等~")
except Exception as e:
print("主动触发任务失败,请检查")
print(e)
def chat_content_exec(update, context):
try:
r = connector.get_connection()
text = update.message.text
chat_type = update.effective_chat.type
user_id = update.effective_user.id
chat_id = update.effective_message.chat_id
# 限制为群组
if chat_type != "supergroup":
return
# 限制文字长度不能超过80字
if len(text) > 80:
return
# 独享模式(仅授权群组可用)
if chat_id not in ["1231242141"] and EXCLUSIVE_MODE == 1:
return
try:
username = update.effective_user.username
except Exception as e:
username = update.effective_user.id
user = update.message.from_user
firstname = str(user["first_name"])
lastname = str(user["last_name"])
name = ""
if firstname != "None":
name = firstname + " "
if lastname != "None":
name += lastname
if len(name) == 0:
name = username
print("\n---------------------------")
print("内容: " + text[:10])
print("群组类型: " + str(chat_type))
print("用户ID: " + str(user_id))
print("chat_id: " + str(chat_id))
if "/" in text:
print("这是一条指令信息,跳过")
return
else:
if text[-1] not in ["", "", "", "", "", "!", "?", ",", ":", "."]:
r.append("{}_chat_content".format(chat_id), text + "")
else:
r.append("{}_chat_content".format(chat_id), text)
r.incrby("{}_total_message_amount".format(chat_id))
r.hincrby("{}_user_message_amount".format(chat_id), name)
print("---------------------------")
except Exception as e:
print(e)
print("用户数据提取、入库错误")
def check_schedule():
while True:
schedule.run_pending()
time.sleep(1)
start_handler = CommandHandler('start', start)
rank_handler = CommandHandler('rank', rank)
chat_content_handler = MessageHandler(Filters.text, chat_content_exec)