You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在discord.py中创建可检测密码强度的Discord命令

密码强度检测命令实现方案

1. 先明确密码强度判定规则

建议提前定好可自定义的评分逻辑,通用参考维度如下:

  • 长度维度:小于8位直接判定为极弱,8-12位得1分,12位及以上得2分
  • 字符类型维度:包含小写字母、大写字母、数字、特殊符号各得1分
  • 排除规则:匹配到常见弱密码库(如123456、password等)直接判定为极弱,存在连续4位以上相同字符扣1分
  • 最终分级:0分为极弱,1-2分为弱,3-4分为中等,5-6分为强

2. 实现核心检测工具函数

使用Python内置re正则库即可实现,无需额外依赖,和discord逻辑解耦方便后续调整:

import re
from typing import Tuple, List

# 可自行扩充常见弱密码库
COMMON_PASSWORDS = {"123456", "password", "123456789", "12345678", "qwerty", "1234567", "111111", "123123", "abc123"}

def check_password_strength(password: str) -> Tuple[str, int, List[str]]:
    score = 0
    feedback = []
    
    # 优先排查常见弱密码
    if password.lower() in COMMON_PASSWORDS:
        feedback.append("当前密码属于公开的常见弱密码,非常不安全")
        return ("极弱", 0, feedback)
    
    # 长度校验
    pwd_len = len(password)
    if pwd_len < 8:
        feedback.append("密码长度需至少8位")
        return ("极弱", 0, feedback)
    elif 8 <= pwd_len < 12:
        score += 1
        feedback.append("建议长度提升到12位以上获得更高安全等级")
    else:
        score += 2
    
    # 字符类型校验
    if re.search(r"[a-z]", password):
        score += 1
    else:
        feedback.append("建议加入小写字母提升强度")
    
    if re.search(r"[A-Z]", password):
        score += 1
    else:
        feedback.append("建议加入大写字母提升强度")
    
    if re.search(r"[0-9]", password):
        score += 1
    else:
        feedback.append("建议加入数字提升强度")
    
    if re.search(r"[!@#$%^&*()_+\-=\[\]{};':\"\\|,.<>\/?]", password):
        score += 1
    else:
        feedback.append("建议加入特殊符号提升强度")
    
    # 连续重复字符校验
    if re.search(r"(.)\1{3,}", password):
        score -= 1
        feedback.append("避免使用连续4位以上的相同字符")
    
    # 最终等级判定
    if score <= 2:
        level = "弱"
    elif 3 <= score <= 4:
        level = "中等"
    else:
        level = "强"
    
    return (level, score, feedback)

3. 对接discord.py rewrite命令逻辑

注意用户输入的密码属于敏感信息,不要在公频道返回,优先通过私信发送结果,同时自动删除用户公屏发送的密码消息避免泄露:

import discord
from discord.ext import commands

# 按需开启权限,不要全开不必要的权限
intents = discord.Intents.default()
intents.message_content = True
intents.dm_messages = True

bot = commands.Bot(command_prefix="!", intents=intents) # 可自行修改命令前缀

@bot.command(name="checkpwd", help="检测密码强度,结果将通过私信发送,使用示例:!checkpwd 你的密码")
async def check_password(ctx, *, password: str):
    # 立刻删除用户发送的包含密码的公屏消息
    await ctx.message.delete()
    level, score, feedback = check_password_strength(password)
    
    # 构造返回内容
    reply_msg = f"## 密码强度检测结果\n强度等级:{level}\n得分:{score}/6\n\n改进建议:\n"
    for tip in feedback:
        reply_msg += f"- {tip}\n"
    
    # 发送私信
    try:
        await ctx.author.send(reply_msg)
        await ctx.send(f"{ctx.author.mention} 检测结果已发送到你的私信,请查收", delete_after=5)
    except discord.Forbidden:
        await ctx.send(f"{ctx.author.mention} 无法向你发送私信,请开启服务器成员私信权限后重试", delete_after=5)

4. 注意事项

  • 需在Discord开发者后台开启对应的message content intent和私信权限,否则命令无法正常触发
  • 不要在任何日志中打印用户输入的密码,避免敏感信息泄露
  • 可根据需求扩展检测逻辑,比如增加是否包含用户名、生日等个人信息的判定规则

内容的提问来源于stack exchange,提问作者Leonardo V Koury

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 04:06:03