Initial commit

This commit is contained in:
soffee 2025-04-05 17:18:01 +03:00
commit 05a1bf047d
12 changed files with 4053 additions and 0 deletions

2
.env.example Normal file
View file

@ -0,0 +1,2 @@
API_ID=
API_HASH=

9
.gitignore vendored Normal file
View file

@ -0,0 +1,9 @@
node_modules/
dist/
.nyc_output/
**/.DS_Store
.idea
.vscode
*.log
*.tsbuildinfo
.env

14
Dockerfile Normal file
View file

@ -0,0 +1,14 @@
FROM node:20-alpine
WORKDIR /app
RUN apk add python3 make g++ && \
corepack enable && \
corepack prepare pnpm@8.7.1 --activate
COPY package*.json pnpm*.yaml tsconfig.json ./
RUN pnpm install --frozen-lockfile
COPY src /app/src
RUN pnpm run build
CMD [ "node", "/app/dist/main.js" ]

14
README.md Normal file
View file

@ -0,0 +1,14 @@
# mtproto_exporter
mtcute powered Telegram bot
## Development
```bash
pnpm install --frozen-lockfile
cp .env.example .env
# edit .env
pnpm start
```
*generated with @mtcute/create-bot*

2
bot-data/.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
*
!.gitignore

10
docker-compose.yaml Normal file
View file

@ -0,0 +1,10 @@
version: "3.9"
services:
bot:
build:
context: .
restart: always
env_file:
- .env
volumes:
- ./bot-data:/app/bot-data

19
eslint.config.js Normal file
View file

@ -0,0 +1,19 @@
import antfu from '@antfu/eslint-config'
export default antfu({
stylistic: {
indent: 4,
},
typescript: true,
yaml: false,
rules: {
'curly': ['error', 'multi-line'],
'style/brace-style': ['error', '1tbs', { allowSingleLine: true }],
'style/quotes': ['error', 'single', { avoidEscape: true }],
'import/order': ['error', { 'newlines-between': 'always' }],
'antfu/if-newline': 'off',
'style/max-statements-per-line': ['error', { max: 2 }],
'no-console': 'off',
'antfu/no-top-level-await': 'off',
},
})

29
package.json Normal file
View file

@ -0,0 +1,29 @@
{
"name": "mtproto_exporter",
"type": "module",
"version": "0.0.1",
"packageManager": "pnpm@10.6.5",
"license": "MIT",
"scripts": {
"lint": "eslint .",
"lint:fix": "eslint --fix .",
"start": "dotenv tsx ./src/main.ts",
"build": "tsc"
},
"dependencies": {
"@mtcute/dispatcher": "^0.22.2",
"@mtcute/node": "^0.22.3",
"dotenv-cli": "^8.0.0"
},
"devDependencies": {
"@antfu/eslint-config": "^4.11.0",
"@types/node": "^22.14.0",
"tsx": "^4.19.3",
"typescript": "^5.8.3"
},
"pnpm": {
"onlyBuiltDependencies": [
"better-sqlite3"
]
}
}

3903
pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load diff

10
src/env.ts Normal file
View file

@ -0,0 +1,10 @@
import process from 'node:process'
const API_ID = Number.parseInt(process.env.API_ID!)
const API_HASH = process.env.API_HASH!
if (Number.isNaN(API_ID) || !API_HASH) {
throw new Error('API_ID or API_HASH not set!')
}
export { API_HASH, API_ID }

19
src/main.ts Normal file
View file

@ -0,0 +1,19 @@
import { Dispatcher, filters } from '@mtcute/dispatcher'
import { TelegramClient } from '@mtcute/node'
import * as env from './env.js'
const tg = new TelegramClient({
apiId: env.API_ID,
apiHash: env.API_HASH,
storage: 'bot-data/session',
})
const dp = Dispatcher.for(tg)
dp.onNewMessage(filters.start, async (msg) => {
await msg.answerText('Hello, world!')
})
const user = await tg.start()
console.log('Logged in as', user.username)

22
tsconfig.json Normal file
View file

@ -0,0 +1,22 @@
{
"compilerOptions": {
"incremental": true,
"target": "es2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"allowJs": true,
"strict": true,
"inlineSources": true,
"outDir": "./dist",
"sourceMap": true,
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"skipLibCheck": true
},
"include": [
"./src"
],
"exclude": [
"**/node_modules"
]
}