Compare commits

...

2 Commits

Author SHA1 Message Date
amtoaer
791dd57f23 chore: 发布 bili-sync 2.11.1 2026-05-07 14:47:45 +08:00
ᴀᴍᴛᴏᴀᴇʀ
c4b227e26e feat: telegram 通知渠道支持仅发送文字 (#701) 2026-04-08 00:26:46 +08:00
9 changed files with 33 additions and 12 deletions

6
Cargo.lock generated
View File

@@ -353,7 +353,7 @@ dependencies = [
[[package]]
name = "bili_sync"
version = "2.11.0"
version = "2.11.1"
dependencies = [
"anyhow",
"arc-swap",
@@ -413,7 +413,7 @@ dependencies = [
[[package]]
name = "bili_sync_entity"
version = "2.11.0"
version = "2.11.1"
dependencies = [
"derivative",
"either",
@@ -425,7 +425,7 @@ dependencies = [
[[package]]
name = "bili_sync_migration"
version = "2.11.0"
version = "2.11.1"
dependencies = [
"sea-orm-migration",
]

View File

@@ -4,7 +4,7 @@ default-members = ["crates/bili_sync"]
resolver = "2"
[workspace.package]
version = "2.11.0"
version = "2.11.1"
authors = ["amtoaer <amtoaer@gmail.com>"]
license = "MIT"
description = "由 Rust & Tokio 驱动的哔哩哔哩同步工具"

View File

@@ -9,7 +9,7 @@ use sea_orm::DatabaseConnection;
use crate::api::wrapper::{ApiError, ApiResponse, ValidatedJson};
use crate::bilibili::BiliClient;
use crate::config::{Config, VersionedConfig};
use crate::notifier::Notifier;
use crate::notifier::{Message, Notifier};
pub(super) fn router() -> Router {
Router::new()
@@ -41,7 +41,10 @@ pub async fn ping_notifiers(
*ignore_cache = Some(());
}
notifier
.notify(bili_client.inner_client(), "This is a test notification from BiliSync.")
.notify(bili_client.inner_client(), Message{
message: "This is a test notification from BiliSync.".into(),
image_url: Some("https://socialify.git.ci/amtoaer/bili-sync/image?description=1&font=KoHo&issues=1&language=1&logo=https%3A%2F%2Fs2.loli.net%2F2023%2F12%2F02%2F9EwT2yInOu1d3zm.png&name=1&owner=1&pattern=Signal&pulls=1&stargazers=1&theme=Light".to_owned()),
})
.await?;
Ok(ApiResponse::ok(()))
}

View File

@@ -18,6 +18,8 @@ pub enum Notifier {
Telegram {
bot_token: String,
chat_id: String,
#[serde(default)]
skip_image: bool,
},
Webhook {
url: String,
@@ -60,8 +62,14 @@ impl Notifier {
async fn notify_internal<'a>(&self, client: &reqwest::Client, message: &Message<'a>) -> Result<()> {
match self {
Notifier::Telegram { bot_token, chat_id } => {
if let Some(img_url) = &message.image_url {
Notifier::Telegram {
bot_token,
chat_id,
skip_image,
} => {
if let Some(img_url) = &message.image_url
&& !*skip_image
{
let url = format!("https://api.telegram.org/bot{}/sendPhoto", bot_token);
let params = [
("chat_id", chat_id.as_str()),

View File

@@ -21,7 +21,7 @@ export default defineConfig({
nav: [
{ text: "主页", link: "/" },
{
text: "v2.11.0",
text: "v2.11.1",
items: [
{
text: "程序更新",

View File

@@ -1,7 +1,7 @@
# bili-sync 是什么?
> [!TIP]
> 当前最新程序版本为 v2.11.0,文档将始终与最新程序版本保持一致。
> 当前最新程序版本为 v2.11.1,文档将始终与最新程序版本保持一致。
bili-sync 是一款专为 NAS 用户编写的哔哩哔哩同步工具。

View File

@@ -1,6 +1,6 @@
{
"name": "bili-sync-web",
"version": "2.11.0",
"version": "2.11.1",
"devDependencies": {
"@eslint/compat": "^1.4.1",
"@eslint/js": "^9.39.2",

View File

@@ -306,6 +306,7 @@ export interface TelegramNotifier {
type: 'telegram';
bot_token: string;
chat_id: string;
skip_image: boolean;
}
export interface WebhookNotifier {

View File

@@ -1,5 +1,6 @@
<script lang="ts">
import { Button } from '$lib/components/ui/button/index.js';
import { Checkbox } from '$lib/components/ui/checkbox/index.js';
import { Input } from '$lib/components/ui/input/index.js';
import { Label } from '$lib/components/ui/label/index.js';
import { toast } from 'svelte-sonner';
@@ -12,6 +13,7 @@
let type: 'telegram' | 'webhook' = 'telegram';
let botToken = '';
let chatId = '';
let skipImage = false;
let webhookUrl = '';
let webhookTemplate = '';
let webhookHeaders: { key: string; value: string }[] = [];
@@ -23,6 +25,7 @@
type = 'telegram';
botToken = notifier.bot_token;
chatId = notifier.chat_id;
skipImage = notifier.skip_image;
} else {
type = 'webhook';
webhookUrl = notifier.url;
@@ -37,6 +40,7 @@
type = 'telegram';
botToken = '';
chatId = '';
skipImage = false;
webhookUrl = '';
webhookTemplate = '';
webhookHeaders = [];
@@ -57,7 +61,8 @@
const newNotifier: Notifier = {
type: 'telegram',
bot_token: botToken.trim(),
chat_id: chatId.trim()
chat_id: chatId.trim(),
skip_image: skipImage
};
onSave(newNotifier);
} else {
@@ -121,6 +126,10 @@
<Input id="chat-id" placeholder="-1001234567890" bind:value={chatId} />
<p class="text-muted-foreground text-xs">目标聊天室的 ID个人用户、群组或频道</p>
</div>
<div class="flex items-center gap-2">
<Checkbox id="skip-image" bind:checked={skipImage} />
<Label for="skip-image" class="text-sm font-normal">仅发送文字</Label>
</div>
{:else if type === 'webhook'}
<div class="space-y-2">
<Label for="webhook-url">Webhook URL</Label>