add: addChat/configRaffle; fix: winnerMessage/raffleMessage #34
No reviewers
Labels
No labels
bug
dependencies
duplicate
enhancement
good first issue
help wanted
invalid
question
symphony
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
backmeupplz/randymbot!34
Loading…
Reference in a new issue
No description provided.
Delete branch "main"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
@ -41,7 +41,25 @@ custom_winner_message: Reply to this message to setup a custom winner message. Mno_winner_message: Randy will use standard winner message now.Great! Now you're configuring this chat.
Great! Now you're configuring this chat: ${chat}.
@ -41,7 +41,25 @@ custom_winner_message: Ответьте на это сообщение, чтобno_winner_message: Теперь Ренди будет использовать стандартное сообщение о победе.Отличается от en
Сверху — миддлвари для всех последующих запросов. Хочешь сделать фильтр — делай его отдельно
Вместо этого, стоит просто запрашивать и проверять
getChatMember, чтобы лишний раз не запоминать админов. Мы не так часто будем запрашивать статус мембера — поэтому это ок.removed// Inline menu callbacksonlyKickedMeКакие еще статусы есть? Мб
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'А у нас есть middleware типа
onlyPrivateChats?Если нет, давай сделаем
Это же
chat, а неme.me— это сам ботЛучше ответь ошибкой
Не пушь лишние
console.logв PRremoveChatFromConfigurableChatsИспользуй mongo query с
$pull, чтобы убратьctx.chat.idизadminChatIdsвсех пользователей, у которых он есть.@ -0,0 +1,43 @@import {Стоит ответить ошибкой
onlyWithEditedChatIdСкорее всего, это не нужно
https://core.telegram.org/bots/api#chatmemberbanned
kickedприсутствует только вold_chat_member.status- старое состояние, необходимое для определения того, чтоmemberбыл когда-то в чате/канале.@ -1,98 +1,26 @@// import { ContextMessageUpdate, Telegraf } from 'telegraf'// import { findChat } from '../models/Chat'// import { loc } from '../helpers/locale'import { InlineKeyboard } from 'grammy'У
private chatотсутствует свойствоtitleЕсли не проверять тип, то будет выдавать ошибку:
Свойство "title" не существует в типе "PrivateGetChat".Оказывается для
type channel status === left, для type group/supergroup status === kicked. Хотя условиеctx.myChatMember?.new_chat_member.status === 'left'работало и для группы.Здесь я пытался добавлять
ctx.chat.idвadminChatIds.Уже исправил на:
Может быть реализовать это внутри
middleware attachChat?Исправлю в следующем PR.
Это чтобы не дублировать код в
src/helpers/setEditedChat.tsВ этом файле должно быть минимум изменений. Убери все изменения, которые не необходимы
Исправь в этом
Не пушь в PR закомментированный код
Не дублируй, но сделай функцию типа
getChatIdFromCallbackQueryЯвно не нужно глобальный контекст закидывать лишним :)
No chat id in callback queryДумаю, можно сделать
!ctx.dbchat.editedChatId@ -52,3 +52,73 @@ const ChatModel = getModelForClass(Chat)export function findOrCreateChat(chatId: number) {Ты делаешь
delete, а неupdateНайди чаты, где
{ adminChatIds: chatId }, а не делай апдейт всем чатам$eqможно опустить, он подразумевается жеНе думаю, что нам нужен тут
chatId. Мы его можем получить изdbchatЛишнее изменение
// Added bot as admin// Kicked or removed bot@ -76,0 +93,4 @@bot.command('noCustomWinnerMessage',onlyWithEditedChatIdOrPublicChat,handleNoCustomWinnerMessageЛишнее изменение
Только если бот был админом — и его снова сделали админом?
onlyKickedOrRemovedAdminMeonlyRepliesToBotsOrChannelPosts@ -1,45 +1,66 @@// import { ContextMessageUpdate, Telegraf } from 'telegraf'// import { findChat } from '../models/Chat'// import { loc } from '../helpers/locale'import { GrammyError } from 'grammy'Верни ошибку, если нет
ctx.matchА если закинут уже
/addChat -123456?Лучше сделать через
?, чтобы тип не нужно было указыватьМожно вернуть 21 строку сразу
Это ненужная строка
@ -1,98 +1,26 @@// import { ContextMessageUpdate, Telegraf } from 'telegraf'// import { findChat } from '../models/Chat'// import { loc } from '../helpers/locale'import { InlineKeyboard } from 'grammy'Используй тут
for of(for (const chatId of ctx.dbchat.adminChatIds) {})Здесь нужно показать пользователю ошибку, а не просто молча заканчивать выполнение функции
AddChatToAdminChatIdsЭто надо проверить внутри хендлера коллбека, не нужно это выносить в отдельную мидлварю
onlyWithEditedChatIdOrPublicChat@ -52,3 +52,73 @@ const ChatModel = getModelForClass(Chat)export function findOrCreateChat(chatId: number) {Тут должен быть
1или хотя быtruedeleteFromAdminChatIdsdeleteFromEditedChatIdОграничили в правах. Можно же изменить права (изменение профиля группы, удаление сообщений и т.д.) админов. Если оставить только
ctx.myChatMember?.new_chat_member.status === 'administrator', тоchat.idбудет дублироваться вadminChatIds.@ -57,26 +66,56 @@ async function runApp() {.use(numberOfWinnersMenu)Наверное, это должно быть
chooseChatToCongigure? 🤔chooseChatOrChannelToConfigure?не стоит функции с большой буквы называть
Нужно проверить случай, когда добавили админом с достаточными правами или когда выдали достаточно прав
@ -76,0 +108,4 @@bot.command('checkSubscription',onlyWithEditedChatIdOrPublicChat,handleCheckSubscriptionНужно проверить случай, когда кикнули или лишили необходимых прав
adminChatIdsникогда не должен дублироваться, добавление\удаление должно быть через mongo query, которое считаетadminChatIdsсетомПроверь тут сразу и права бота, стоит это сделать
@ -1,45 +1,66 @@// import { ContextMessageUpdate, Telegraf } from 'telegraf'// import { findChat } from '../models/Chat'// import { loc } from '../helpers/locale'import { GrammyError } from 'grammy'Нужно юзеру показать ошибку, не надо молчать
Нужно проверить, достаточно ли прав
Я так понял, ты добавляешь бота в конфигурируемые чаты пользователю, когда пользователь дает админку боту? Хороший ход
@ -0,0 +1,9 @@import { deleteFromAdminChatIds, deleteFromEditedChatId } from '@/models/Chat'Давай мб экспепшн кинем?
@ -0,0 +1,9 @@import { deleteFromAdminChatIds, deleteFromEditedChatId } from '@/models/Chat'Добавил! Можно узнать, зачем мы это делаем? Мы заранее подстраховываемся, если что-то пойдет не так?
onlyIfGotEnoughPermissions@ -46,0 +58,4 @@await addChatIdFromAdminChatIds(ctx.from.id, chat.id)return ctx.replyWithLocalization('config_raffle_instructions')}Этот хак с превращением
ctx.matchобязателен? Это же и так должна быть строка?Давай еще проверим права человека, который вызывает эту команду
Имя файла тоже нужно написать с маленькой буквы. А потом
git rm -r --cached . && git add .@ -0,0 +1,11 @@import Context from '@/models/Context'Давай вот тут сразу конвертнем id:
... = +ctx.callbackQuery?.data?.replace('chat:', '')А вот тут давай проверим, не
NaNлиchatId, еслиNaN, то кинем эксепшен@ -0,0 +1,43 @@import {adminChatIds— это список айди чатов, которые человек (в приватном чате) может конфигурировать. Проверять тут нужно черезgetChatMemberбота, является ли он все еще админом. Если нет — кинуть ошибку и убрать чат изadminChatIds@ -46,0 +58,4 @@await addChatIdFromAdminChatIds(ctx.from.id, chat.id)return ctx.replyWithLocalization('config_raffle_instructions')}(property) Context.match?: string | RegExpMatchArray@ -1,45 +1,66 @@// import { ContextMessageUpdate, Telegraf } from 'telegraf'// import { findChat } from '../models/Chat'// import { loc } from '../helpers/locale'import { GrammyError } from 'grammy'Не
isChatAdmin, аuserChatMemberStatus@ -0,0 +1,43 @@import {Это
userChatMemberStatus