Merge branch 'main' into patch-1

This commit is contained in:
DaviDev 2024-09-08 18:22:25 -03:00 committed by GitHub
commit d87303d9f5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 21 additions and 11 deletions

View file

@ -7,12 +7,15 @@ Lynx is a a simple Telegram bot made in Node.js.
- Node.js 20 LTS (or above) - Node.js 20 LTS (or above)
- Python 3 (or above, for use with SpamWatch API) - Python 3 (or above, for use with SpamWatch API)
- Python dependencies: use ``pip install -r requirements.txt`` - Python dependencies: use ``pip install -r requirements.txt``
- Node.js dependencies: use ``npm install`` - Node.js dependencies: use ``npm install .``
## Run it yourself, develop or contribute with Lynx ## Run it yourself, develop or contribute with Lynx
First, clone the repo and init the submodules with First, clone the repo with Git:
``` ```
git clone https://github.com/lucmsilva651/lynx git clone https://github.com/lucmsilva651/lynx
```
And now, init the submodules with these commands (this is very important):
```
cd lynx cd lynx
git submodule update --init --recursive git submodule update --init --recursive
``` ```
@ -20,17 +23,21 @@ Next, inside the repository directory, go to props folder and create a config.js
``` ```
{ {
"botToken": "0000000000:AAAaaAAaaaaAaAaaAAAaaaAaaaaAAAAAaaa", "botToken": "0000000000:AAAaaAAaaaaAaAaaAAAaaaAaaaaAAAAAaaa",
"admins": [0000000000, 1111111111, 2222222222] "admins": [0000000000, 1111111111, 2222222222],
"lastKey": "0000a000a0000aaa0a00a0aaa0a000000",
"lastSecret": "0000a000a0a0000aa0000aa00000000a"
} }
``` ```
- **botToken**: Put your bot token that you created at [@BotFather](https://t.me/botfather), as the example above. - **botToken**: Put your bot token that you created at [@BotFather](https://t.me/botfather), as the example above.
- **admins**: Put the ID of the people responsible for managing the bot (as the example above). They can use some administrative + exclusive commands on any group. - **admins**: Put the ID of the people responsible for managing the bot (as the example above). They can use some administrative + exclusive commands on any group.
- **lastKey**: Last.fm API key, for use on lastfm.js functions, like see who is listening to what song.
- **lastSecret**: Last.fm API secret (optional), which has the "same" purpose as the API key above.
After editing the file, save all changes and run the bot with ``npm start``. After editing the file, save all changes and run the bot with ``npm start``.
- To deal with dependencies, just run ``npm install`` or ``npm i`` at any moment to install any of them. - To deal with dependencies, just run ``npm install .`` or ``npm i .`` at any moment to install any of them.
## Note ## Note
- Take care of your ``config.json`` file, as it is so much important and needs to be secret (like your passwords), as anyone can do whatever they want to the bot with this token! - Take care of your ``config.json`` file, as it is so much important and needs to be secret (like your passwords), as anyone can do whatever they want to the bot with this token!
## About/License ## About/License
MIT - 2024 Lucas Gabriel (lucmsilva). BSD-3-Clause - 2024 Lucas Gabriel (lucmsilva).

View file

@ -109,12 +109,11 @@ function formatPhone(phone) {
.filter(([_, key]) => formattedPhone[key]) .filter(([_, key]) => formattedPhone[key])
.map(([label, key]) => `<b>${label}:</b> <code>${formattedPhone[key]}</code>`) .map(([label, key]) => `<b>${label}:</b> <code>${formattedPhone[key]}</code>`)
.join("\n\n"); .join("\n\n");
const deviceNURL = <a href=`${formattedPhone.url}`>${formattedPhone.name}</a> const deviceUrl = `<b>GSMArena page:</b> ${formattedPhone.url}`;
const deviceImage = phone.picture ? `<b>Device Image</b>: ${phone.picture}` : ''; const deviceImage = phone.picture ? `<b>Device Image</b>: ${phone.picture}` : '';
return `<b>${deviceNURL}</b>\n\n${attributes}\n\n${deviceImage}`; return `<b>\n\nName: </b><code>${formattedPhone.name}</code>\n\n${attributes}\n\n${deviceImage}\n\n${deviceUrl}`;
} }
async function fetchHtml(url) { async function fetchHtml(url) {
@ -232,7 +231,7 @@ module.exports = (bot) => {
if (phoneDetails.name) { if (phoneDetails.name) {
const message = formatPhone(phoneDetails); const message = formatPhone(phoneDetails);
ctx.editMessageText(`<b><a href="tg://user?id=${userId}">${userName}</a>, there are the details of your device: </b>` + message, { parse_mode: 'HTML', disable_web_page_preview: false }); ctx.editMessageText(`<b><a href="tg://user?id=${userId}">${userName}</a>, there are the details of your device:</b>` + message, { parse_mode: 'HTML', disable_web_page_preview: false });
} else { } else {
ctx.reply("Error fetching phone details.", { reply_with_message_id: ctx.message.message_id }); ctx.reply("Error fetching phone details.", { reply_with_message_id: ctx.message.message_id });
} }

View file

@ -4,9 +4,13 @@ const spamwatchMiddleware = require('../plugins/lib-spamwatch/Middleware.js')(is
async function getUserInfo(ctx) { async function getUserInfo(ctx) {
const Strings = getStrings(ctx.from.language_code); const Strings = getStrings(ctx.from.language_code);
let lastName = ctx.from.last_name;
if (lastName === undefined) {
lastName = " ";
}
userInfo = Strings.userInfo userInfo = Strings.userInfo
.replace('{userName}', `${ctx.from.first_name} ${ctx.from.last_name}` || Strings.unKnown) .replace('{userName}', `${ctx.from.first_name} ${lastName}` || Strings.unKnown)
.replace('{userId}', ctx.from.id || Strings.unKnown) .replace('{userId}', ctx.from.id || Strings.unKnown)
.replace('{userHandle}', ctx.from.username ? `@${ctx.from.username}` : Strings.varNone) .replace('{userHandle}', ctx.from.username ? `@${ctx.from.username}` : Strings.varNone)
.replace('{userPremium}', ctx.from.is_premium ? Strings.varYes : Strings.varNo) .replace('{userPremium}', ctx.from.is_premium ? Strings.varYes : Strings.varNo)