<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Starlr blog</title><description>爱你所爱</description><link>https://www.xc-lr.cn/</link><language>zh_CN</language><item><title>关于本站的一些域名</title><link>https://www.xc-lr.cn/posts/site-domain/</link><guid isPermaLink="true">https://www.xc-lr.cn/posts/site-domain/</guid><description>此站点可访问的域名</description><pubDate>Wed, 30 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;ul&gt;
&lt;li&gt;https://mcxclr.top&lt;/li&gt;
&lt;li&gt;https://blog.182030.xyz&lt;/li&gt;
&lt;li&gt;https://8.6.8.f.0.7.4.0.1.0.0.2.ip6.arpa&lt;/li&gt;
&lt;li&gt;https://20120720.xyz&lt;/li&gt;
&lt;li&gt;https://www.xc-lr.cn&lt;/li&gt;
&lt;/ul&gt;
</content:encoded></item><item><title>通过Cloudflare Tunnel使用SSH</title><link>https://www.xc-lr.cn/posts/ssh-by-tunnel/</link><guid isPermaLink="true">https://www.xc-lr.cn/posts/ssh-by-tunnel/</guid><description>通过Cloudflare Tunnel连接无公网IP的服务</description><pubDate>Wed, 04 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;在没有公网的条件下我们想访问无公网IP往往只能通过FRP或IPv6，本篇文章将介绍使用Cloudflare Tunnel连接内网中的SSH服务&lt;/p&gt;
&lt;h1&gt;准备&lt;/h1&gt;
&lt;h2&gt;先决条件&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://dash.cloudflare.com&quot;&gt;Cloudflare&lt;/a&gt;账号，没有的自行注册一个，并需绑定一张信用卡（不会扣费）&lt;/li&gt;
&lt;li&gt;一个托管在Cloudflare上的域名&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;安装Tunnel&lt;/h2&gt;
&lt;p&gt;打开&lt;a href=&quot;https://one.dash.cloudflare.com&quot;&gt;Zero Trust&lt;/a&gt;团队名随便写一个，在左侧边栏找到 &lt;strong&gt;网络&lt;/strong&gt; ，选择 &lt;strong&gt;连接器&lt;/strong&gt; 。进来后点击 &lt;strong&gt;添加隧道&lt;/strong&gt; ，隧道类型选项 &lt;strong&gt;Cloudflared&lt;/strong&gt; ，名称依旧随便取，保存隧道后选择系统类型，下面我以ubuntu 64-bit 为例&lt;/p&gt;
&lt;h3&gt;安装 cloudflared&lt;/h3&gt;
&lt;p&gt;可将给的shell脚本保存为.sh执行，连上需远程ssh的终端，执行&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cat &amp;lt;&amp;lt; &apos;EOF&apos; &amp;gt; Install_cloudflared.sh
#!/bin/bash

# Add cloudflare gpg key
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-public-v2.gpg | sudo tee /usr/share/keyrings/cloudflare-public-v2.gpg &amp;gt;/dev/null

# Add this repo to your apt repositories
echo &apos;deb [signed-by=/usr/share/keyrings/cloudflare-public-v2.gpg] https://pkg.cloudflare.com/cloudflared any main&apos; | sudo tee /etc/apt/sources.list.d/cloudflared.list

