@@ -6,6 +6,7 @@ const send = require('./utils/send');
66const logger = require ( './utils/logger' ) ;
77const errors = require ( './utils/errors' ) ;
88const i18n = require ( './i18n' ) ;
9+ const USERS = require ( './proxies/users' ) ;
910const {
1011 token,
1112 view_all,
@@ -29,16 +30,6 @@ const {
2930} = require ( './middlewares' ) ;
3031
3132const twoKeyReply = require ( './utils/two-key-reply' ) ;
32- const confirmation = twoKeyReply ( i18n [ 'CONFIRM' ] , [
33- {
34- text : i18n [ 'YES' ] ,
35- callback_data : 'UNSUB_ALL_YES'
36- } ,
37- {
38- text : i18n [ 'NO' ] ,
39- callback_data : 'UNSUB_ALL_NO'
40- }
41- ] ) ;
4233
4334( async ( ) => {
4435 await initTable ( ) ;
@@ -60,26 +51,32 @@ bot.telegram.getMe().then((botInfo) => {
6051
6152bot . command ( 'start' , async ( ctx ) => {
6253 let builder = [ ] ;
63- builder . push ( i18n [ 'WELCOME' ] ) ;
64- builder . push ( i18n [ 'SUB_USAGE' ] ) ;
65- builder . push ( i18n [ 'UNSUB_USAGE' ] ) ;
66- builder . push ( i18n [ 'RSS_USAGE' ] ) ;
67- builder . push ( i18n [ 'SEND_FILE_IMPORT' ] ) ;
68- builder . push ( i18n [ 'EXPORT' ] ) ;
69- builder . push ( i18n [ 'USB_ALL_USAGE' ] ) ;
70- if ( view_all ) builder . push ( i18n [ 'VIEW_ALL_USAGE' ] ) ;
54+ const { lang } = ctx . state ;
55+ builder . push ( i18n [ lang ] [ 'WELCOME' ] ) ;
56+ builder . push ( i18n [ lang ] [ 'SUB_USAGE' ] ) ;
57+ builder . push ( i18n [ lang ] [ 'UNSUB_USAGE' ] ) ;
58+ builder . push ( i18n [ lang ] [ 'RSS_USAGE' ] ) ;
59+ builder . push ( i18n [ lang ] [ 'SEND_FILE_IMPORT' ] ) ;
60+ builder . push ( i18n [ lang ] [ 'EXPORT' ] ) ;
61+ builder . push ( i18n [ lang ] [ 'USB_ALL_USAGE' ] ) ;
62+ builder . push ( i18n [ lang ] [ 'LANG_USAGE' ] ) ;
63+ if ( view_all ) builder . push ( i18n [ lang ] [ 'VIEW_ALL_USAGE' ] ) ;
7164 await ctx . replyWithMarkdown ( builder . join ( '\n' ) ) ;
7265} ) ;
7366
7467bot . command ( 'help' , async ( ctx ) => {
7568 let builder = [ ] ;
76- builder . push ( i18n [ 'SUB_USAGE' ] ) ;
77- builder . push ( i18n [ 'UNSUB_USAGE' ] ) ;
78- builder . push ( i18n [ 'RSS_USAGE' ] ) ;
79- builder . push ( i18n [ 'SEND_FILE_IMPORT' ] ) ;
80- builder . push ( i18n [ 'EXPORT' ] ) ;
81- builder . push ( i18n [ 'USB_ALL_USAGE' ] ) ;
82- if ( view_all ) builder . push ( i18n [ 'VIEW_ALL_USAGE' ] ) ;
69+ builder . push ( i18n [ lang ] [ 'SUB_USAGE' ] ) ;
70+ builder . push ( i18n [ lang ] [ 'UNSUB_USAGE' ] ) ;
71+ builder . push ( i18n [ lang ] [ 'RSS_USAGE' ] ) ;
72+ builder . push ( i18n [ lang ] [ 'SEND_FILE_IMPORT' ] ) ;
73+ builder . push ( i18n [ lang ] [ 'EXPORT' ] ) ;
74+ builder . push ( i18n [ lang ] [ 'USB_ALL_USAGE' ] ) ;
75+ builder . push ( i18n [ lang ] [ 'LANG_USAGE' ] ) ;
76+ if ( view_all ) builder . push ( i18n [ lang ] [ 'VIEW_ALL_USAGE' ] ) ;
77+ builder . push (
78+ `[https://github.com/fengkx/NodeRSSBot/blob/master/README.md](https://github.com/fengkx/NodeRSSBot/blob/master/README.md)`
79+ ) ;
8380 await ctx . replyWithMarkdown ( builder . join ( '\n' ) ) ;
8481} ) ;
8582
@@ -94,7 +91,7 @@ bot.command('rss', sendError, isAdmin, RSS.rss);
9491bot . command ( 'export' , sendError , isAdmin , exportToOpml ) ;
9592
9693bot . command ( 'import' , async ( ctx , next ) => {
97- ctx . reply ( i18n [ 'IMPORT_USAGE' ] ) ;
94+ ctx . reply ( i18n [ lang ] [ 'IMPORT_USAGE' ] ) ;
9895 await next ( ) ;
9996} ) ;
10097
@@ -116,9 +113,53 @@ bot.command(
116113 sendError ,
117114 isAdmin ,
118115 // RSS.unsubAll,
119- confirmation
116+ async ( ctx , next ) => {
117+ const { lang } = ctx . state ;
118+ await twoKeyReply ( i18n [ lang ] [ 'CONFIRM' ] , [
119+ {
120+ text : i18n [ lang ] [ 'YES' ] ,
121+ callback_data : 'UNSUB_ALL_YES'
122+ } ,
123+ {
124+ text : i18n [ lang ] [ 'NO' ] ,
125+ callback_data : 'UNSUB_ALL_NO'
126+ }
127+ ] ) ( ctx , next ) ;
128+ }
120129) ;
121130
131+ bot . command ( 'lang' , sendError , isAdmin , async ( ctx , next ) => {
132+ const kbs = Object . keys ( i18n ) . map ( ( i ) => {
133+ return {
134+ text : i ,
135+ callback_data : `CHANGE_LANG_${ i } _${ ctx . state . chat . id } `
136+ } ;
137+ } ) ;
138+ await ctx . telegram . sendMessage (
139+ ctx . chat . id ,
140+ i18n [ ctx . state . lang ] [ 'CHOOSE_LANG' ] ,
141+ {
142+ parse_mode : 'HTML' ,
143+ disable_web_page_preview : true ,
144+ reply_markup : {
145+ inline_keyboard : [ [ ...kbs ] ]
146+ }
147+ }
148+ ) ;
149+ await next ( ) ;
150+ } ) ;
151+
152+ bot . action ( / ^ C H A N G E _ L A N G [ \w _ ] + / , async ( ctx , next ) => {
153+ const cb = ctx . callbackQuery ;
154+ const data = cb . data . split ( '_' ) ;
155+ const lang = data [ data . length - 2 ] ;
156+ const id = data [ data . length - 1 ] ;
157+ await USERS . setLangById ( id , lang ) ;
158+ ctx . telegram . answerCbQuery ( cb . id , i18n [ lang ] [ 'SET_LANG_TO' ] + ' ' + lang ) ;
159+ await ctx . telegram . deleteMessage ( cb . message . chat . id , cb . message . message_id ) ;
160+ await next ( ) ;
161+ } ) ;
162+
122163bot . hears (
123164 / ( ( ( h t t p s ? : (?: \/ \/ ) ? ) (?: [ - ; : & = + $ , \w ] + @ ) ? [ A - Z a - z 0 - 9 . - ] + | (?: w w w \. | [ - ; : & = + $ , \w ] + @ ) [ A - Z a - z 0 - 9 . - ] + ) ( (?: \/ [ + ~ % / . \w \- _ ] * ) ? \? ? (?: [ - + = & ; % @ . \w _ ] * ) # ? (?: [ . ! / \\ \w ] * ) ) ? ) / gm,
124165 async ( ctx , next ) => {
@@ -150,7 +191,7 @@ bot.action(
150191
151192bot . action ( 'UNSUB_ALL_NO' , async ( ctx , next ) => {
152193 const cb = ctx . callbackQuery ;
153- ctx . telegram . answerCbQuery ( cb . id , i18n [ 'CANCEL' ] ) ;
194+ ctx . telegram . answerCbQuery ( cb . id , i18n [ lang ] [ 'CANCEL' ] ) ;
154195 await ctx . telegram . deleteMessage ( cb . message . chat . id , cb . message . message_id ) ;
155196 await next ( ) ;
156197} ) ;
@@ -214,7 +255,7 @@ function startFetchProcess(restartTime) {
214255 bot ,
215256 `${ feed . feed_title } : <a href="${ feed . url } ">${
216257 feed . url
217- } </a> ${ i18n [ 'ERROR_MANY_TIME' ] } ${ err } `,
258+ } </a> ${ i18n [ lang ] [ 'ERROR_MANY_TIME' ] } ${ err } `,
218259 feed
219260 ) ;
220261 }
@@ -223,12 +264,12 @@ function startFetchProcess(restartTime) {
223264 const builder = [ ] ;
224265 builder . push (
225266 `${ feed . feed_title } : <a href="${ feed . url } "></a> ${
226- i18n [ 'ERROR_MANY_TIME' ]
267+ i18n [ lang ] [ 'ERROR_MANY_TIME' ]
227268 } `
228269 ) ;
229- builder . push ( `<b>${ i18n [ 'FOUND_FEEDS' ] } </b>:` ) ;
270+ builder . push ( `<b>${ i18n [ lang ] [ 'FOUND_FEEDS' ] } </b>:` ) ;
230271 builder . push ( ...new_feed ) ;
231- builder . push ( `${ i18n [ 'FEED_CHANGE_TO' ] } ${ new_feed [ 0 ] } ` ) ;
272+ builder . push ( `${ i18n [ lang ] [ 'FEED_CHANGE_TO' ] } ${ new_feed [ 0 ] } ` ) ;
232273 send ( bot , builder . join ( '\n' ) , feed ) ;
233274 }
234275 }
0 commit comments