mirror of
				https://github.com/LiteyukiStudio/LiteyukiBot.git
				synced 2025-11-04 14:36:24 +00:00 
			
		
		
		
	✨ message 统计
This commit is contained in:
		
							
								
								
									
										101
									
								
								liteyuki/utils/message/npl.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										101
									
								
								liteyuki/utils/message/npl.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,101 @@
 | 
			
		||||
import nonebot
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def convert_duration(text: str, default) -> float:
 | 
			
		||||
    """
 | 
			
		||||
    转换自然语言时间为秒数
 | 
			
		||||
    Args:
 | 
			
		||||
        text: 1d2h3m
 | 
			
		||||
        default: 出错时返回
 | 
			
		||||
 | 
			
		||||
    Returns:
 | 
			
		||||
        float: 总秒数
 | 
			
		||||
    """
 | 
			
		||||
    units = {
 | 
			
		||||
            "d" : 86400,
 | 
			
		||||
            "h" : 3600,
 | 
			
		||||
            "m" : 60,
 | 
			
		||||
            "s" : 1,
 | 
			
		||||
            "ms": 0.001
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    duration = 0
 | 
			
		||||
    current_number = ''
 | 
			
		||||
    current_unit = ''
 | 
			
		||||
    try:
 | 
			
		||||
        for char in text:
 | 
			
		||||
            if char.isdigit():
 | 
			
		||||
                current_number += char
 | 
			
		||||
            else:
 | 
			
		||||
                if current_number:
 | 
			
		||||
                    duration += int(current_number) * units[current_unit]
 | 
			
		||||
                    current_number = ''
 | 
			
		||||
                if char in units:
 | 
			
		||||
                    current_unit = char
 | 
			
		||||
                else:
 | 
			
		||||
                    current_unit = ''
 | 
			
		||||
 | 
			
		||||
        if current_number:
 | 
			
		||||
            duration += int(current_number) * units[current_unit]
 | 
			
		||||
 | 
			
		||||
        return duration
 | 
			
		||||
 | 
			
		||||
    except BaseException as e:
 | 
			
		||||
        nonebot.logger.info(f"convert_duration error: {e}")
 | 
			
		||||
        return default
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def convert_time_to_seconds(time_str):
 | 
			
		||||
    """转换自然语言时长为秒数
 | 
			
		||||
    Args:
 | 
			
		||||
        time_str: 1d2m3s
 | 
			
		||||
 | 
			
		||||
    Returns:
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    seconds = 0
 | 
			
		||||
    current_number = ''
 | 
			
		||||
 | 
			
		||||
    for char in time_str:
 | 
			
		||||
        if char.isdigit() or char == '.':
 | 
			
		||||
            current_number += char
 | 
			
		||||
        elif char == 'd':
 | 
			
		||||
            seconds += float(current_number) * 24 * 60 * 60
 | 
			
		||||
            current_number = ''
 | 
			
		||||
        elif char == 'h':
 | 
			
		||||
            seconds += float(current_number) * 60 * 60
 | 
			
		||||
            current_number = ''
 | 
			
		||||
        elif char == 'm':
 | 
			
		||||
            seconds += float(current_number) * 60
 | 
			
		||||
            current_number = ''
 | 
			
		||||
        elif char == 's':
 | 
			
		||||
            seconds += float(current_number)
 | 
			
		||||
            current_number = ''
 | 
			
		||||
 | 
			
		||||
    return int(seconds)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def convert_seconds_to_time(seconds):
 | 
			
		||||
    """转换秒数为自然语言时长
 | 
			
		||||
    Args:
 | 
			
		||||
        seconds: 10000
 | 
			
		||||
 | 
			
		||||
    Returns:
 | 
			
		||||
 | 
			
		||||
    """
 | 
			
		||||
    d = seconds // (24 * 60 * 60)
 | 
			
		||||
    h = (seconds % (24 * 60 * 60)) // (60 * 60)
 | 
			
		||||
    m = (seconds % (60 * 60)) // 60
 | 
			
		||||
    s = seconds % 60
 | 
			
		||||
 | 
			
		||||
    # 若值为0则不显示
 | 
			
		||||
    time_str = ''
 | 
			
		||||
    if d:
 | 
			
		||||
        time_str += f"{d}d"
 | 
			
		||||
    if h:
 | 
			
		||||
        time_str += f"{h}h"
 | 
			
		||||
    if m:
 | 
			
		||||
        time_str += f"{m}m"
 | 
			
		||||
    if not time_str:
 | 
			
		||||
        time_str = f"{s}s"
 | 
			
		||||
    return time_str
 | 
			
		||||
		Reference in New Issue
	
	Block a user