add: addChat/configRaffle; fix: winnerMessage/raffleMessage #34

Merged
sodapng merged 9 commits from main into main 2022-01-22 15:08:34 +00:00
sodapng commented 2022-01-15 14:42:23 +00:00 (Migrated from github.com)
  • Настроены команды addChat и configRaffle
  • Обработка исключения бота из чата или канала.
  • Исправлены команды winnerMessage и raffleMessage для каналов
- Настроены команды addChat и configRaffle - Обработка исключения бота из чата или канала. - Исправлены команды winnerMessage и raffleMessage для каналов
backmeupplz (Migrated from github.com) requested changes 2022-01-15 15:43:59 +00:00
@ -41,7 +41,25 @@ custom_winner_message: Reply to this message to setup a custom winner message. M
no_winner_message: Randy will use standard winner message now.
backmeupplz (Migrated from github.com) commented 2022-01-15 15:26:02 +00:00

Great! Now you're configuring this chat.

Great! Now you're configuring this chat.
backmeupplz (Migrated from github.com) commented 2022-01-15 15:26:13 +00:00

Great! Now you're configuring this chat: ${chat}.

Great! Now you're configuring this chat: ${chat}.
@ -41,7 +41,25 @@ custom_winner_message: Ответьте на это сообщение, чтоб
no_winner_message: Теперь Ренди будет использовать стандартное сообщение о победе.
backmeupplz (Migrated from github.com) commented 2022-01-15 15:26:42 +00:00

Отличается от en

Отличается от en
backmeupplz (Migrated from github.com) commented 2022-01-15 15:29:30 +00:00

Сверху — миддлвари для всех последующих запросов. Хочешь сделать фильтр — делай его отдельно

Сверху — миддлвари для всех последующих запросов. Хочешь сделать фильтр — делай его отдельно
backmeupplz (Migrated from github.com) commented 2022-01-15 15:30:25 +00:00

Вместо этого, стоит просто запрашивать и проверять getChatMember, чтобы лишний раз не запоминать админов. Мы не так часто будем запрашивать статус мембера — поэтому это ок.

Вместо этого, стоит просто запрашивать и проверять `getChatMember`, чтобы лишний раз не запоминать админов. Мы не так часто будем запрашивать статус мембера — поэтому это ок.
backmeupplz (Migrated from github.com) commented 2022-01-15 15:33:04 +00:00

removed

`removed`
backmeupplz (Migrated from github.com) commented 2022-01-15 15:41:17 +00:00

// Inline menu callbacks

`// Inline menu callbacks`
backmeupplz (Migrated from github.com) commented 2022-01-15 15:32:04 +00:00

onlyKickedMe

`onlyKickedMe`
backmeupplz (Migrated from github.com) commented 2022-01-15 15:32:24 +00:00

Какие еще статусы есть? Мб kicked или restricted?

Какие еще статусы есть? Мб `kicked` или `restricted`?
@ -1,98 +1,26 @@
// import { ContextMessageUpdate, Telegraf } from 'telegraf'
// import { findChat } from '../models/Chat'
// import { loc } from '../helpers/locale'
import { InlineKeyboard } from 'grammy'
backmeupplz (Migrated from github.com) commented 2022-01-15 15:35:28 +00:00

А у нас есть middleware типа onlyPrivateChats?

А у нас есть middleware типа `onlyPrivateChats`?
backmeupplz (Migrated from github.com) commented 2022-01-15 15:35:36 +00:00

Если нет, давай сделаем

Если нет, давай сделаем
backmeupplz (Migrated from github.com) commented 2022-01-15 15:36:46 +00:00

Это же chat, а не me. me — это сам бот

Это же `chat`, а не `me`. `me` — это сам бот
backmeupplz (Migrated from github.com) commented 2022-01-15 15:37:12 +00:00

Лучше ответь ошибкой

Лучше ответь ошибкой
backmeupplz (Migrated from github.com) commented 2022-01-15 15:28:26 +00:00

Не пушь лишние console.log в PR

