[DAY 22]纠团通知功能(2/3)

纠团的功能我把它切成两个部分

  1. 使用者输入讯息
  2. 背景执行
    今天先介绍使用者输入讯息的部分

使用者输入讯息

使用者藉由输入指令把纠团资讯汇入到资料库里

目前的能汇入的资讯有任务名称备注时间

之後可能会再添加个人数限制

一开始的指令格式是设定成用空格来区分各项资讯

/task  任务名称  备注  10/2-20:00"

但我发现蛮多人会不小心在备注或是名称多打个空格导致程序判断错误

所以後来分隔符我改成用"|"解决

将使用者的讯息分割完後先用len()来判断list里面的元素有几个

会这样做是因为使用者很常不会照你的指令格式去打,所以先用元素数量判断格式

判断完数量正确之後接着判断每项元素里的字串是否符合格式

根据测试经验最常出现错误的是时间这个元素

所以我这边直接try datetime.strptime(time_name, '%m/%d-%H:%M')

出现错误直接回传报错讯息给使用者

资料的储存我是用json格式来存,key值我是用数字来辨识,value是个字典格式储存各项资讯

这边附上关於使用者输入讯息的程序码,这是片段部分所以先不要拿它来执行

@commands.command()
#讯息范本 : task 藏宝图G12 主线5.0有80等脚色 10/2-20:00
async def task(self,ctx):
    self.count = 0
    error_message = f"\n参考指令范本: /task | 任务名称 | 备注 | 10/2-20:00"

    with open("setting.json",'r',encoding="utf8") as jfile:
        jdata = json.load(jfile)
    while str(self.id) in jdata:
        self.id = int(self.id)
        self.id += 1
        self.id = str(self.id)
    #拆解讯息
    # print(task)
    # print(condition)
    self.id = str(self.id)

    message_list = ctx.message.content.split("|")

    if len(message_list) == 4:
        #前处理讯息,把开头结尾空格拿掉
        prifix_name = message_list[0].lstrip().rstrip()
        task_name = message_list[1].lstrip().rstrip()
        condition_name = message_list[2].lstrip().rstrip()
        time_name = message_list[3].lstrip().rstrip()
        # 确认每项资讯符合规则
        if prifix_name != "/task":
            await ctx.message.reply(f"前缀输入错误"+error_message)

        try:
            datetime.strptime(time_name, '%m/%d-%H:%M')
        except BaseException:
            await ctx.message.reply("时间格式输入错误"+error_message)

        now_time = datetime.utcnow().replace(tzinfo=timezone.utc)
        now_time = now_time.astimezone(timezone(timedelta(hours=8)))
        now_time = now_time.strftime('%m/%d-%H:%M')
        if datetime.strptime(now_time, '%m/%d-%H:%M') > datetime.strptime(time_name, '%m/%d-%H:%M'):
            await ctx.message.reply("你填的时间比现在时间早~")

        task_info = {self.id:{"task":task_name,"condition":condition_name,"time":time_name,"url":ctx.message.jump_url}}
        jdata.update(task_info)

        with open("setting.json",'w',encoding="utf8") as jfile:
            jdata = json.dump(jdata,jfile,indent=4)

    elif len(message_list) == 3:
        #前处理讯息,把开头结尾空格拿掉
        prifix_name = message_list[0].lstrip().rstrip()
        task_name = message_list[1].lstrip().rstrip()
        condition_name = message_list[2].lstrip().rstrip()
        time_name = message_list[3].lstrip().rstrip()
        # 确认每项资讯符合规则
        if prifix_name != "/task":
            await ctx.message.reply(f"前缀输入错误"+error_message)

        try:
            datetime.strptime(time_name, '%m/%d-%H:%M')
        except BaseException:
            await ctx.message.reply("时间格式输入错误"+error_message)

        now_time = datetime.utcnow().replace(tzinfo=timezone.utc)
        now_time = now_time.astimezone(timezone(timedelta(hours=8)))
        now_time = now_time.strftime('%m/%d-%H:%M')
        if datetime.strptime(now_time, '%m/%d-%H:%M') > datetime.strptime(time_name, '%m/%d-%H:%M'):
            await ctx.message.reply("你填的时间比现在时间早~")

        task_info = {self.id:{"task":task_name,"time":time_name,"url":ctx.message.jump_url}}
        jdata.update(task_info)

        with open("setting.json",'w',encoding="utf8") as jfile:
            jdata = json.dump(jdata,jfile,indent=4)
    else:
        await ctx.message.reply("格式输入错误~"+error_message)

<<:  Day23 跟着官方文件学习Laravel-Collection

>>:  Day 22 Flask-SocketIO

初学者跪着学JavaScript Day15 : 阵列中没被定义的空值(empty item)

一日客语:中文:加油 客语:gaˊ iuˇ 嘎2声U Array:是物件只是做了小调整变成阵列 特性...

范例一:使用MNIST资料进行训练与模型部署

在第一个范例中将会使用MNIST手写办识资料集进行训练与模型部署. MNIST说明 MNIST da...

[ Day 1 ] - 变数与型别

变数与型别 变数是什麽呢? 把他想成是一个容器,容器可以存放需要的资讯,这一个资讯可以是一段文字、一...

Day-14 Pytorch 的 Gradient 计算

之前我们看过用 Python 计算 Gradient 必须要手动计算偏微分之後,才有办法算出 那如...

[DAY09] 部署用 Designer 做好的 Pipeline 到 Batch

DAY09 部署用 Designer 做好的 Pipeline 到 Batch 有些应用场合是 Ba...