This repository has been archived by the owner on Oct 6, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
handlers.ts
148 lines (129 loc) · 5.36 KB
/
handlers.ts
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
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import { Context } from "https://deno.land/x/[email protected]/context.ts";
import {
BotError,
GrammyError,
HttpError,
} from "https://deno.land/x/[email protected]/mod.ts";
import { intros } from "./config.ts";
const replyMarkup = {
inline_keyboard: [[{
text: "Нажимай сюда! 👀",
switch_inline_query: "Жила была девочка, и звали её Саша. ",
}]],
};
const supportMe = {
inline_keyboard: [[{
text: "Поддержите разработчика 👉👈",
url: "https://donationalerts.com/r/sadykhzadeh",
}]],
};
const startHandler = async (ctx: Context) => {
let name: string = ctx.message.from?.first_name;
if (ctx.message.from?.last_name) name += " " + ctx.message.from?.last_name;
await ctx.reply(
`🫰🏻 <b>Привет, ${name}! \n</b>` +
"Этот бот продолжит твой текст на любую тему, сохраняя связность и заданный стиль.\n" +
"\n" +
"📝 Желательно ознакомиться с некоторыми нюансами бота по команде /ahtung\n" +
"\n" +
"🤌🏻 <b>Пользоваться ботом очень легко!</b> Нажми на кнопку ниже, выбери чат и произойдёт магия! :)\n" +
"\n",
{
parse_mode: "HTML",
reply_markup: replyMarkup,
},
);
};
const ahtungHandler = async (ctx: Context) => {
await ctx.reply(
`1) <b>У бота нет своего мнения или знания.</b> Он умеет только подражать — писать тексты так, чтобы они были максимально похожи на реальные тексты из интернета.
2) <b>Генератор может выдавать очень странные тексты.</b> Пожалуйста, будьте разумны, распространяя их. Подумайте, не будет ли текст обидным для кого-то и не станет ли его публикация нарушением закона.
3) <b>Бот не любит политику или религию.</b> Вероятность того, что запрос задаёт одну из острых тем, определяет нейросеть, обученная на оценках случайных людей. Но она может перестараться или, наоборот, что-то пропустить.
Спасибо за понимание!❤️`,
{
parse_mode: "HTML",
reply_markup: supportMe,
},
);
};
const messageHandler = async (ctx: Context) => {
if (ctx.update.message?.via_bot?.id) return;
await ctx.reply(
"Я работаю только в режиме inline. Нажми /start, если не понял, о чём я.",
);
};
const inlineQueryFunc = async (ctx: Context) => {
const { inlineQuery } = ctx;
if (!inlineQuery.query) ctx.answerInlineQuery([], { cache_time: 9000 });
// if (!inlineQuery.query.trim()) return;
// const intros = await fetch("https://zeapi.yandex.net/lab/api/yalm/intros"),
// introsJson = await intros.json();
// console.log(introsJson.intros);
const result = intros.map((i) => ({
type: "article",
id: i[0] + "-" + (+new Date() % 1000000),
title: i[1],
description: i[2].toString(),
input_message_content: {
message_text:
`<b>${inlineQuery.query}</b> <i>(История генерируется, подождите...)</i>`,
parse_mode: "HTML",
},
reply_markup: supportMe,
}));
await ctx.answerInlineQuery(result, {
cache_time: 2500,
});
};
const chosenInlineResultFunc = async (ctx: Context) => {
const intro = +ctx.chosenInlineResult.result_id.split("-")[0];
const postData = await fetch("https://zeapi.yandex.net/lab/api/yalm/text3", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
query: ctx.chosenInlineResult.query,
intro: intro,
filter: 1,
}),
}),
postDataJson = await postData.json();
console.log(postDataJson);
if (postDataJson["bad_query"] > 0) {
await ctx.editMessageText(
`<b>Бот не умеет в политику и/или религию.</b>
Вероятность того, что запрос задаёт одну из острых тем, определяет нейросеть, обученная на оценках случайных людей. Но она может перестараться или, наоборот, что-то пропустить.`,
{
parse_mode: "HTML",
reply_markup: supportMe,
},
);
} else {
await ctx.editMessageText(
`<b>${postDataJson.query}</b>${postDataJson.text}`,
{
parse_mode: "HTML",
},
);
}
};
const catchHandler = (q: BotError) => {
const { ctx, error } = q;
console.error(`Error while handling update ${ctx.update.update_id}:`);
if (error instanceof GrammyError) {
console.error("Error in request:", error.description);
} else if (error instanceof HttpError) {
console.error("Could not contact Telegram:", error);
} else {
console.error("Unknown error:", error);
}
};
export {
ahtungHandler,
catchHandler,
chosenInlineResultFunc,
inlineQueryFunc,
messageHandler,
startHandler,
};