[置顶]Bear - Typecho 主题
介绍看到bearblog 这个简洁的只剩下css的皮 移植而来演示https://b.imsun.org下载bear.zip
介绍看到bearblog 这个简洁的只剩下css的皮 移植而来演示https://b.imsun.org下载bear.zip
最近发现了一个方便自己部署的基于QQNT的QQ机器人项目.于是有了该文章项目地址https://github.com/super1207/install_llob/releases使用步骤下载llob_install.exe下载最新版本的QQ安装llob_install.exe,重启QQ参照文档安装NONEBOT需要准备Python3.11以上版本安装脚手架安装 pipxpython -m pip install --user pipx python -m pipx ensurepath安装脚手架pipx install nb-cli创建项目nb create按照提示操作项目模板[?] 选择一个要使用的模板: bootstrap (初学者或用户)项目名称[?] 项目名称: memos其他选项 请注意,多选项使用空格选中或取消,回车确认。 [?] 要使用哪些驱动器? FastAPI (FastAPI 驱动器)[?] 要使用哪些适配器? Console (基于终端的交互式适配器)[?] 立即安装依赖? (Y/n) Yes[?] 创建虚拟环境? (Y/n) Yes选择内置插件[?] 要使用哪些内置插件? echo运行项目在项目创建完成后,你可以在项目目录中使用以下命令来运行项目:nb run设置反向WSws://127.0.0.1:8080/onebot/v11/ws保存.即可此处参照文档 https://llonebot.github.io/zh-CN/guide/configuration插件给QQ机器人增加发送到memos 的功能在nonebot的项目memos下新建bot.py内容为import nonebot from nonebot.adapters.onebot.v11 import Adapter as ONEBOT_V11Adapter # 初始化 NoneBot nonebot.init() # 注册适配器 driver = nonebot.get_driver() driver.register_adapter(ONEBOT_V11Adapter) # 在这里加载插件 nonebot.load_builtin_plugins("echo") # 加载内置插件 nonebot.load_from_toml("pyproject.toml") # 从 toml 文件加载插件 # 如果有额外的插件目录,可以这样加载 # nonebot.load_plugins("src/plugins") if __name__ == "__main__": nonebot.run()在pyproject.toml中加入plugins = [] plugin_dirs = ["memos/plugins"]在项目目录下创建memos/plugins文件夹,在其下创建qq_to_memos.py内容为from nonebot import on_command, on_message, get_driver from nonebot.rule import to_me from nonebot.adapters.onebot.v11 import Bot, Event, Message from nonebot.params import CommandArg import json import os import httpx from typing import Dict, Any import logging # 配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', filename='memos_bot.log', filemode='a' ) logger = logging.getLogger(__name__) # 文件路径 JSON_FILE = "users_data.json" # 读取 JSON 数据 def read_json() -> Dict[str, Any]: if os.path.exists(JSON_FILE): with open(JSON_FILE, 'r', encoding='utf-8') as f: return json.load(f) return {} # 写入 JSON 数据 def write_json(data: Dict[str, Any]): with open(JSON_FILE, 'w', encoding='utf-8') as f: json.dump(data, f, ensure_ascii=False, indent=4) # 初始化函数 async def init(): if not os.path.exists(JSON_FILE): write_json({}) logger.info(f"Created new JSON file: {JSON_FILE}") # 注册命令 start = on_command("start", rule=to_me(), priority=5) @start.handle() async def handle_start(bot: Bot, event: Event, args: Message = CommandArg()): user_id = event.get_user_id() token = args.extract_plain_text().strip() if not token: await start.finish("请提供 Token,格式:/start <token>") logger.warning(f"User {user_id} failed to start due to missing token") return users_data = read_json() users_data[user_id] = {"token": token} write_json(users_data) logger.info(f"User {user_id} started successfully") await start.finish("绑定成功!现在您可以直接发送消息,我会将其保存到 Memos。") # 处理所有消息 memo = on_message(priority=5) @memo.handle() async def handle_memo(bot: Bot, event: Event): user_id = event.get_user_id() message = event.get_message() users_data = read_json() user_info = users_data.get(user_id) if not user_info: await memo.finish("您还未绑定,请先使用 /start <token> 命令绑定。") logger.warning(f"Unstarted user {user_id} attempted to send a memo") return token = user_info["token"] text_content = message.extract_plain_text() # 如果消息为空,不处理 if not text_content.strip(): return # 发送到 Memos async with httpx.AsyncClient() as client: try: payload = { "content": text_content.strip(), "visibility": "PUBLIC" } response = await client.post( "https://memos.ee/api/v1/memos", json=payload, headers={"Authorization": f"Bearer {token}"} ) response.raise_for_status() logger.info(f"Memo sent successfully for user {user_id}") except httpx.HTTPStatusError as e: logger.error(f"HTTP error occurred for user {user_id}: {e}") logger.error(f"Response content: {e.response.text}") await memo.finish(f"发送失败,错误代码:{e.response.status_code},请检查您的 Token 和网络连接。") return except Exception as e: logger.error(f"Unexpected error occurred for user {user_id}: {e}") await memo.finish("发送过程中发生意外错误,请稍后重试。") return await memo.finish("已成功发送到 Memos!") # 获取驱动器并注册启动事件 driver = get_driver() driver.on_startup(init) logger.info("Memos bot plugin initialized")API端点按自己需求更改即可.运行机器人nb run此时QQ机器人已经正常启动了.使用机器人在聊天界面 使用命令/start token{message type="success" content="token和/start之间有空格隔开"/}显示绑定成功此时发送消息即可转发到memos.且默认为公开的memos.如需默认为其他状态 需修改 "visibility" 的 值 .成功演示 https://memos.ee/m/oEBkwymeQTb6fRUeEcA9m5如果你想尝试一下此功能可以添加QQ机器人122790336需添加为好友且 在 https://memos.ee 注册获取token才可以使用.
具体步骤安装套件安装 ABB 套件 打开 关闭访问依次在浏览器输入http://IP地址:5000/webapi/auth.cgi?api=SYNO.API.Auth&version=3&method=login&account=管理员用户名&passwd=管理员用户密码&format= cookie返回{"data":{"did":"jqsoZU8SFKoZXsTCKt_n_xOpePvLONWzkP_W8cogbfnfRTDY-7juADOxNGw1mvPJLPNFfVwr-QjRbjVVoIageQ","sid":"6NeenURwdyzkUH9Q8kxwi3MqjLSpXOI_lHj09vTd0Cco2Cfc5Z24Gi635ZTelDvL5tmlfMkr-kdHCwKS2QNMeM"},"success":true}http://ip:5000/webapi/entry.cgi?api=SYNO.ActiveBackup.Activation&method=set&version=1&activated=true&serial_number=%22序列号%22返回{"data":{"activated":true},"success":true}
使用python这里使用到的是Python 的库:fonttools使用最新版 Python 的 pip 命令安装即可在 Shell 中使用:pip install fonttools常用汉字大约有3500字我使用的是这个现代汉语常用 3500 字.txt中文常用字库项目https://github.com/DavidSheh/CommonChineseCharacter取子集使用以下命令即可对字体文件取子集fonttools subset "$input_file" --text-file="$text_file" --output-file="$output_file"其中$input_file:输入的字体文件。$text_file:定义保留字符的纯文本文件路径。$output_file:输出的字体文件路径。取完子集完成之后字体从11M压缩到1.7M左右压缩安装模块brotlipip install brotli使用命令fonttools ttLib.woff2 compress "$input_file" -o "$output_file"其中$input_file:输入的字体文件。$output_file:输出的字体文件路径。再次压缩为 woff2 字体格式 大约840kb
bear 主题 可以使用Twikoo Artalk 等评论系统以Artalk为例输入<link href="https://artalk.loliko.cn/dist/Artalk.css" rel="stylesheet"> <script src="https://artalk.loliko.cn//dist/Artalk.js"></script> <div id="Comments"></div> <script> Artalk.init({ el: '#Comments', server: 'https://artalk.loliko.cn/', site: 'blog', }) </script>即可如需使用页面浏览 和 评论数的功能则在拓展中输入浏览量:<span class="artalk-pv-count"></span> · 评论数:<span class="artalk-comment-count"></span>即可,此功能依赖于评论系统
在自定义CSS中可以自定义背景body::before { content: ''; position: fixed; top: 0; left: 0; right: 0; bottom: 0; z-index: -520; pointer-events: none; } body::before { background: linear-gradient( 90deg, rgba(247, 149, 51, .1), rgba(243, 112, 85, .1) 15%, rgba(239, 78, 123, .1) 30%, rgba(161, 102, 171, .1) 44%, rgba(80, 115, 184, .1) 58%, rgba(16, 152, 173, .1) 72%, rgba(7, 179, 155, .1) 86%, rgba(109, 186, 130, .1)); /*背景颜色*/ background-size: 500%; animation: bgAnimation 15s linear infinite; /*执行动画*/ } @keyframes bgAnimation{ 0%{ background-position: 0% 50%; } 50%{ background-position: 100% 50%; } 100%{ background-position: 0% 50%; } }加入一个渐变色的背景
项目简介本项目是由mblog的作者最新开发的仿微信朋友圈的微博,基于NEXTJS+SQLITE3.目前正在快速迭代更新中..支持匿名评论/点赞支持引入网易云音乐,b站视频,插入链接等支持自定义头图,个人头像,网站标题等支持上传图片到S3兼容的云存储,支持本地存储适配手机支持暗黑模式数据库采用sqlite,可随时备份支持引入豆瓣读书/豆瓣电影,样式来源于这里项目地址https://github.com/kingwrcy/moments预览部署步骤建议使用Docker Compose方式部署mkdir /home/moments cd /home/moments mkdir docker-compose.yaml nano docker-compose.yaml 复制以下内容粘贴version: '3' services: moments: image: kingwrcy/moments:latest ports: - "3000:3000" volumes: - ./data:/app/data - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - ./config.properties:/app/data/config.properties:ro 然后nano config.properties 把以下内容复制粘贴# 站点url包括http/https NUXT_PUBLIC_SITE_URL= #是否启用评论 NUXT_PUBLIC_MOMENTS_COMMENT_ENABLE=true #是否显示评论 NUXT_PUBLIC_MOMENTS_SHOW_COMMENT=true #评论最大字数 NUXT_PUBLIC_MOMENTS_COMMENT_MAX_LENGTH=120 #评论的显示顺序,desc:倒序,asc:顺序 NUXT_PUBLIC_MOMENTS_COMMENT_ORDER_BY=desc #是否显示引入豆瓣读书/视频按钮 NUXT_PUBLIC_MOMENTS_TOOLBAR_ENABLE_DOUBAN=true #是否显示引入网易云音乐按钮 NUXT_PUBLIC_MOMENTS_TOOLBAR_ENABLE_MUSIC163=true #是否显示引入youtube,b站,在线视频按钮 NUXT_PUBLIC_MOMENTS_TOOLBAR_ENABLE_VIDEO=true #单条发言最大行数,最大10行 NUXT_PUBLIC_MOMENTS_MAX_LINE=4 #recaptchaV3代码中使用此网站密钥 NUXT_PUBLIC_GOOGLE_RECAPTCHA_SITE_KEY= #分页大小 NUXT_PUBLIC_PAGE_SIZE=10 #private #recaptchaV3通信密钥 NUXT_GOOGLE_RECAPTCHA_SECRET_KEY= #是否启用评论通知 NUXT_PUBLIC_NOTIFY_BY_EMAIL_ENABLE=false #管理员邮箱 NUXT_NOTIFY_MAIL= #邮局服务器地址 NUXT_MAIL_HOST= #邮局服务器端口465端口一般是加密的,587端口一般是不加密的 NUXT_MAIL_PORT=587 #邮局安全连接true/false NUXT_MAIL_SECURE=false #邮箱用户名 NUXT_MAIL_NAME= #邮箱密码 NUXT_MAIL_PASSWORD= #邮箱发件人 NUXT_MAIL_FROM= #邮箱发件人名称 NUXT_MAIL_FROM_NAME= #是否启用阿里云文本审核(只针对评论) NUXT_PUBLIC_ALIYUN_TEXT_JUDGE_ENABLE=false #阿里云AccessKey ID NUXT_ALIYUN_ACCESS_KEY_ID= #阿里云AccessKey Secret NUXT_ALIYUN_ACCESS_KEY_SECRET= 根据注释内容修改参数如不需要则保持默认即可启动容器运行docker-compose up -d 反向代理反向代理端口 3000 即可演示地址https://wenxs.cn
在别处看到的一种论调.写博客必须言之有物,必须有自己的思考.我的观点每个人想必都会有一些思考,但不是所有人都会诉诸于笔端,能够言之有物的记录下来.相比之下我们更喜欢记录生活中的有意思的事情,好吃的,好玩的,与谁一起度过的那些瞬间.如果你想留下什么思想,并和志趣相投的人产生思想上的碰撞,你可以写博客.如果你想非常单纯的记录日常的生活,你可以写博客.并没有人规定博客应该写什么.在博客最火热的时候大概也就是QQ空间,新浪博客大火的时候,每个人都可以用来做一些自己觉得很酷的事情.写上一些火星文或者一些四十五度角仰望天空的悲伤的文字.那时候的作家和明星也同样会写一些日常的琐事.与网民狂欢.在我的浅薄的认知里,博客就是一个工具一个载体.任何人可以随便使用它.你可以有自己的喜恶,但不能随意指摘别人的爱好.理解并尊重.其他微博客这种东西在时代的进程中虽说 取代了博客的地位.但是口碑和其更深的情怀却不曾留下.变成了更加商品化的东西.畅所欲言的时代也不复存在了.
执行完以前三步即可解决1.在宝塔面板的www文件下搜索所有的关于该域名的一切文件,删除2.用sqlite管理工具打开/www/server/panel/data/default.db并删除相关域名3.打开/www/server/panel/data/db下的site.db文件,并删除相关域名
修复AME免登陆下载官方解码包ssh连接群晖 使用root权限执行以下命令DSM7.1 AME版本3.0.1-2004curl http://code.imnks.com/ame3patch/ame71-2004.py | pythonDSM7.2 AME版本3.1.0-3005curl http://code.imnks.com/ame3patch/ame72-3005.py | python修复显示CPU型号全自动运行修改版本,无需再选择,执行完毕立即生效,去刷新几次浏览器curl http://code.imnks.com/ch_cpuinfo/ch_cpuinfo_cn.sh | bash
扫码自动添加COOKIE请先安装 wget 和 unzip请按照你的 cpu 架构进行下载//如果你是amd64架构(服务器,PC等)wget https://down.asbid.cn/Linux/JDC/AMD64.zip && unzip AMD64.zip//如果你是arm架构(N1,路由器,树莓派等)wget https://down.asbid.cn/Linux/JDC/ARM.zip && unzip ARM.zip其他架构或系统请自行编译开始使用chmod 777 JDC ./JDC第一次运行,自动生成配置文件并且程序会自动退出。如果你没有修改过青龙面板的端口,可直接执行下一步。如果不为默认端口,请自行修改 config.toml文件然后执行下面步骤nohup ./JDC &开始后台运行程序。程序默认端口为 5701。打开 http://ip:5701 即可看到面板如果无法打开请检查端口是否放行。更新教程如果你已经安装了旧版程序更新时如下操作。首先 kill 掉原来的程序。//查看原程序PID,第一行第二列为程序的PIDps -ajx|grep JDC//结束程序(*改为你的PID)kill -9 *****然后删除原来的程序和 config.toml 文件rm -rf JDC config.toml
起因debian 11 执行更新时提示404问题出现的原因从2023年4月23日起,debian的源包地址更换至新地址。解决办法执行nano /etc/apt/sources.list用一下内容替换deb http://archive.debian.org/debian/ stretch main contrib non-free deb-src http://archive.debian.org/debian/ stretch main contrib non-free deb http://archive.debian.org/debian-security/ stretch/updates main contrib non-free deb-src http://archive.debian.org/debian-security/ stretch/updates main contrib non-free deb http://archive.debian.org/debian/ stretch-backports main contrib non-free然后执行apt update更换国内清华源deb https://mirrors.tuna.tsinghua.edu.cn/debian-multimedia/ bullseye main non-free deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-multimedia/ bullseye main non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian-multimedia/ bullseye-backports main deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-multimedia/ bullseye-backports main更改完 sources.list 文件后请导入 deb-multimedia-keyring ,然后更新索引以生效。wget https://mirrors.tuna.tsinghua.edu.cn/debian-multimedia/pool/main/d/deb-multimedia-keyring/deb-multimedia-keyring_2016.8.1_all.deb dpkg -i deb-multimedia-keyring_2016.8.1_all.deb apt-get update
实现利用wget全站保存为html,然后再修改文件中的链接步骤把以下代码保存为html.php<?php $url = 'https://blog.asbid.cn'; //网址,不能以"/"结尾 $rurl=''; //要替换成路径或网址,可为空,不能以"/"结尾 $dir = __DIR__ . "/" . str_replace('https://', '', str_replace('http://', "", $url)); exec("clear",$clc); echo $clc[0]; echo "开始下载文件 "; exec("rm -rf {$dir}",$return); exec("wget -r -p -np {$url}",$return); $dirs = get_filenamesbydir($dir); //不处理非html文件 for ($i = 0; $i < count($dirs); $i++) { $file=str_replace(__DIR__, "", $dirs[$i]['file']); if (!preg_match("/html/",$file) ) { //删除对应的元素 unset($dirs[$i]); } } array_filter($dirs); sort($dirs);//重新生成索引下标 //网址处理 $count=count($dirs); for ($i = 0; $i < $count; $i++) { $content=str_replace($url,$rurl,file_get_contents($dirs[$i]['file'])); file_put_contents($dirs[$i]['file'],$content); $n=$i+1; exec("clear",$clc); echo $clc[0]; echo "文件下载完毕 "; echo "开始处理文件,共{$count}个文件需要处理,已处理{$n}个 "; } echo "处理完毕,文件目录:{$dir} "; function get_allfiles($path, &$files) { if (is_dir($path)) { $dp = dir($path); while ($file = $dp->read()) { if ($file !== "." && $file !== "..") { get_allfiles($path . "/" . $file, $files); } } $dp->close(); } if (is_file($path)) { $files[] = ['file' => $path]; } } function get_filenamesbydir($dir) { $files = array(); get_allfiles($dir, $files); return $files; } 然后执行php html.php