-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
132 lines (113 loc) · 5.16 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
import TelegramBot from "node-telegram-bot-api";
import dotenv from "dotenv";
import axios from"axios" ;
import express from "express";
import moment from "moment-timezone";
dotenv.config();
const app = express();
const port = 3001;
app.listen(port , ()=>{
console.log(`Server running live at localhost:${port}`);
});
app.get("/",(req,res)=>{
res.send("Server working well !! ");
});
const token = process.env.BOT_TOKEN;
const bot = new TelegramBot(token, {polling: true});
async function lookupTime(location, name , chatId) {
try {
const response = await axios.get(`http://worldtimeapi.org/api/timezone/${location}`);
// Make a GET request to the World Time API with the 'location' value as the timezone.
const { datetime } = response.data; // Destructure 'datetime' from the response to extract it.
const dateTime = moment.tz(datetime, location).format("h:mmA");
// Create a new date object using the specified timezone and format it in 12-hour time with AM/PM label.
// console.log(`The current time in ${name} is ${dateTime}.`);
const message = `The current time in ${name} is ${dateTime}.`;
bot.sendMessage(chatId, message);
// Log the formatted time to the console.
} catch (error) {
console.error(error); //Log any errors that occur to the console.
}
}
// telegram bots responds through this.
bot.on('message', async (msg) => {
const chatId = msg.chat.id;
const msgId = msg.message_id ;
const userPrompt = msg.text;
// const loadingMessage = `...`;
const loadingMessages = ['.', '..', '...'];
let loadingIndex = 0; // Index to track the current loading message
let loadingMsg;
try {
// loading effect
loadingMsg = await bot.sendMessage(chatId, loadingMessages[loadingIndex]);
const loadingInterval = setInterval(() => {
loadingIndex = (loadingIndex + 1) % loadingMessages.length; // Increment the index cyclically
bot.editMessageText(loadingMessages[loadingIndex], {
chat_id: chatId,
message_id: loadingMsg.message_id
});
}, 350); // Adjust the interval duration as per your preference
const url = 'https://api.openai.com/v1/chat/completions';
const headers = {
'Content-type' : 'application/json',
'Authorization' : `Bearer ${process.env.API_KEY}`,
};
const data = {
model : "gpt-3.5-turbo",
messages: [{"role": "user", "content": userPrompt}],
temperature : 0.7 ,
functions : [{ // Define the 'lookupTime' function
name: "lookupTime",
description: "get the current time in a given location",
parameters: { // Define the input parameters for the function
type: "object", // The parameter is an object
properties: {
location: { // The 'location' property of the object is a required string
type: "string", // The 'location' property is a string value
description: "The location, e.g. Beijing, China. But it should be written in a timezone name like Asia/Shanghai"
},
name: {
type: "string",
description: "The location mentioned in the prompt. Example: Beijing, China."
}
},
required: ["location", "name"] // The 'location' property is required
}
}] ,
function_call: "auto"
};
const response = await axios.post(url, data, { headers: headers });
const completionResponse = response.data.choices[0].message;
const botResponse = response.data.choices[0].message.content ;
if(!completionResponse.content) { // Check if the generated response includes a function call
const functionCallName = completionResponse.function_call.name;
console.log("functionCallName: ", functionCallName);
if(functionCallName === "lookupTime") { // If the function being called is 'lookupTime'
const completionArguments = JSON.parse(completionResponse.function_call.arguments); // Extract the argument for the function call
console.log("completionArguments: ", completionArguments);
lookupTime(completionArguments.location,completionArguments.name , chatId); // Call the 'lookupTime' function with the specified location argument.
}
}
else{
clearInterval(loadingInterval);
bot.editMessageText(botResponse, {
chat_id: chatId,
message_id: loadingMsg.message_id
});
console.log(botResponse);
}
} catch (error) {
console.log(error);
}
});
bot.onText(/\/start/, (msg) => {
const chatId = msg.chat.id;
bot.sendMessage(chatId,`Welcome ${msg.from.first_name} to teleGPT,Powered by OpenAI GPT-4.\nType anything to get started.` , {
});
})
bot.onText(/\/reset/,(msg)=>{for (let i = 0; i < 200; i++) {
bot.deleteMessage(msg.chat.id,msg.message_id-i).catch((er)=>{return})
//if there isn't any messages to delete bot simply return
}
})