# install cloudflared
sudo apt-get update &amp;amp;&amp;amp; sudo apt-get install cloudflared
EOF
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;赋予权限&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chmod +x Install_cloudflared.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;执行脚本安装&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;./Install_cloudflared.sh
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;连接&lt;/h3&gt;
&lt;p&gt;执行连接页面给的 &lt;em&gt;让计算机每次启动时自动运行隧道&lt;/em&gt; 这条命令&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo cloudflared service install &amp;lt;你的令牌&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;若 &lt;strong&gt;Connectors&lt;/strong&gt; 列表中出现了您的设备，则说明安装成功。&lt;/p&gt;
&lt;h1&gt;配置Tunnel及应用&lt;/h1&gt;
&lt;h4&gt;发布应用程序路由&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;子域：随便填 示例：ssh&lt;/li&gt;
&lt;li&gt;域：选择你的域名&lt;/li&gt;
&lt;li&gt;路径：空着&lt;/li&gt;
&lt;li&gt;服务类型：SSH&lt;/li&gt;
&lt;li&gt;URL：127.0.0.1&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;配置应用程序&lt;/h3&gt;
&lt;p&gt;侧栏中选中 &lt;strong&gt;访问控制&lt;/strong&gt; → &lt;strong&gt;应用程序&lt;/strong&gt; → &lt;strong&gt;添加应用程序&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;类型选择 &lt;strong&gt;自托管&lt;/strong&gt; ，名称依旧随便写，会话持续时间看你自己，我这里选的是6小时&lt;/p&gt;
&lt;p&gt;点击 &lt;strong&gt;添加公共主机名&lt;/strong&gt;
输入方式默认，但子域及域要填写与&lt;em&gt;&lt;strong&gt;发布应用程序路由&lt;/strong&gt;&lt;/em&gt;  &lt;strong&gt;一致的&lt;/strong&gt; ，展开下面的&lt;strong&gt;浏览器呈现设置&lt;/strong&gt; 启用&lt;em&gt;允许自动 Cloudflared 身份验证&lt;/em&gt;&lt;br /&gt;
浏览器呈现选择&lt;strong&gt;SSH&lt;/strong&gt;&lt;br /&gt;
下面需创建一个策略，名称依旧随便写，操作选择&lt;em&gt;允许&lt;/em&gt;&lt;br /&gt;
认证方式自己选一个方便的，我这里选的是EMAIL即邮箱，其它的看自己最后点保存，回到配置页面，选择好刚刚配置的规则，没其它要求一直点下一步，至此配置就结束了。&lt;/p&gt;
&lt;h1&gt;最终体验&lt;/h1&gt;
&lt;p&gt;打开你的域名，此时应会跳转到Cloudflare的验证界面，按照你自己选择的验证方式过后应该就会跳转到输入&lt;em&gt;User&lt;/em&gt; 的界面，输入你的用户名提交后输入密码，至此就大功告成了。&lt;/p&gt;
</content:encoded></item><item><title>Bot使用文档</title><link>https://www.xc-lr.cn/posts/how-use-bot/</link><guid isPermaLink="true">https://www.xc-lr.cn/posts/how-use-bot/</guid><description>星辰旅人Bot使用文档</description><pubDate>Sat, 25 Oct 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;:::warning
变量部分均使用{}包裹，多选项用/分隔
:::&lt;/p&gt;
&lt;h1&gt;LLM&lt;/h1&gt;
&lt;h2&gt;Deepseek&lt;/h2&gt;
&lt;p&gt;切换命令：&lt;strong&gt;#Deepseek&lt;/strong&gt;
常用模型，回复速度快，稳定
缺点：无法识别图片&lt;/p&gt;
&lt;h2&gt;Gemini&lt;/h2&gt;
&lt;p&gt;切换命令：#Gemini
可以识别图片
缺点：有速率限制，超过范围会报错429&lt;/p&gt;
&lt;h2&gt;GPT&lt;/h2&gt;
&lt;p&gt;切换命令：#GPT4/#GPT
此模型为替代模型，可联网搜索
缺点：由于是非官方API，服务可能不稳&lt;/p&gt;
&lt;h1&gt;rua&lt;/h1&gt;
&lt;p&gt;命令：#rua {@一个用户/QQ号}
介绍：生成rua表情&lt;/p&gt;
&lt;h1&gt;发电&lt;/h1&gt;
&lt;p&gt;命令：#发电{目标名称}
介绍：生成一段表白话(?&lt;/p&gt;
&lt;h1&gt;我今天棒不棒&lt;/h1&gt;
&lt;p&gt;命令：我今天棒不棒
介绍：给出你今天的分数&lt;/p&gt;
&lt;h1&gt;enc解密&lt;/h1&gt;
&lt;p&gt;命令：#enc解密 {解密内容}
介绍：解密被enc加密过的内容&lt;/p&gt;
&lt;h1&gt;生图&lt;/h1&gt;
&lt;p&gt;命令：#生图 {Pixiv/ACG}  {标签}
介绍：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pixiv为从p站拉取一张图&lt;/li&gt;
&lt;li&gt;ACG的标签只有：随机、电脑壁纸、头像、手机背景、壁纸&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;http&lt;/h1&gt;
&lt;p&gt;命令：#http {网址}
介绍：测试网站是否能访问并返回状态码&lt;/p&gt;
&lt;h1&gt;Banme&lt;/h1&gt;
&lt;p&gt;命令：banme
介绍：当bot为该群管理时会禁用1~5小时，适用于安心睡觉&lt;/p&gt;
&lt;h1&gt;今日运势&lt;/h1&gt;
&lt;p&gt;命令：今日运势
介绍：返回今日运势&lt;/p&gt;
&lt;h1&gt;名人名言&lt;/h1&gt;
&lt;p&gt;命令：#名人名言 {引用一条消息}
介绍：制作一个名言图片&lt;/p&gt;
&lt;h1&gt;MC服务器状态&lt;/h1&gt;
&lt;p&gt;命令：#mcs {服务器地址}
介绍：查看此服务器状态及在线人数&lt;/p&gt;
&lt;h1&gt;名言&lt;/h1&gt;
&lt;p&gt;命令：#名言 {引用一条消息}
介绍：同上名人名言&lt;/p&gt;
&lt;h1&gt;抖音解析&lt;/h1&gt;
&lt;p&gt;命令：发送抖音链接触发
介绍：解析抖音视频并发送&lt;/p&gt;
&lt;h1&gt;点歌&lt;/h1&gt;
&lt;p&gt;命令：#点歌 {歌名/歌曲id}
介绍：仅能解析网易云歌曲&lt;/p&gt;
&lt;h1&gt;狐狸图&lt;/h1&gt;
&lt;p&gt;命令：狐狸图
介绍：随机发送一张狐狸图&lt;/p&gt;
&lt;h1&gt;一言&lt;/h1&gt;
&lt;p&gt;命令：#名言
介绍：找一句好听的名言&lt;/p&gt;
&lt;h1&gt;天气&lt;/h1&gt;
&lt;p&gt;命令：#天气 {城市名称}
介绍：当前天气及未来三天天气&lt;/p&gt;
&lt;h1&gt;签到&lt;/h1&gt;
&lt;p&gt;命令：签到
介绍：签到功能&lt;/p&gt;
&lt;h1&gt;转码&lt;/h1&gt;
&lt;p&gt;命令：#转码 {文字/网址(需带https)}
介绍：将文字或网页转换为二维码&lt;/p&gt;
&lt;h1&gt;ping&lt;/h1&gt;
&lt;p&gt;命令：#ping {域名/ip}
介绍：由bot所运行的服务器ping 4次目标地址&lt;/p&gt;
&lt;h1&gt;大头照&lt;/h1&gt;
&lt;p&gt;命令：#大头照 {@一个用户/QQ号}
介绍：发送该用户的QQ头像&lt;/p&gt;
&lt;h1&gt;whois&lt;/h1&gt;
&lt;p&gt;命令：#whois {域名}
介绍：查询该域名信息&lt;/p&gt;
&lt;h1&gt;点赞&lt;/h1&gt;
&lt;p&gt;命令：赞我/超我
介绍：给你QQ名片点赞&lt;/p&gt;
&lt;h1&gt;伪造消息&lt;/h1&gt;
&lt;p&gt;命令：#伪造消息 {QQ号/@一个用户}说{内容}&lt;br /&gt;
多条消息格式：#伪造消息 {QQ号/@一个用户}说{消息1}|{QQ号/@一个用户}说{消息2}&lt;br /&gt;
更多条以此类推
介绍：转发伪造合并转发的消息&lt;/p&gt;
&lt;h1&gt;角色扮演&lt;/h1&gt;
&lt;p&gt;命令：#角色扮演&lt;br /&gt;
介绍：查看Bot的所有预设&lt;/p&gt;
</content:encoded></item><item><title>fuwari修复RSS图片不显示</title><link>https://www.xc-lr.cn/posts/fuwari-rss/</link><guid isPermaLink="true">https://www.xc-lr.cn/posts/fuwari-rss/</guid><description>修复RSS图片链接问题</description><pubDate>Sat, 27 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;前言&lt;/h1&gt;
&lt;p&gt;啊大家都知道，fuwari的RSS如果你用的是相对路径，那么生成的RSS将也是相对路径，但这样就看不了图了啊，所以本章将带你修复它&lt;/p&gt;
&lt;h1&gt;修改RSS配置文件&lt;/h1&gt;
&lt;p&gt;打开&lt;strong&gt;src/pages/rss.xml.ts&lt;/strong&gt;，当然你也可以直接删了&lt;br /&gt;
直接一个全选删除再将下面的配置粘贴填入&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import rss from &apos;@astrojs/rss&apos;;
import sanitizeHtml from &apos;sanitize-html&apos;;
import MarkdownIt from &apos;markdown-it&apos;;
import { getCollection } from &apos;astro:content&apos;;
import { siteConfig } from &apos;@/config&apos;;
import { parse as htmlParser } from &apos;node-html-parser&apos;;
import { getImage } from &apos;astro:assets&apos;;
import type { APIContext, ImageMetadata } from &apos;astro&apos;;
import type { RSSFeedItem } from &apos;@astrojs/rss&apos;;
import { getSortedPosts } from &apos;@/utils/content-utils&apos;;

const markdownParser = new MarkdownIt();

// get dynamic import of images as a map collection
const imagesGlob = import.meta.glob&amp;lt;{ default: ImageMetadata }&amp;gt;(
	&apos;/src/content/**/*.{jpeg,jpg,png,gif,webp}&apos;, // include posts and assets
);

export async function GET(context: APIContext) {
	if (!context.site) {
		throw Error(&apos;site not set&apos;);
	}

	// Use the same ordering as site listing (pinned first, then by published desc)
	const posts = await getSortedPosts();
	const feed: RSSFeedItem[] = [];

	for (const post of posts) {
		// convert markdown to html string
		const body = markdownParser.render(post.body);
		// convert html string to DOM-like structure
		const html = htmlParser.parse(body);
		// hold all img tags in variable images
		const images = html.querySelectorAll(&apos;img&apos;);

		for (const img of images) {
			const src = img.getAttribute(&apos;src&apos;);
			if (!src) continue;

			// Handle content-relative images and convert them to built _astro paths
			if (src.startsWith(&apos;./&apos;) || src.startsWith(&apos;../&apos;)) {
				let importPath: string | null = null;

				if (src.startsWith(&apos;./&apos;)) {
					// Path relative to the post file directory
					const prefixRemoved = src.slice(2);
					importPath = `/src/content/posts/${prefixRemoved}`;
				} else {
					// Path like ../assets/images/xxx -&amp;gt; relative to /src/content/
					const cleaned = src.replace(/^\.\.\//, &apos;&apos;);
					importPath = `/src/content/${cleaned}`;
				}

				const imageMod = await imagesGlob[importPath]?.()?.then((res) =&amp;gt; res.default);
				if (imageMod) {
					const optimizedImg = await getImage({ src: imageMod });
					img.setAttribute(&apos;src&apos;, new URL(optimizedImg.src, context.site).href);
				}
			} else if (src.startsWith(&apos;/&apos;)) {
				// images starting with `/` are in public dir
				img.setAttribute(&apos;src&apos;, new URL(src, context.site).href);
			}
		}

		feed.push({
			title: post.data.title,
			description: post.data.description,
			pubDate: post.data.published,
			link: `/posts/${post.slug}/`,
			// sanitize the new html string with corrected image paths
			content: sanitizeHtml(html.toString(), {
				allowedTags: sanitizeHtml.defaults.allowedTags.concat([&apos;img&apos;]),
			}),
		});
	}

	return rss({
		title: siteConfig.title,
		description: siteConfig.subtitle || &apos;No description&apos;,
		site: context.site,
		items: feed,
		customData: `&amp;lt;language&amp;gt;${siteConfig.lang}&amp;lt;/language&amp;gt;`,
	});
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;保存了，还需要安装一个pnpm包，不用管是什么，能帮我们转换成链接就是的了&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;pnpm add node-html-parser
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;:::warning
在推送到仓库时，你可能会遇到warning: in the working copy of &apos;pnpm-lock.yaml&apos;, LF will be replaced by CRLF the next time Git touches it 这是由于空格不同引起的，但并不会影响部署，忽略即可
:::&lt;/p&gt;
</content:encoded></item><item><title>为fuwari增加一个404界面</title><link>https://www.xc-lr.cn/posts/fuwari-404/</link><guid isPermaLink="true">https://www.xc-lr.cn/posts/fuwari-404/</guid><description>为fuwari添加一个好看的404界面</description><pubDate>Wed, 24 Sep 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;本文章分为两部分&lt;/h1&gt;
&lt;h3&gt;适配多语言的404界面&lt;/h3&gt;
&lt;p&gt;打开&lt;strong&gt;src/i18n/i18nKey.ts&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	license = &quot;license&quot;,
	friends = &quot;friends&quot;,

	// 404 page
	notFound = &quot;notFound&quot;,
	notFoundTitle = &quot;notFoundTitle&quot;,
	notFoundMessage = &quot;notFoundMessage&quot;,
	backToHome = &quot;backToHome&quot;,
	viewArchive = &quot;viewArchive&quot;,
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;再分别打开languages下的&lt;strong&gt;en.ts&lt;/strong&gt;和&lt;strong&gt;zh_CN.ts&lt;/strong&gt;&lt;br /&gt;
en.ts&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	[Key.license]: &quot;License&quot;,
	[Key.friends]: &quot;Friends&quot;,

	// 404 page
	[Key.notFound]: &quot;Page Not Found&quot;,
	[Key.notFoundTitle]: &quot;Oops! Page Not Found&quot;,
	[Key.notFoundMessage]: &quot;The page you are looking for doesn&apos;t exist. It may have been moved or deleted.&quot;,
	[Key.backToHome]: &quot;Back to Home&quot;,
	[Key.viewArchive]: &quot;View Archive&quot;,
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;zh_CN.ts&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;	[Key.license]: &quot;许可协议&quot;,
	[Key.friends]: &quot;友链&quot;,

	// 404 page
	[Key.notFound]: &quot;页面未找到&quot;,
	[Key.notFoundTitle]: &quot;哎呀！页面走丢了&quot;,
	[Key.notFoundMessage]: &quot;您访问的页面不存在，可能已被删除或链接有误。&quot;,
	[Key.backToHome]: &quot;返回首页&quot;,
	[Key.viewArchive]: &quot;查看归档&quot;,
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最后在&lt;strong&gt;src/pages&lt;/strong&gt;目录下创建&lt;strong&gt;404.astro&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
import { Icon } from &quot;astro-icon/components&quot;;
import MainGridLayout from &quot;../layouts/MainGridLayout.astro&quot;;
import I18nKey from &quot;../i18n/i18nKey&quot;;
import { i18n } from &quot;../i18n/translation&quot;;
import { url } from &quot;../utils/url-utils&quot;;
import { siteConfig } from &quot;../config&quot;;
---

&amp;lt;MainGridLayout title={i18n(I18nKey.notFound)} description={i18n(I18nKey.notFoundMessage)}&amp;gt;
    &amp;lt;div class=&quot;flex w-full rounded-[var(--radius-large)] overflow-hidden relative min-h-96&quot;&amp;gt;
        &amp;lt;div class=&quot;card-base z-10 px-6 md:px-12 py-8 md:py-12 relative w-full&quot;&amp;gt;
            &amp;lt;!-- 404 Content --&amp;gt;
            &amp;lt;div class=&quot;flex flex-col items-center text-center space-y-6&quot;&amp;gt;
                &amp;lt;!-- Large 404 Number --&amp;gt;
                &amp;lt;div class=&quot;relative opacity-0 animate-fade-in-up&quot;&amp;gt;
                    &amp;lt;div class=&quot;text-8xl md:text-9xl font-bold bg-gradient-to-br from-[var(--primary)] to-[oklch(0.65_0.18_var(--hue))] bg-clip-text text-transparent select-none&quot;&amp;gt;
                        404
                    &amp;lt;/div&amp;gt;
                    &amp;lt;!-- Decorative elements --&amp;gt;
                    &amp;lt;div class=&quot;absolute -top-4 -right-4 w-8 h-8 bg-[var(--primary)] rounded-full opacity-20 animate-pulse&quot;&amp;gt;&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;absolute -bottom-2 -left-2 w-6 h-6 bg-[var(--primary)] rounded-full opacity-30 animate-pulse&quot; style=&quot;animation-delay: 0.5s;&quot;&amp;gt;&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;

                &amp;lt;!-- Title and Message --&amp;gt;
                &amp;lt;div class=&quot;space-y-3 max-w-md opacity-0 animate-fade-in-up animate-delay-100&quot;&amp;gt;
                    &amp;lt;h1 class=&quot;text-2xl md:text-3xl font-bold text-[var(--primary)]&quot;&amp;gt;
                        {i18n(I18nKey.notFoundTitle)}
                    &amp;lt;/h1&amp;gt;
                    &amp;lt;p class=&quot;text-75 text-base md:text-lg leading-relaxed&quot;&amp;gt;
                        {i18n(I18nKey.notFoundMessage)}
                    &amp;lt;/p&amp;gt;
                &amp;lt;/div&amp;gt;

                &amp;lt;!-- Illustration --&amp;gt;
                &amp;lt;div class=&quot;py-4 opacity-0 animate-fade-in-up animate-delay-200&quot;&amp;gt;
                    &amp;lt;div class=&quot;relative w-32 h-32 mx-auto animate-float&quot;&amp;gt;
                        &amp;lt;!-- Simple geometric illustration --&amp;gt;
                        &amp;lt;div class=&quot;absolute inset-0 bg-gradient-to-br from-[var(--primary)] to-[oklch(0.65_0.18_var(--hue))] rounded-full opacity-10&quot;&amp;gt;&amp;lt;/div&amp;gt;
                        &amp;lt;div class=&quot;absolute inset-4 bg-[var(--card-bg)] rounded-full border-2 border-[var(--primary)] border-opacity-20&quot;&amp;gt;&amp;lt;/div&amp;gt;
                        &amp;lt;div class=&quot;absolute inset-0 flex items-center justify-center&quot;&amp;gt;
                            &amp;lt;Icon name=&quot;fa6-solid:location-crosshairs&quot; class=&quot;w-12 h-12 text-[var(--primary)] opacity-60&quot; /&amp;gt;
                        &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;

                &amp;lt;!-- Action Buttons --&amp;gt;
                &amp;lt;div class=&quot;flex flex-col sm:flex-row gap-3 pt-4 opacity-0 animate-fade-in-up animate-delay-300&quot;&amp;gt;
                    &amp;lt;a href={url(&quot;/&quot;)} 
                       class=&quot;btn-regular px-6 py-3 rounded-xl font-medium transition-all duration-200 hover:scale-105 active:scale-95 flex items-center justify-center gap-2&quot;&amp;gt;
                        &amp;lt;Icon name=&quot;fa6-solid:house&quot; class=&quot;w-4 h-4&quot; /&amp;gt;
                        {i18n(I18nKey.backToHome)}
                    &amp;lt;/a&amp;gt;
                    &amp;lt;a href={url(&quot;/archive&quot;)} 
                       class=&quot;btn-card px-6 py-3 rounded-xl font-medium transition-all duration-200 hover:scale-105 active:scale-95 flex items-center justify-center gap-2 border border-[var(--line-divider)]&quot;&amp;gt;
                        &amp;lt;Icon name=&quot;fa6-solid:box-archive&quot; class=&quot;w-4 h-4&quot; /&amp;gt;
                        {i18n(I18nKey.viewArchive)}
                    &amp;lt;/a&amp;gt;
                    &amp;lt;a href={url(&quot;/about&quot;)} 
                       class=&quot;btn-card px-6 py-3 rounded-xl font-medium transition-all duration-200 hover:scale-105 active:scale-95 flex items-center justify-center gap-2 border border-[var(--line-divider)]&quot;&amp;gt;
                        &amp;lt;Icon name=&quot;fa6-solid:circle-info&quot; class=&quot;w-4 h-4&quot; /&amp;gt;
                        {i18n(I18nKey.about)}
                    &amp;lt;/a&amp;gt;
                &amp;lt;/div&amp;gt;

                &amp;lt;!-- Additional Help Text --&amp;gt;
                &amp;lt;div class=&quot;pt-6 text-sm text-50&quot;&amp;gt;
                    &amp;lt;p class=&quot;transition-all duration-300&quot;&amp;gt;
                        {siteConfig.lang === &apos;zh_CN&apos; ? &apos;如果您认为这是一个错误，请联系网站管理员。&apos; : &apos;If you believe this is an error, please contact the site administrator.&apos;}
                    &amp;lt;/p&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
    &amp;lt;/div&amp;gt;
&amp;lt;/MainGridLayout&amp;gt;

&amp;lt;style&amp;gt;
    @keyframes float {
        0%, 100% { transform: translateY(0px); }
        50% { transform: translateY(-10px); }
    }
    
    @keyframes fadeInUp {
        from {
            opacity: 0;
            transform: translateY(30px);
        }
        to {
            opacity: 1;
            transform: translateY(0);
        }
    }
    
    .animate-float {
        animation: float 3s ease-in-out infinite;
    }
    
    .animate-fade-in-up {
        animation: fadeInUp 0.6s ease-out forwards;
    }
    
    .animate-delay-100 {
        animation-delay: 0.1s;
    }
    
    .animate-delay-200 {
        animation-delay: 0.2s;
    }
    
    .animate-delay-300 {
        animation-delay: 0.3s;
    }
    
    .animate-delay-400 {
        animation-delay: 0.4s;
    }
&amp;lt;/style&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;h3&gt;单语言404.astro&lt;/h3&gt;
&lt;p&gt;此方法直接在&lt;strong&gt;src/pages&lt;/strong&gt;目录下创建404.astro即可&lt;br /&gt;
由于我没有语言的404，这里附上二叉树树的404界面&lt;br /&gt;
预览：&lt;img src=&quot;https://www.xc-lr.cn/_astro/2x-404.BqRnNpLa.jpg&quot; alt=&quot;2x-404&quot; /&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;---
import Layout from &quot;@/layouts/Layout.astro&quot;;
import MainGridLayout from &quot;@/layouts/MainGridLayout.astro&quot;;
import { Icon } from &quot;astro-icon/components&quot;;
import { siteConfig } from &quot;@/config&quot;;
---

&amp;lt;Layout title=&quot;页面未找到&quot;&amp;gt;
        &amp;lt;MainGridLayout&amp;gt;
                &amp;lt;div class=&quot;flex flex-col items-center justify-center min-h-[60vh] text-center px-4&quot;&amp;gt;
                        &amp;lt;!-- 404 图标 --&amp;gt;
                        &amp;lt;div class=&quot;mb-8&quot;&amp;gt;
                                &amp;lt;div class=&quot;relative&quot;&amp;gt;
                                        &amp;lt;div class=&quot;text-8xl md:text-9xl font-bold text-[var(--primary)] opacity-20&quot;&amp;gt;
                                                404
                                        &amp;lt;/div&amp;gt;
                                        &amp;lt;div class=&quot;absolute inset-0 flex items-center justify-center&quot;&amp;gt;
                                                &amp;lt;Icon name=&quot;fa6-solid:face-sad-tear&quot; class=&quot;text-6xl md:text-7xl text-[var(--primary)]&quot; /&amp;gt;
                                        &amp;lt;/div&amp;gt;
                                &amp;lt;/div&amp;gt;
                        &amp;lt;/div&amp;gt;

                        &amp;lt;!-- 错误信息 --&amp;gt;
                        &amp;lt;div class=&quot;card-base p-8 max-w-md mx-auto mb-8&quot;&amp;gt;
                                &amp;lt;h1 class=&quot;text-2xl md:text-3xl font-bold text-90 mb-4&quot;&amp;gt;
                                        页面走丢了
                                &amp;lt;/h1&amp;gt;
                                &amp;lt;p class=&quot;text-75 mb-6 leading-relaxed&quot;&amp;gt;
                                        抱歉，您访问的页面不存在或已被移动。
                                        &amp;lt;br&amp;gt;
                                        请检查URL是否正确，或者返回首页继续浏览。
                                &amp;lt;/p&amp;gt;

                                &amp;lt;!-- 导航按钮 --&amp;gt;
                                &amp;lt;div class=&quot;flex flex-col sm:flex-row gap-3 justify-center&quot;&amp;gt;
                                        &amp;lt;a href=&quot;/&quot; class=&quot;btn-regular-dark px-6 py-3 rounded-lg text-white font-medium&quot;&amp;gt;
                                                &amp;lt;Icon name=&quot;fa6-solid:house&quot; class=&quot;mr-2&quot; /&amp;gt;
                                                返回首页
                                        &amp;lt;/a&amp;gt;
                                        &amp;lt;a href=&quot;/archive/&quot; class=&quot;btn-regular px-6 py-3 rounded-lg font-medium&quot;&amp;gt;
                                                &amp;lt;Icon name=&quot;fa6-solid:box-archive&quot; class=&quot;mr-2&quot; /&amp;gt;
                                                文章归档
                                        &amp;lt;/a&amp;gt;
                                &amp;lt;/div&amp;gt;
                        &amp;lt;/div&amp;gt;

                        &amp;lt;!-- 返回提示 --&amp;gt;
                        &amp;lt;div class=&quot;mt-8 text-50 text-sm&quot;&amp;gt;
                                &amp;lt;p class=&quot;flex items-center justify-center&quot;&amp;gt;
                                        &amp;lt;Icon name=&quot;fa6-solid:clock-rotate-left&quot; class=&quot;mr-2&quot; /&amp;gt;
                                        您也可以使用浏览器的后退按钮返回上一页
                                &amp;lt;/p&amp;gt;
                        &amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
        &amp;lt;/MainGridLayout&amp;gt;
&amp;lt;/Layout&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
</content:encoded></item><item><title>BA周年庆直接9个彩</title><link>https://www.xc-lr.cn/posts/ba2th/</link><guid isPermaLink="true">https://www.xc-lr.cn/posts/ba2th/</guid><description>两个亚子还有礼服日奈</description><pubDate>Thu, 07 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;快哉快哉
&lt;img src=&quot;https://www.xc-lr.cn/_astro/yazi.qys32oei.jpg&quot; alt=&quot;亚子&quot; /&gt;&lt;br /&gt;
&lt;img src=&quot;https://www.xc-lr.cn/_astro/rinai.DskzNARm.jpg&quot; alt=&quot;日奈&quot; /&gt;&lt;br /&gt;
还有我的支付宝和QQ主题😋&lt;br /&gt;
&lt;img src=&quot;https://www.xc-lr.cn/_astro/ba-alipay.DXWVFi6v.jpg&quot; alt=&quot;支付宝&quot; /&gt;&lt;br /&gt;
&lt;img src=&quot;https://www.xc-lr.cn/_astro/ba-qq.BNIUo13z.jpg&quot; alt=&quot;QQ&quot; /&gt;&lt;/p&gt;
</content:encoded></item><item><title>fuwari接入评论功能</title><link>https://www.xc-lr.cn/posts/comment/</link><guid isPermaLink="true">https://www.xc-lr.cn/posts/comment/</guid><description>让你的fuwari接入评论，并让它在文章末显示出</description><pubDate>Mon, 04 Aug 2025 00:00:00 GMT</pubDate><content:encoded>&lt;h1&gt;Giscus&lt;/h1&gt;
&lt;p&gt;想要接入评论，肯定需要一个三方平台 &lt;a href=&quot;https://giscus.app/zh-CN&quot;&gt;Giscus&lt;/a&gt;
Giscus就是一个非常合适的平台&lt;/p&gt;
&lt;h1&gt;配置Giscus&lt;/h1&gt;
&lt;p&gt;首先去github创建一个存储库，&lt;strong&gt;一定要是公开库&lt;/strong&gt;
然后在仓库设置中&lt;strong&gt;启用&lt;/strong&gt;&lt;code&gt;Discussion&lt;/code&gt;功能&lt;br /&gt;
前往https://giscus.app/zh-CN
在&lt;code&gt;仓库&lt;/code&gt;一栏中点击第二步的蓝字安装giscus，最后填写自己的用户名及刚刚创建的仓库名称&lt;/p&gt;
&lt;h3&gt;映射&lt;/h3&gt;
&lt;p&gt;我只建议使用&lt;code&gt;pathname&lt;/code&gt;：以文章路径区分评论区，即使换域名也能匹配&lt;br /&gt;
其它映射可以看官方介绍&lt;br /&gt;
分类选择&lt;strong&gt;公告（announcements）&lt;/strong&gt;&lt;br /&gt;
特性个人建议勾选&lt;strong&gt;1 3 4&lt;/strong&gt;&lt;br /&gt;
主题默认即可，也可以尝试官方的其它主题&lt;br /&gt;
最后将给出的JS复制&lt;/p&gt;
&lt;h1&gt;配置fuwari&lt;/h1&gt;
&lt;p&gt;在&lt;code&gt;src/pages/posts/&lt;/code&gt;目录下找到&lt;code&gt;[...slug].astro&lt;/code&gt;，在它的&lt;strong&gt;135行&lt;/strong&gt;插入&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;div id=&quot;giscus-comments&quot; style=&quot;margin-top: 3rem;&quot;&amp;gt;
  你的JS
&amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;最后本地测试一下，没问题就可以部署到服务器了&lt;/p&gt;
</content:encoded></item><item><title>edgeone加速worker</title><link>https://www.xc-lr.cn/posts/edgeone-worker/</link><guid isPermaLink="true">https://www.xc-lr.cn/posts/edgeone-worker/</guid><description>如何使用edgeone加速cf worker</description><pubDate>Tue, 29 Jul 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;有人问：主包主包cloudflare worker访问速度太慢了，有没有更强势的访问速度呢？&lt;/p&gt;
&lt;p&gt;有的兄弟，有的&lt;/p&gt;
&lt;p&gt;去 &lt;a href=&quot;https://edgeone.ai/zh/get-free-plan&quot;&gt;edgeone&lt;/a&gt; 拿下不要钱的计划，添加你的域名，验证所有权，这步如果不会请退出&lt;/p&gt;
&lt;p&gt;回到我们的cloudflare，选择你想加速的worker，添加自定义域，&lt;strong&gt;选择路由&lt;/strong&gt;，选择你要加速的根域名，在你想要加速的子域+eo（方便区分），如我要加速www.91sssvip.top，就填wwweo.91sssvip.top/*，在去cloudflare添加dns解析A记录随便指向一个IP，但&lt;strong&gt;一定要开小黄云&lt;/strong&gt;，保存回到edgeone&lt;/p&gt;
&lt;p&gt;添加加速域名，我就填www，v6随便，我个人选择关闭，源站就写刚刚路由的域名协议https即可，&lt;strong&gt;回源Host头一定要选使用源站域名&lt;/strong&gt;，最后保存就好啦&lt;/p&gt;
&lt;p&gt;END&lt;/p&gt;
</content:encoded></item></channel></rss>