From 000a780cb1f35dc9b9ad29db10ebef6a79b8fd0c Mon Sep 17 00:00:00 2001 From: eleksir Date: Sun, 25 Jul 2021 12:08:40 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9D=D0=B0=D1=87=D0=B0=D0=BB=D1=8C=D0=BD?= =?UTF-8?q?=D1=8B=D0=B9=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B8=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 3 ++ LICENSE.txt | 21 ++++++++ README | 33 ++++++++++++ galichbot_sample.ini | 2 + go.mod | 9 ++++ go.sum | 29 ++++++++++ main.go | 55 +++++++++++++++++++ phrases.txt | 122 +++++++++++++++++++++++++++++++++++++++++++ 8 files changed, 274 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE.txt create mode 100644 README create mode 100644 galichbot_sample.ini create mode 100644 go.mod create mode 100644 go.sum create mode 100644 main.go create mode 100644 phrases.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..15c0694 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.idea/** +galichbot.ini +galichbot diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..bff3af9 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Sergei Fedosoff + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/README b/README new file mode 100644 index 0000000..3c6e38f --- /dev/null +++ b/README @@ -0,0 +1,33 @@ +Галичбот + +Что это и зачем это нужно? +------------------------------------------------------------------------------------------------------------------------ +Это Telegram bot, названный в честь Сергея Галиченко, довольно "токсичного" персонажа. +Чтобы позлить Галича, конечно же и развлечь народ. + + +Как это собрать и запустить? +------------------------------------------------------------------------------------------------------------------------ +* Собирается бот путём запуска компилятора go в каталоге с проектом, вот так: + $ go build . +Для сборки понадобятся интернеты и компилятор go версии 1.16.5. Собиралось и тестировалось всё на нём. + +Чтобы запустить бота понадобится: +* Файлик galichbot.ini, в котором нужно всего 2 значения telegram id пользователя и + ключ бота, который можно получить у BotFather в Телеграме. +* А ещё нужен файлик phrases.txt, в котором через разделитель "--" (без кавычек) будут перечислены фразы, которыми бот + будет отвечать на любое сообщение пользователя-жертвы. +* Устойчивое соединение с интернетами. +Запускаем бинарь, приглашаем бота в чат и вуаля. + + +Э, а где каталог vendor? +------------------------------------------------------------------------------------------------------------------------ +Ишь чего захотел! Это не production-ready проект, скорее, проба пера. Он не предназначен работать 24/7 режиме. Так что +сорян, никакого серьёзного подхода к ведению исходников. + + +Ну и кому надо сказать "спасибо"? +------------------------------------------------------------------------------------------------------------------------ +Сергею Галиченко, лично. (Да, завалите его своими "спасибо" :) +Чатику бывших и действующих сотрудников АТК. diff --git a/galichbot_sample.ini b/galichbot_sample.ini new file mode 100644 index 0000000..a16ac17 --- /dev/null +++ b/galichbot_sample.ini @@ -0,0 +1,2 @@ +BotApiKey = Ключ_который_выдаёт_BotFather_при_регистрации_бота +VictimID = Циферный_telegram_id_жертвы diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..b426618 --- /dev/null +++ b/go.mod @@ -0,0 +1,9 @@ +module galichbot + +go 1.16 + +require ( + github.com/onrik/micha v1.2.1 + github.com/smartystreets/goconvey v1.6.4 // indirect + gopkg.in/ini.v1 v1.62.0 +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..b5512ff --- /dev/null +++ b/go.sum @@ -0,0 +1,29 @@ +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/jarcoal/httpmock v1.0.8 h1:8kI16SoO6LQKgPE7PvQuV+YuD/inwHd7fOOe2zMbo4k= +github.com/jarcoal/httpmock v1.0.8/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/onrik/micha v1.2.1 h1:Tp42BFmiDcs74r4MOmTFTIATIgg2HfWISqhD0QffnyY= +github.com/onrik/micha v1.2.1/go.mod h1:QnHeeqsE7eLYHalyyGkBy+KCe69xK8BIAaB9lCoXjKk= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/ini.v1 v1.62.0 h1:duBzk771uxoUuOlyRLkHsygud9+5lrlGjdFBb4mSKDU= +gopkg.in/ini.v1 v1.62.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/main.go b/main.go new file mode 100644 index 0000000..22c7fe5 --- /dev/null +++ b/main.go @@ -0,0 +1,55 @@ +package main + +import ( + "io/ioutil" + "log" + "math/rand" + "os" + "strings" + "time" + + "github.com/onrik/micha" + "gopkg.in/ini.v1" +) + +func main() { + cfg, err := ini.Load("galichbot.ini") + if err != nil { + log.Println(err) + os.Exit(1) + } + + token := cfg.Section("").Key("BotApiKey").String() + victim, err := cfg.Section("").Key("VictimID").Int64() + if err != nil { + log.Println(err) + os.Exit(1) + } + + fileName := "phrases.txt" + fileBytes, err := ioutil.ReadFile(fileName) + if err != nil { + log.Println(err) + os.Exit(1) + } + + speeches := strings.Split(string(fileBytes), "--") + bot, err := micha.NewBot(token) + if err != nil { + log.Println(err) + return + } + + go bot.Start() + rand.Seed(time.Now().Unix()) + + for update := range bot.Updates() { + if update.Message != nil { + if update.Message.From.ID == victim { + n := rand.Int() % len(speeches) + var options = micha.SendMessageOptions{ReplyToMessageID: update.Message.MessageID} + _, _ = bot.SendMessage(update.Message.Chat.ID, speeches[n], &options) + } + } + } +} diff --git a/phrases.txt b/phrases.txt new file mode 100644 index 0000000..2642236 --- /dev/null +++ b/phrases.txt @@ -0,0 +1,122 @@ +если хочешь, считай ответом 🤓 + +дочитывать я всё равно не буду. +-- +ну и пошли вы нахуй +-- +какую же хуйню несёшь, даже не дочитал +-- +шульман спроси +-- +может у тебя и сейчас хуй во рту 🤷‍♀ +-- +хуй будешь? а я не предложу 😂 +-- +это ты Андрея бейтишь такой толстотой? 😏 +-- +угадайки дебила часть очередная 🙂 +-- +шульман главное доверяй 🤣 +-- +то недоступно связанным 🤷‍♀ +-- +два варианта: инфантильная безответственность и безответственный инфантилизм 😇 +-- +дебил пытается в угадайки играть 😀 +-- +долбоёб не думает + +у него рефлексы +-- +Сергей Галиченко +убирает за мышами говно +-- +охуительные истории от знотаков +-- +на каждом ответственность +-- +типичная суета дебила 🌚 +-- +куар-код нужен чтобы набить тебе ДОЛБОЁБ 🌚 + +можно молотком +-- +не переживай, тебя не выебу +-- +признал что целка жопная + +молодец, отрабатывает сберегая для любимого 😏 +шульмана наверное 😂 +-- +ну не может такое быть обманом же 😀 +-- +немножечко обосрался борец, но с кем не бывает 😀 +-- +с мудаками не аргументируют 🙂 +-- +ты мудак, вот и вся причина +-- +как есть 🤷‍♀ ты говноед +-- +опять мозг украли +-- +НЕ НАСОСАЛ А ПОДАРИЛИ +-- +ебать ты конджурер +-- +ебанат о критическом мышлении 😂 +-- +новые шедевры ебанины 👀 +-- +чтд, административка +-- +натужно жидким, если угодно +-- +ну вот ты насрал себе на лицо + +и? 🤔 +-- +ебанутый возмутился. иди химтрейлы нюхай +-- +ну и? хуле ты это постишь +-- +твоя оценка будет + +но от ебанутого, срущего себе на голову + +меня не очень тронет 🙂 +-- +ты мудак 🤷‍♀ +-- +ты эм полностью уважение моё потерял 🤷‍♀ + +напомню + +ты мудак, мать твоя дура + +а уж как ты себе на голову срёшь, оно не очень важно. некуда там аргументы +-- +да уж, поссать в глаза проще + +и уместнее +-- +санитаров попроси, может выдадут тебе от очень надо таблеточек 😁 + +но, думаю, продолжишь пиздеть как тебя угнетают +-- +вот, опять визги 😏 +-- +потоки ебанины от мудака 😌 +-- +ты мудак, мать твоя дура +-- +ты в отказе, и мир виноват +-- +мамкой размахивая 😇 +-- +могу тебя послать + +в ебало плюнуть не могу, далеко 😇 +-- +пиздёж +--