Не пушь лишние `console.log` в PR
backmeupplz (Migrated from github.com) commented 2022-01-15 15:33:34 +00:00

removeChatFromConfigurableChats

`removeChatFromConfigurableChats`
backmeupplz (Migrated from github.com) commented 2022-01-15 15:34:27 +00:00

Используй mongo query с $pull, чтобы убрать ctx.chat.id из adminChatIds всех пользователей, у которых он есть.

Используй mongo query с `$pull`, чтобы убрать `ctx.chat.id` из `adminChatIds` всех пользователей, у которых он есть.
@ -0,0 +1,43 @@
import {
backmeupplz (Migrated from github.com) commented 2022-01-15 15:39:24 +00:00

Стоит ответить ошибкой

Стоит ответить ошибкой
backmeupplz (Migrated from github.com) commented 2022-01-15 15:42:28 +00:00

onlyWithEditedChatId

`onlyWithEditedChatId`
backmeupplz (Migrated from github.com) commented 2022-01-15 15:27:15 +00:00

Скорее всего, это не нужно

Скорее всего, это не нужно
sodapng (Migrated from github.com) reviewed 2022-01-15 17:32:14 +00:00
sodapng (Migrated from github.com) commented 2022-01-15 17:32:14 +00:00

https://core.telegram.org/bots/api#chatmemberbanned

kicked присутствует только в old_chat_member.status - старое состояние, необходимое для определения того, что member был когда-то в чате/канале.

https://core.telegram.org/bots/api#chatmemberbanned `kicked` присутствует только в `old_chat_member.status` - старое состояние, необходимое для определения того, что `member` был когда-то в чате/канале.
sodapng (Migrated from github.com) reviewed 2022-01-15 18:27:43 +00:00
@ -1,98 +1,26 @@
// import { ContextMessageUpdate, Telegraf } from 'telegraf'
// import { findChat } from '../models/Chat'
// import { loc } from '../helpers/locale'
import { InlineKeyboard } from 'grammy'
sodapng (Migrated from github.com) commented 2022-01-15 18:27:43 +00:00

У private chat отсутствует свойство title
Если не проверять тип, то будет выдавать ошибку:
Свойство "title" не существует в типе "PrivateGetChat".

У `private chat` отсутствует свойство `title` Если не проверять тип, то будет выдавать ошибку: `Свойство "title" не существует в типе "PrivateGetChat".`
sodapng (Migrated from github.com) reviewed 2022-01-15 20:14:53 +00:00
sodapng (Migrated from github.com) commented 2022-01-15 20:14:53 +00:00

Оказывается для type channel status === left, для type group/supergroup status === kicked. Хотя условие ctx.myChatMember?.new_chat_member.status === 'left' работало и для группы.

Оказывается для `type channel status === left, для type group/supergroup status === kicked`. Хотя условие `ctx.myChatMember?.new_chat_member.status === 'left'` работало и для группы.
sodapng (Migrated from github.com) reviewed 2022-01-15 20:22:25 +00:00
sodapng (Migrated from github.com) commented 2022-01-15 20:22:25 +00:00

Здесь я пытался добавлять ctx.chat.id в adminChatIds.
Уже исправил на:

import { findOrCreateChat } from '@/models/Chat'
import Context from '@/models/Context'

export default async function addAdminChatIds(ctx: Context) {
  if (!ctx.chat || !ctx.from) return

  const { doc: chat } = await findOrCreateChat(ctx.from.id)

  chat.adminChatIds.push(ctx.chat.id)
  return chat.save()
}

Может быть реализовать это внутри middleware attachChat?

Здесь я пытался добавлять `ctx.chat.id` в `adminChatIds`. Уже исправил на: ``` import { findOrCreateChat } from '@/models/Chat' import Context from '@/models/Context' export default async function addAdminChatIds(ctx: Context) { if (!ctx.chat || !ctx.from) return const { doc: chat } = await findOrCreateChat(ctx.from.id) chat.adminChatIds.push(ctx.chat.id) return chat.save() } ``` Может быть реализовать это внутри `middleware attachChat`?
sodapng (Migrated from github.com) reviewed 2022-01-16 12:41:37 +00:00
sodapng (Migrated from github.com) commented 2022-01-16 12:41:36 +00:00

Исправлю в следующем PR.

Исправлю в следующем PR.
sodapng (Migrated from github.com) reviewed 2022-01-16 12:43:43 +00:00
sodapng (Migrated from github.com) commented 2022-01-16 12:43:42 +00:00

Это чтобы не дублировать код в src/helpers/setEditedChat.ts

Это чтобы не дублировать код в `src/helpers/setEditedChat.ts`
backmeupplz (Migrated from github.com) requested changes 2022-01-16 16:03:28 +00:00
backmeupplz (Migrated from github.com) commented 2022-01-16 15:58:25 +00:00

В этом файле должно быть минимум изменений. Убери все изменения, которые не необходимы

В этом файле должно быть минимум изменений. Убери все изменения, которые не необходимы
backmeupplz (Migrated from github.com) commented 2022-01-16 15:58:50 +00:00

Исправь в этом

Исправь в этом
backmeupplz (Migrated from github.com) commented 2022-01-16 15:51:38 +00:00

Не пушь в PR закомментированный код

Не пушь в PR закомментированный код
backmeupplz (Migrated from github.com) commented 2022-01-16 15:50:30 +00:00

Не дублируй, но сделай функцию типа getChatIdFromCallbackQuery

Не дублируй, но сделай функцию типа `getChatIdFromCallbackQuery`
backmeupplz (Migrated from github.com) commented 2022-01-16 15:50:43 +00:00

Явно не нужно глобальный контекст закидывать лишним :)

