Discord鼓励消息机器人报索引越界及误触发新增提示问题求解
问题修复方案
问题A:任意输入都返回新增成功提示
根因:发送「New encouraging message added :)」的代码行缩进错误,没有放到+new命令的判断逻辑块内,所以无论是否触发+new命令都会执行。
修复方法:将该行缩进,嵌套到if msg.startswith('+new')的代码块中。
问题B:列表索引超出范围错误
根因有2个:
if "encouragements" in db.keys()对应的代码块缩进错误,和+del命令的判断逻辑平级,无论用户是否发送+del命令,只要数据库存在encouragements键,都会执行msg.split("+del",1)[1]代码,用户没发+del时split返回的列表只有1个元素,取索引1自然越界- 未判断用户发送的
+del命令后是否携带了有效数字参数,若用户只发送+del不带后缀,split后同样不存在索引1的元素
修复后完整代码
if msg.startswith('+inspire'): quote = get_quote() await message.channel.send(quote) options = starter_encouragements if "encouragements" in db.keys(): options = options + db["encouragements"].value if any(word in msg for word in sad_words): await message.channel.send(random.choice(options)) # 修复+new逻辑缩进 if msg.startswith('+new'): encouraging_message = msg.split("+new ",1)[1] update_encouragements(encouraging_message) await message.channel.send("New encouraging message added :)") # 修复+del逻辑缩进和参数判断 if msg.startswith("+del"): encouragements = [] if "encouragements" in db.keys(): # 先判断split后是否有合法参数 del_parts = msg.split("+del",1) if len(del_parts) < 2 or not del_parts[1].strip().isdigit(): await message.channel.send("请输入合法的删除序号,示例:+del 1") else: index = int(del_parts[1].strip()) delete_encouragement(index) encouragements = db["encouragements"] await message.channel.send(encouragements)
内容的提问来源于stack exchange,提问作者Snickzoryx
相关产品推荐
相关产品推荐

