Compare commits
9 Commits
9dfb1342e5
...
2.0.1
Author | SHA1 | Date | |
---|---|---|---|
96d457ab11 | |||
a2a352efe0 | |||
7647399159 | |||
1f4f8003f2 | |||
e6ac97bd3e | |||
79a385b9d4 | |||
2419f308fc | |||
ab073fe7ec | |||
f09b8c893d |
12
.drone.yml
12
.drone.yml
@ -3,12 +3,12 @@ type: docker
|
||||
name: default
|
||||
|
||||
steps:
|
||||
- name: Build with node
|
||||
image: node:19
|
||||
commands:
|
||||
- yarn install
|
||||
- yarn build
|
||||
- name: Publish to docker
|
||||
# - name: Build with node
|
||||
# image: node:19
|
||||
# commands:
|
||||
# - yarn install
|
||||
# - yarn build
|
||||
- name: Build and publish to docker
|
||||
image: plugins/docker
|
||||
settings:
|
||||
username:
|
||||
|
@ -3,9 +3,11 @@ FROM node:19 as builder
|
||||
RUN mkdir -p /app
|
||||
WORKDIR /app
|
||||
|
||||
COPY ["package.json", "yarn.lock", ".yarnrc.yml", "/app/"]
|
||||
COPY ["package.json", "yarn.lock", ".yarnrc.yml", "tsconfig.json", "/app/"]
|
||||
COPY [".yarn", "/app/.yarn"]
|
||||
COPY ["src", "/app/src"]
|
||||
|
||||
|
||||
RUN yarn install
|
||||
RUN yarn build
|
||||
|
||||
@ -18,11 +20,12 @@ WORKDIR /app
|
||||
|
||||
ENV NODE_ENV=production
|
||||
|
||||
COPY ["package.json", "yarn.lock", ".yarnrc.yml", "/usr/src/app/"]
|
||||
COPY ["package.json", "yarn.lock", ".yarnrc.yml", "/app/"]
|
||||
COPY [".yarn", "/app/.yarn"]
|
||||
|
||||
RUN yarn install
|
||||
|
||||
COPY --from=builder lib/ /app/lib
|
||||
COPY --from=builder /app/lib/ /app/lib
|
||||
|
||||
VOLUME [ "/app/logs", "/app/persist"]
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "rss-telegram-bot",
|
||||
"version": "1.0.8",
|
||||
"version": "2.0.1",
|
||||
"main": "lib/index.js",
|
||||
"author": "Fabian Stamm <dev@fabianstamm.de>",
|
||||
"license": "MIT",
|
||||
|
@ -41,7 +41,15 @@ function calculateHash(item: RSSFeedItem) {
|
||||
|
||||
async function checkFeed(feed: Feed) {
|
||||
Logging.info("Fetching feed: %s", feed.url);
|
||||
let data = await fetch(feed.url).then(res => res.text());
|
||||
let timeoutSignal = new AbortController();
|
||||
let to = setTimeout(() => {
|
||||
Logging.warn("Feed %s fetch timed out", feed.url);
|
||||
timeoutSignal.abort();
|
||||
}, 10000);
|
||||
let data = await fetch(feed.url, {
|
||||
signal: timeoutSignal.signal
|
||||
}).then(res => res.text());
|
||||
clearTimeout(to);
|
||||
Logging.info("Received Data");
|
||||
Logging.debug(data);
|
||||
|
||||
@ -109,9 +117,14 @@ export default async function checkFeeds() {
|
||||
continue;
|
||||
}
|
||||
|
||||
await checkFeed(feed);
|
||||
|
||||
feed.lastCheck = new Date();
|
||||
await AppDataSource.manager.save(feed);
|
||||
|
||||
Promise.resolve(async () => {
|
||||
await checkFeed(feed);
|
||||
}).catch(err => {
|
||||
Logging.warn("Error while checking feed: %s", feed.url);
|
||||
Logging.error(err);
|
||||
})
|
||||
}
|
||||
}
|
||||
|
78
src/import_old.ts
Normal file
78
src/import_old.ts
Normal file
@ -0,0 +1,78 @@
|
||||
import { readFileSync } from "fs";
|
||||
import { AppDataSource, appDataSourceReady } from "./data_source.js";
|
||||
import { Feed } from "./models/Feed.js";
|
||||
import { Post } from "./models/Post.js";
|
||||
import { User } from "./models/User.js";
|
||||
|
||||
|
||||
|
||||
interface IOld {
|
||||
feeds: {
|
||||
url: string;
|
||||
oldEntries: string[];
|
||||
subscriber: number[];
|
||||
}[];
|
||||
}
|
||||
|
||||
|
||||
appDataSourceReady.then(async () => {
|
||||
let old = JSON.parse(readFileSync("./old.json", "utf-8")) as IOld;
|
||||
|
||||
for (let feed of old.feeds) {
|
||||
let f = await AppDataSource.manager.findOne(Feed, {
|
||||
where: {
|
||||
url: feed.url
|
||||
}
|
||||
})
|
||||
|
||||
if (!f) {
|
||||
f = AppDataSource.manager.create(Feed, {
|
||||
url: feed.url,
|
||||
lastCheck: new Date(0),
|
||||
oldEntries: [],
|
||||
subscriber: [],
|
||||
})
|
||||
|
||||
await AppDataSource.manager.save(f);
|
||||
}
|
||||
|
||||
for (let oldEntry of feed.oldEntries) {
|
||||
let existing = await AppDataSource.manager.findOne(Post, {
|
||||
where: {
|
||||
feed: f,
|
||||
hash: oldEntry
|
||||
}
|
||||
})
|
||||
if (!existing) {
|
||||
|
||||
let post = AppDataSource.manager.create(Post, {
|
||||
feed: f,
|
||||
hash: oldEntry
|
||||
})
|
||||
|
||||
await AppDataSource.manager.save(post);
|
||||
}
|
||||
}
|
||||
|
||||
for (let subscriber of feed.subscriber) {
|
||||
let user = await AppDataSource.manager.findOne(User, {
|
||||
where: {
|
||||
chatid: subscriber
|
||||
},
|
||||
relations: {
|
||||
feeds: true
|
||||
}
|
||||
});
|
||||
|
||||
if (!user) {
|
||||
user = AppDataSource.manager.create(User, {
|
||||
chatid: subscriber,
|
||||
feeds: [f],
|
||||
})
|
||||
} else {
|
||||
user.feeds.push(f)
|
||||
}
|
||||
await AppDataSource.manager.save(user);
|
||||
}
|
||||
}
|
||||
})
|
@ -62,26 +62,37 @@ bot.command("delete", botHandler(async ctx => {
|
||||
}));
|
||||
|
||||
bot.on("callback_query", botHandler(async ctx => {
|
||||
Logging.info("Callback Query:");
|
||||
Logging.info(ctx.callbackQuery);
|
||||
Logging.info("Callback Query received");
|
||||
|
||||
const remove_options = () => {
|
||||
const remove_options = (message: string) => {
|
||||
ctx.editMessageReplyMarkup({
|
||||
inline_keyboard: []
|
||||
inline_keyboard: [],
|
||||
})
|
||||
ctx.editMessageText(message)
|
||||
}
|
||||
|
||||
let data = (ctx.callbackQuery as any).data;
|
||||
if (!data) {
|
||||
ctx.answerCbQuery("Invalid data");
|
||||
remove_options();
|
||||
remove_options("Delete failed. Invalid data received.");
|
||||
return
|
||||
}
|
||||
|
||||
let [action, id] = data.split(":");
|
||||
if (!action || !id) {
|
||||
ctx.answerCbQuery("Invalid data");
|
||||
remove_options();
|
||||
remove_options("Delete failed. Invalid data received.");
|
||||
return
|
||||
}
|
||||
let feed = await AppDataSource.manager.findOne(Feed, {
|
||||
where: {
|
||||
id: Number(id)
|
||||
}
|
||||
});
|
||||
|
||||
if (!feed) {
|
||||
ctx.answerCbQuery("Invalid action");
|
||||
remove_options("Delete failed. Feed not available.");
|
||||
return
|
||||
}
|
||||
|
||||
@ -101,12 +112,12 @@ bot.on("callback_query", botHandler(async ctx => {
|
||||
}
|
||||
} else {
|
||||
ctx.answerCbQuery("Invalid action");
|
||||
remove_options();
|
||||
remove_options("Delete failed. Invalid data received.");
|
||||
return
|
||||
}
|
||||
|
||||
ctx.answerCbQuery("Success");
|
||||
remove_options();
|
||||
remove_options("Deleted feed: " + feed.url);
|
||||
}));
|
||||
|
||||
bot.on(message("text", "entities"), botHandler(async ctx => {
|
||||
|
Reference in New Issue
Block a user