Явно не нужно глобальный контекст закидывать лишним :)
backmeupplz (Migrated from github.com) commented 2022-01-16 15:51:05 +00:00

No chat id in callback query

`No chat id in callback query`
backmeupplz (Migrated from github.com) commented 2022-01-16 15:49:37 +00:00

Думаю, можно сделать !ctx.dbchat.editedChatId

Думаю, можно сделать `!ctx.dbchat.editedChatId`
@ -52,3 +52,73 @@ const ChatModel = getModelForClass(Chat)
export function findOrCreateChat(chatId: number) {
backmeupplz (Migrated from github.com) commented 2022-01-16 16:01:55 +00:00

Ты делаешь delete, а не update

Ты делаешь `delete`, а не `update`
backmeupplz (Migrated from github.com) commented 2022-01-16 16:02:18 +00:00

Найди чаты, где { adminChatIds: chatId }, а не делай апдейт всем чатам

Найди чаты, где `{ adminChatIds: chatId }`, а не делай апдейт всем чатам
backmeupplz (Migrated from github.com) commented 2022-01-16 16:02:41 +00:00

$eq можно опустить, он подразумевается же

`$eq` можно опустить, он подразумевается же
backmeupplz (Migrated from github.com) commented 2022-01-16 15:48:57 +00:00

Не думаю, что нам нужен тут chatId. Мы его можем получить из dbchat

Не думаю, что нам нужен тут `chatId`. Мы его можем получить из `dbchat`
backmeupplz (Migrated from github.com) requested changes 2022-01-16 20:33:25 +00:00
backmeupplz (Migrated from github.com) commented 2022-01-16 20:21:46 +00:00

Лишнее изменение

Лишнее изменение
backmeupplz (Migrated from github.com) commented 2022-01-16 20:22:32 +00:00

// Added bot as admin

`// Added bot as admin`
backmeupplz (Migrated from github.com) commented 2022-01-16 20:22:48 +00:00

// Kicked or removed bot

`// Kicked or removed bot`
@ -76,0 +93,4 @@
bot.command(
'noCustomWinnerMessage',
onlyWithEditedChatIdOrPublicChat,
handleNoCustomWinnerMessage
backmeupplz (Migrated from github.com) commented 2022-01-16 20:23:29 +00:00

Лишнее изменение

Лишнее изменение
backmeupplz (Migrated from github.com) commented 2022-01-16 20:25:14 +00:00

Только если бот был админом — и его снова сделали админом?

Только если бот был админом — и его снова сделали админом?
backmeupplz (Migrated from github.com) commented 2022-01-16 20:21:10 +00:00

onlyKickedOrRemovedAdminMe

`onlyKickedOrRemovedAdminMe`
backmeupplz (Migrated from github.com) commented 2022-01-16 20:20:17 +00:00

onlyRepliesToBotsOrChannelPosts

`onlyRepliesToBotsOrChannelPosts`
@ -1,45 +1,66 @@
// import { ContextMessageUpdate, Telegraf } from 'telegraf'
// import { findChat } from '../models/Chat'
// import { loc } from '../helpers/locale'
import { GrammyError } from 'grammy'
backmeupplz (Migrated from github.com) commented 2022-01-16 20:29:38 +00:00

Верни ошибку, если нет ctx.match

Верни ошибку, если нет `ctx.match`
backmeupplz (Migrated from github.com) commented 2022-01-16 20:30:12 +00:00

А если закинут уже /addChat -123456?

А если закинут уже `/addChat -123456`?
backmeupplz (Migrated from github.com) commented 2022-01-16 20:30:30 +00:00

Лучше сделать через ?, чтобы тип не нужно было указывать

Лучше сделать через `?`, чтобы тип не нужно было указывать
backmeupplz (Migrated from github.com) commented 2022-01-16 20:30:51 +00:00

Можно вернуть 21 строку сразу

Можно вернуть 21 строку сразу
backmeupplz (Migrated from github.com) commented 2022-01-16 20:31:57 +00:00

Это ненужная строка

Это ненужная строка
@ -1,98 +1,26 @@
// import { ContextMessageUpdate, Telegraf } from 'telegraf'
// import { findChat } from '../models/Chat'
// import { loc } from '../helpers/locale'
import { InlineKeyboard } from 'grammy'
backmeupplz (Migrated from github.com) commented 2022-01-16 20:17:47 +00:00

Используй тут for of (for (const chatId of ctx.dbchat.adminChatIds) {})

Используй тут `for of` (`for (const chatId of ctx.dbchat.adminChatIds) {}`)
backmeupplz (Migrated from github.com) commented 2022-01-16 20:18:12 +00:00

Здесь нужно показать пользователю ошибку, а не просто молча заканчивать выполнение функции

Здесь нужно показать пользователю ошибку, а не просто молча заканчивать выполнение функции
backmeupplz (Migrated from github.com) commented 2022-01-16 20:25:50 +00:00

AddChatToAdminChatIds

`AddChatToAdminChatIds`
backmeupplz (Migrated from github.com) commented 2022-01-16 20:33:08 +00:00

Это надо проверить внутри хендлера коллбека, не нужно это выносить в отдельную мидлварю

Это надо проверить внутри хендлера коллбека, не нужно это выносить в отдельную мидлварю
backmeupplz (Migrated from github.com) commented 2022-01-16 20:23:13 +00:00

onlyWithEditedChatIdOrPublicChat

`onlyWithEditedChatIdOrPublicChat`
@ -52,3 +52,73 @@ const ChatModel = getModelForClass(Chat)
export function findOrCreateChat(chatId: number) {
backmeupplz (Migrated from github.com) commented 2022-01-16 20:15:37 +00:00

Тут должен быть 1 или хотя бы true

Тут должен быть `1` или хотя бы `true`
backmeupplz (Migrated from github.com) commented 2022-01-16 20:27:47 +00:00

deleteFromAdminChatIds

`deleteFromAdminChatIds`
backmeupplz (Migrated from github.com) commented 2022-01-16 20:27:57 +00:00

deleteFromEditedChatId

`deleteFromEditedChatId`
sodapng (Migrated from github.com) reviewed 2022-01-17 12:00:49 +00:00
sodapng (Migrated from github.com) commented 2022-01-17 12:00:49 +00:00

Ограничили в правах. Можно же изменить права (изменение профиля группы, удаление сообщений и т.д.) админов. Если оставить только ctx.myChatMember?.new_chat_member.status === 'administrator', то chat.id будет дублироваться в adminChatIds.

Ограничили в правах. Можно же изменить права (изменение профиля группы, удаление сообщений и т.д.) админов. Если оставить только `ctx.myChatMember?.new_chat_member.status === 'administrator'`, то `chat.id` будет дублироваться в `adminChatIds`.
backmeupplz (Migrated from github.com) requested changes 2022-01-18 17:15:54 +00:00
@ -57,26 +66,56 @@ async function runApp() {
.use(numberOfWinnersMenu)
backmeupplz (Migrated from github.com) commented 2022-01-18 17:07:27 +00:00

Наверное, это должно быть chooseChatToCongigure? 🤔 chooseChatOrChannelToConfigure?

Наверное, это должно быть `chooseChatToCongigure`? 🤔 `chooseChatOrChannelToConfigure`?
backmeupplz (Migrated from github.com) commented 2022-01-18 17:09:04 +00:00

не стоит функции с большой буквы называть

не стоит функции с большой буквы называть
backmeupplz (Migrated from github.com) commented 2022-01-18 17:11:49 +00:00

Нужно проверить случай, когда добавили админом с достаточными правами или когда выдали достаточно прав

Нужно проверить случай, когда добавили админом с достаточными правами или когда выдали достаточно прав
@ -76,0 +108,4 @@
bot.command(
'checkSubscription',
onlyWithEditedChatIdOrPublicChat,
handleCheckSubscription
backmeupplz (Migrated from github.com) commented 2022-01-18 17:11:22 +00:00

Нужно проверить случай, когда кикнули или лишили необходимых прав

Нужно проверить случай, когда кикнули или лишили необходимых прав
backmeupplz (Migrated from github.com) commented 2022-01-18 17:10:10 +00:00

adminChatIds никогда не должен дублироваться, добавление\удаление должно быть через mongo query, которое считает adminChatIds сетом

`adminChatIds` никогда не должен дублироваться, добавление\удаление должно быть через mongo query, которое считает `adminChatIds` сетом
backmeupplz (Migrated from github.com) commented 2022-01-18 17:10:54 +00:00

Проверь тут сразу и права бота, стоит это сделать

Проверь тут сразу и права бота, стоит это сделать
@ -1,45 +1,66 @@
// import { ContextMessageUpdate, Telegraf } from 'telegraf'
// import { findChat } from '../models/Chat'
// import { loc } from '../helpers/locale'
import { GrammyError } from 'grammy'
backmeupplz (Migrated from github.com) commented 2022-01-18 17:13:09 +00:00

Нужно юзеру показать ошибку, не надо молчать

Нужно юзеру показать ошибку, не надо молчать
backmeupplz (Migrated from github.com) commented 2022-01-18 17:13:21 +00:00

Нужно проверить, достаточно ли прав

Нужно проверить, достаточно ли прав
backmeupplz (Migrated from github.com) commented 2022-01-18 17:14:33 +00:00

Я так понял, ты добавляешь бота в конфигурируемые чаты пользователю, когда пользователь дает админку боту? Хороший ход

Я так понял, ты добавляешь бота в конфигурируемые чаты пользователю, когда пользователь дает админку боту? Хороший ход
@ -0,0 +1,9 @@
import { deleteFromAdminChatIds, deleteFromEditedChatId } from '@/models/Chat'
backmeupplz (Migrated from github.com) commented 2022-01-18 17:04:20 +00:00

Давай мб экспепшн кинем?

Давай мб экспепшн кинем?
sodapng (Migrated from github.com) reviewed 2022-01-19 19:38:50 +00:00
@ -0,0 +1,9 @@
import { deleteFromAdminChatIds, deleteFromEditedChatId } from '@/models/Chat'
sodapng (Migrated from github.com) commented 2022-01-19 19:38:49 +00:00

Добавил! Можно узнать, зачем мы это делаем? Мы заранее подстраховываемся, если что-то пойдет не так?

Добавил! Можно узнать, зачем мы это делаем? Мы заранее подстраховываемся, если что-то пойдет не так?
backmeupplz (Migrated from github.com) requested changes 2022-01-20 03:18:38 +00:00
backmeupplz (Migrated from github.com) commented 2022-01-20 03:11:52 +00:00

onlyIfGotEnoughPermissions

`onlyIfGotEnoughPermissions`
@ -46,0 +58,4 @@
await addChatIdFromAdminChatIds(ctx.from.id, chat.id)
return ctx.replyWithLocalization('config_raffle_instructions')
}
backmeupplz (Migrated from github.com) commented 2022-01-20 03:16:56 +00:00

Этот хак с превращением ctx.match обязателен? Это же и так должна быть строка?

Этот хак с превращением `ctx.match` обязателен? Это же и так должна быть строка?
backmeupplz (Migrated from github.com) commented 2022-01-20 03:18:30 +00:00

Давай еще проверим права человека, который вызывает эту команду

Давай еще проверим права человека, который вызывает эту команду
backmeupplz (Migrated from github.com) commented 2022-01-20 03:13:05 +00:00

Имя файла тоже нужно написать с маленькой буквы. А потом git rm -r --cached . && git add .

Имя файла тоже нужно написать с маленькой буквы. А потом `git rm -r --cached . && git add .`
@ -0,0 +1,11 @@
import Context from '@/models/Context'
backmeupplz (Migrated from github.com) commented 2022-01-20 03:07:59 +00:00

Давай вот тут сразу конвертнем id: ... = +ctx.callbackQuery?.data?.replace('chat:', '')

Давай вот тут сразу конвертнем id: `... = +ctx.callbackQuery?.data?.replace('chat:', '')`
backmeupplz (Migrated from github.com) commented 2022-01-20 03:08:23 +00:00

А вот тут давай проверим, не NaN ли chatId, если NaN, то кинем эксепшен

А вот тут давай проверим, не `NaN` ли `chatId`, если `NaN`, то кинем эксепшен
@ -0,0 +1,43 @@
import {
backmeupplz (Migrated from github.com) commented 2022-01-20 03:15:21 +00:00

adminChatIds — это список айди чатов, которые человек (в приватном чате) может конфигурировать. Проверять тут нужно через getChatMember бота, является ли он все еще админом. Если нет — кинуть ошибку и убрать чат из adminChatIds

`adminChatIds` — это список айди чатов, которые человек (в приватном чате) может конфигурировать. Проверять тут нужно через `getChatMember` бота, является ли он все еще админом. Если нет — кинуть ошибку и убрать чат из `adminChatIds`
sodapng (Migrated from github.com) reviewed 2022-01-20 10:54:10 +00:00
@ -46,0 +58,4 @@
await addChatIdFromAdminChatIds(ctx.from.id, chat.id)
return ctx.replyWithLocalization('config_raffle_instructions')
}
sodapng (Migrated from github.com) commented 2022-01-20 10:54:10 +00:00

(property) Context.match?: string | RegExpMatchArray

`(property) Context.match?: string | RegExpMatchArray`
backmeupplz (Migrated from github.com) requested changes 2022-01-21 17:01:15 +00:00
@ -1,45 +1,66 @@
// import { ContextMessageUpdate, Telegraf } from 'telegraf'
// import { findChat } from '../models/Chat'
// import { loc } from '../helpers/locale'
import { GrammyError } from 'grammy'
backmeupplz (Migrated from github.com) commented 2022-01-21 17:00:39 +00:00

Не isChatAdmin, а userChatMemberStatus

Не `isChatAdmin`, а `userChatMemberStatus`
@ -0,0 +1,43 @@
import {
backmeupplz (Migrated from github.com) commented 2022-01-21 17:01:07 +00:00

Это userChatMemberStatus

Это `userChatMemberStatus`
Sign in to join this conversation.
No description provided.