Булат
Мужчины
Булат
Помогите пожалуйст
Булат
мозги плывут треш
Илья
передоз
Булат
как сделать так, чтобы бот отправлял фотку пользователю через URL
Булат
?
Patamen
И он подцепит)))))0)))
Patamen
А вообще Если срзн FromURL вроде должна бы реализовать этот момент
Илья
?
там есть метод URL("link), правда не помню где
Булат
Не могу найти елки палки
Булат
tgbotapi
Patamen
ОФФТОП: А поч кстати большинство рекомендует tgbotapi? Есть какие-то преимущества перед telebot'ом?
Patamen
https://github.com/go-telegram-bot-api/telegram-bot-api/search?q=media
Patamen
Как я понял NewPhoto(ChatID, FileURL("http://ricardo_milos.png"))
Alexey
Друзья, подскажите, почему так. Не могу запустить go http.ListenAndServe(":3000", nil) в отдельной гоурутине. Пробовал по всякому, никак не хочет, приложение запускается и успешно завершается, т.е образного while working не наступает который тупо сервер крутит
Alexey
к примеру так
Alexandr
А зачем его в отдельной горутине вызывать? Мне казалось, что он под капотом и так в горутине идет
Alexey
мне не надо его в евент луп пихать ниче такого ? Перехожу с питона в го
Илья
нет
Alexey
четко. спс
Илья
программа завершается после запуска сервера нужно добавить ожидание чего-то, например сигнала завершения от ос
Alexey
программа завершается после запуска сервера нужно добавить ожидание чего-то, например сигнала завершения от ос
ага, то бишь мне надо его принудительно как бы запустить , сообщив мол завершись как ос пришлет образный сигинт?
Илья
Остановить
Илья
почитай про Graceful Shutdown
Alexey
почитай про Graceful Shutdown
кажется понял логику, сейчас то не работало потому что по сути реализовал не полностью, ему надо еще описать процедуру завершения
Илья
почитай про Graceful Shutdown
https://github.com/gin-gonic/gin#manually замени handler в структуре Server на свой
Null
Гайд по использованию Protocol Buffers и gRPC для проектирования API в Go-приложении. Читать
Dmitriy
Кто и как структурирует свои эндпоинты в веб проекте? В примерах go kit, да и во многих других статьях показывается как все эндпоинты близкие по логике (например все что связано со счётом) складывается в один единый файл. Начал делать также, но со временем с ростом проекта и его логики такие файлы начали распухать и достигать больше 3 тысяч строк кода, и найти что-то в таком файле его простым просмотром становится все трудней. Все ли делают также? Или может есть другие подходы которые вы успешно применяете в проде?
Oleg
можно api оснастить простым языком запросов, чтобы фильтровать данные query: &field=[val1,val2] - in_array(field,[..,..]); &field!=[val1,val2] - !in_array(field,[..,..]); &field=val - field == 'val' &field!=val - field !== 'val' &field"=val - field == 'val' && field == 'VAL' && field == 'vAl' (регистр не учитывается) &field*=val - field like 'val' &field>=val - field >= 'val' &field<=val - field <= 'val'
Larchenko
И логику в сервисы кинь
Larchenko
Или вообще разделить все на микросервисы
Null
Замена нескольких строк в Golang с помощью Replacer https://dev-gang.ru/article/zamena-neskolkih-strok-v-golang-s-pomosczu-replacer-hsx350aece/ @Golang_google
Alexey
Кто и как структурирует свои эндпоинты в веб проекте? В примерах go kit, да и во многих других статьях показывается как все эндпоинты близкие по логике (например все что связано со счётом) складывается в один единый файл. Начал делать также, но со временем с ростом проекта и его логики такие файлы начали распухать и достигать больше 3 тысяч строк кода, и найти что-то в таком файле его простым просмотром становится все трудней. Все ли делают также? Или может есть другие подходы которые вы успешно применяете в проде?
Привет, придерживайся https://github.com/golang-standards/project-layout складывай свои хендлеры образно в /apiserver , в котором отсортируй по папкам если уж их так много, мне кажется у тебя так вышло, что в хендлере какая-то логика описывается, которую можно было б вынести отдельно, если я вопрос правильно понял, если еще поможет, попробуй фасад реализовать, https://refactoring.guru/ru/design-patterns/facade чисто 5 копеек вставил
Pushok
Ребят, есть какое расширение vscode для форматирования длинных строк?
fenogentov
Это линтеры делают
Булат
Мужчины
Булат
Всем саламалейкум здравствуйте
Булат
Кто шарит за бота - рассыльщика?
Булат
У нас затык в том, что бот пишет только в том случае, если он есть в чатах у user'a
Maks
А ты как хотел
Maks
Что бы он искал юзеров и писал им?
Maks
Эт уже не бот
Maks
Это спамер вонючий)
Булат
Он мне и нужен
Булат
у меня есть бд id
Булат
мне нужен вонючий спамер
Булат
Сможете помочь?
Maks
Я не уверер что бот технически может писать на стороне апи телеграма тем кто запретил это делать и удалил чат
Булат
Это будет первая рассылка для людей
🕷
Но там тоже свои ограничения
Булат
От души!
Булат
Лучшие!
🕷
у меня есть бд id
В тдлибе от пользователя айдишники после каждого запуска вроде как меняются если их хранишь не во внутренней базе
N
Случайно увидел. Сам не особо гофер.
🕷
Тдлиб - библиотека для тг юзеракков?
В целом для телеги, там и с юзер акками можно работать и с ботами.
N
Хм. Надо пробнуть переписать на питон или на го поюзать. Спасибо.
N
Думал, в тг запрет на первое сообщение
🕷
Думал, в тг запрет на первое сообщение
Есть лимиты, если не ошибаюсь это где-то 40 человек в день с аккаунта
N
Есть лимиты, если не ошибаюсь это где-то 40 человек в день с аккаунта
А если уже активные диалоги, а не новые, как в вк? Мне не тупо спамить.
ds
поясните жсеру, указатели в го это переменные, копирующие значение переменой, к которой применен указатель?
Matvei
поясните жсеру, указатели в го это переменные, копирующие значение переменой, к которой применен указатель?
Указатели это как объекты в ЖС. Если в функцию передать какой-нибудь параметр указателем, то можно будет изменить значение, лежащее в указателе для окружения, которой вызвало нашу функцию
Matvei
Типа func mutStruct(a A) { a.a = 5 fmt.Println(a.a) //5 } func main() { a := A{10} mutStruct(a) fmt.Println(a.a) //10 } func mutStruct(a *A) { a.a = 5 fmt.Println(a.a) //5 } func main() { a := A{10} mutStruct(&a) fmt.Println(a.a) //5 }
Matvei
Ну и через указатель можно получить доступ прямо к той "переменной", в которой хранится передаваемый параметр. func do(a *int) { *a = 5 } func main(){ a := 10 do(&a) fmt.Println(a) //5 }
Matvei
Это такое объяснение для ленивых. Если хотите в долгосрочной перспективе писать на го, то полезно будет узнать про то, как работает память в компьютере, и модель памяти го в частности
Matvei
то есть передаётся просто ссылка на сущность?
Можно и так сказать. Указатель это просто число - адрес некоторого множества ячеек памяти, и когда вы к нему обращаетесь из разных функций, они все обращаются к одной и той же памяти. А если вы передаёте какую-то структуру или что-то ещё как есть, по значению, то у каждой вызываемой функции будет выделяться новая память для этого параметра, и в него копироваться все содержимое передаваемого параметра
Matvei
Приколы начинаются, когда вы, например, передаёте структуру, внутри которой есть указатель, по значению. Так устроены под капотом слайсы в го, к примеру