Open danneu opened 1 year ago
Hello Dan, I ran "npm index.js" during installation, but there is actually no "index.js" file, only an "index.ts" file. How can I resolve this? I'm a beginner, sorry
Sorry. Yeah, the readme is incorrect and out of date since the project is written in Typescript, not Javascript.
node index.js
for Typescript is ts-node index.ts
So install ts-node: npm install --global ts-node
Now ts-node index.ts
should start the project.
You can also compile the project to a single javascript file:
npm install --global @vercel/ncc
ncc -s build index.ts -o dist
node dist/index.js
I'll have to update the readme.
If you look in package.json, you'll see the scripts I personally use: https://github.com/danneu/telegram-chatgpt-bot/blob/d5e60097e4f464f5c3138b1153481836ea57c3df/package.json#L3-L6
Thank you very much for your answer. I love this project and it helps me practice my English. I also wanted to know if this project can run on a single Ubuntu VPS, including the bot itself and the PostgreSQL database. Because when I tried to run index.ts, there was an error indicating that the DATABASE_URL was problematic.
Yes, this project takes up very few resources since it only does I/O. I have it running on the cheapest AWS EC2 instance.
If you have an "always online" computer in your house like a desktop computer, you can run this project there and use a Cloudflare Tunnel to point a domain like chat.example.com
to the app running on your home computer. That's actually what I do during development. That's what I'm doing with the cloudflared tunnel run chatdev
command in package.json which points https://chatdev.danneu.com to my localhost app when I'm working on the code so that I can receive Telegram webhook events on my laptop.
Also, yes, you have to get postgres running somewhere (on the same machine is fine). Create a database called "telegram_chat" or something. And then execute the contents of "schema.sql" on that database to create the tables.
Sorry it's not easier to set up.
I have completed all the settings and after running "npm start", it shows "listening on localhost:8080". Does this mean the program has run successfully? I have also seen the Commands in the Telegram bot, but there is no response when I send messages to the bot. I use ubuntu 20.04, node version 20.0, npm version 9.6.5.
FYI, when I enable IPv6 on the VPS, "npm start" will report errors. However, when I disable IPv6, "npm start" runs successfully.
If the bot initializes and begins listening on localhost, that means it was able to send and receive requests to Telegram's API and it is now listening for webhook events on localhost:8080/telegram
.
Now you need to route the WEBHOOK_URL
that you configured in .env
to localhost:8080
. (Edit: I just remembered that Telegram requires the webhook url to be https:
, not http:
)
I'm not the best at explaining this on the spot, you should be able to find resources online since you have to solve the common problem of how to route a domain name to localhost:<port>
on your VPS. Except it's made more complicated because the connection needs to use https (Telegram's API requires this).
If you have a domain name, you can download and run the Caddy server on your VPS to route https://foo.example.com
to localhost:8080
and it will do HTTPS termination.
caddy reverse-proxy --from foo.example.com --to localhost:8080
I personally point my danneu.com
domain name to use Cloudflare.com as my DNS which gives me https:
for free. Then I've told Cloudflare to route https://chat.danneu.com to my VPS IP address. On my VPS, I use the Apache webserver to reverse-proxy requests to chat.danneu.com
to localhost:8080
.
But Caddy is probably the simpler option since it has a one-line solution to do all this (you just need a domain name). Most importantly, it gives you HTTPS support.
Hopefully this isn't too daunting. Just know that this is what everyone has to go through to host a web application on a server and expose it to the internet, so it's a trusty skill.
I finally successfully deployed this robot application, and I think the problem was with my webhook. I also put my domain on Cloudflare. Thank you very much for your patient response!
Cool. Tell me if you have any problems. :)
Languages like Arabic ("ar") still have no default voice. :(