Compare commits
No commits in common. "master" and "add_server" have entirely different histories.
master
...
add_server
24
.drone.yml
24
.drone.yml
|
@ -12,15 +12,15 @@ steps:
|
|||
image: appleboy/drone-scp
|
||||
settings:
|
||||
host:
|
||||
from_secret: server_ip
|
||||
from_secret: ssh_ip
|
||||
username:
|
||||
from_secret: ssh_user
|
||||
key:
|
||||
from_secret: ssh_key
|
||||
from_secret: ssh_login
|
||||
password:
|
||||
from_secret: ssh_pass
|
||||
port:
|
||||
from_secret: ssh_port
|
||||
target:
|
||||
- deploys/verochka_tg_bot
|
||||
- bots/verochka_tg_bot
|
||||
source:
|
||||
- verochka_tg_bot
|
||||
- config
|
||||
|
@ -39,21 +39,21 @@ steps:
|
|||
from_secret: ssh_pass
|
||||
settings:
|
||||
host:
|
||||
from_secret: server_ip
|
||||
from_secret: ssh_ip
|
||||
username:
|
||||
from_secret: ssh_user
|
||||
key:
|
||||
from_secret: ssh_key
|
||||
from_secret: ssh_login
|
||||
password:
|
||||
from_secret: ssh_pass
|
||||
port:
|
||||
from_secret: ssh_port
|
||||
envs: [ TOKEN,TOKEN_WEATHER,CHAT_ID,PASSWORD ]
|
||||
command_timeout: 10s
|
||||
script:
|
||||
- cd deploys/verochka_tg_bot
|
||||
- cd bots/verochka_tg_bot
|
||||
- echo $${TOKEN} > token.txt
|
||||
- echo $${TOKEN_WEATHER} > token_weather.txt
|
||||
- echo $${CHAT_ID} > chat_id.txt
|
||||
- echo $${PASSWORD} | sudo -S systemctl restart verochka
|
||||
- echo $${CHAT_ID} > token_weather.txt
|
||||
- echo $${PASSWORD} | sudo -S systemctl restart verochka_tg_bot
|
||||
|
||||
trigger:
|
||||
event:
|
||||
|
|
11
README.md
11
README.md
|
@ -3,6 +3,13 @@
|
|||
|
||||
## develop
|
||||
|
||||
git clone https://git.3crabs.ru/VLADIMIR/verochka verochka
|
||||
cd verochka
|
||||
git clone https://github.com/3crabs/student-verochka-bot student_bot
|
||||
cd student_bot
|
||||
go run main.go --token=<TELEGRAM_API_TOKEN> --key=<YANDEX_WEATHER_API_KEY>
|
||||
|
||||
## deploy
|
||||
|
||||
git clone https://github.com/3crabs/student-verochka-bot student_bot
|
||||
cd student_bot
|
||||
go build -v -o bin/bot
|
||||
./bin/bot --token=<TELEGRAM_API_TOKEN> --key=<YANDEX_WEATHER_API_KEY> &
|
||||
|
|
|
@ -4,7 +4,6 @@ type Command string
|
|||
|
||||
//today_lessons - пары сегодня
|
||||
//tomorrow_lessons - пары завтра
|
||||
//all_lessons - пары на несколько дней
|
||||
//weather - погода у универа
|
||||
//new_year - дней до нового года
|
||||
//ping - проверка связи
|
||||
|
@ -15,7 +14,6 @@ const (
|
|||
Ping = Command("/ping")
|
||||
TodayLessons = Command("/today_lessons")
|
||||
TomorrowLessons = Command("/tomorrow_lessons")
|
||||
AllLessons = Command("/all_lessons")
|
||||
Weather = Command("/weather")
|
||||
NewYear = Command("/new_year")
|
||||
)
|
||||
|
|
|
@ -38,84 +38,84 @@
|
|||
],
|
||||
"messages": [
|
||||
{
|
||||
"header": "",
|
||||
"text": "Пусть новогодние огни\nПоднимут настроение.\nПусть в дом уверенно войдут\nДостаток и везение!\n\nЗдоровья крепкого семье\nИ всяческих свершений.\nИ в ночь волшебную достичь\nЖеланий исполнения!\n\nЛюбви, добра и красоты,\nУспехов и подарков!\nИ пусть счастливым будет год —\nБогатым, добрым, ярким!"
|
||||
"header": "Мокрый Новый год в Таиланде",
|
||||
"text": "Тайцы очень любят праздники и не отказываются от лишнего повода повеселиться. Возможно, поэтому они отмечают Новый год трижды: европейский новый год, китайский и свой собственный праздник смены года — Сонгкран. Сонгкран празднуется в апреле несколько дней подряд. В это время тайцы выходят на улицы, чтобы пожелать друг другу счастья и... облить водой с головы до ног. Считается, что чем быстрее и сильнее ты промокнешь, тем больше счастья придет в новом году."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "С Новым годом поздравляю!\nИ желаю волшебства,\nЧтобы жизнь веселой сказкой\nНепременно ожила!\n\nЧтобы радости мгновений\nБыло больше с каждым днем,\nИ удача без сомнений\nПоселилась прямо в дом!\n\nПусть гремят кругом салюты,\nНовый год уж наступил,\nПробежавшие минуты\nПусть добавят в жизни сил!"
|
||||
"header": "Рождественское полено в странах Европы",
|
||||
"text": "Во многих европейских странах существовал обычай в рождественский сочельник зажигать в очаге полено. По традиции, полено должно было тлеть в камине на протяжении нескольких дней. В течение этого времени дерево поливали вином и медом, посыпали зерном и клали на него кусочки еды, чтобы год был плодородным и счастливым. Пепел от полена хранили весь год, добавляя его в еду и напитки от всех болезней. С течением времени эта трудоемкая традиция ушла в прошлое, но в память о ней в некоторых европейских странах едят рождественский торт под названием «Полено»."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "С Новым годом поздравляю!\nИ желаю перемен,\nЧтобы не было печалей,\nЧтобы не было проблем!\n\nЧтобы жили − не тужили,\nИ мечтать всегда могли,\nСвой доход приумножали,\nСвое счастье берегли!\n\nЧтобы радостных мгновений\nБыло больше с каждым днем,\nЧтобы праздничным салютом\nОсвещен был Новый год!"
|
||||
"header": "В Новый год с новым именем в Микронезии",
|
||||
"text": "На некоторых островах Микронезии каждый год люди берут себе новое имя. 1 января они нашептывают свое новое имя родственникам и друзьям, при этом бьют в барабан или шумят, чтобы их не подслушали злые духи. Из-за этой традиции часто происходят казусы: однажды половина жителей одного из островов весь год носила имя Майкл Джексон."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "Вот растаял старый год,\nКак снежинка на ладошке.\nНовый год спешит рассыпать\nСчастье в каждое окошко.\n\nПусть он радость принесет\nОптимизма и веселья!\nБудто жемчуг соберет\nВсе желанья в ожерелье.\n\nИ исполнит всё-всё-всё,\nЧто задумывалось вами.\nЖизнь наполнит добротой,\nВолшебством и чудесами!"
|
||||
"header": "Мусорный дождь в новогоднюю ночь в Италии",
|
||||
"text": "В Италии считают, что, вступая в новый год, нужно непременно избавиться от всего старого и ненужного. В канун Нового года темпераментные итальянцы выбрасывают старые вещи прямо из окон своих домов. В былые времена на улицы летела даже сломанная мебель. Сейчас же можно попасть под «обстрел» старыми бумагами и мелким мусором."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "Пусть этот славный Новый год\nПодарит счастье и удачу,\nЗдоровья много принесет\nИ денег океан в придачу!\n\nПусть все исполнятся мечты,\nУлыбка пусть сияет ярко!\nЖелаю мира, доброты\nИ замечательных подарков!"
|
||||
"header": "С чемоданом вокруг дома в Эквадоре",
|
||||
"text": "Чтобы год был наполнен множеством путешествий, эквадорцы рекомендуют совершить первое из них прямо в новогоднюю ночь. Для этого нужно обежать вокруг дома с чемоданом в руках, пока часы бьют двенадцать раз."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "Какая сказка за окном!\nКружат снежинки, будто в вальсе,\nВесь мир пропитан волшебством,\nИ воздух переполнен счастьем.\n\nПусть в этот чудный Новый год\nУдача в двери постучится,\nИ счастье вместе с ней войдет,\nИ все, что хочешь ты, случится!"
|
||||
"header": "Виноградины успеха в Испании",
|
||||
"text": "В винных столицах мира ни одно торжество не обходится без винограда. В Испании для всех участников новогоднего застолья заранее подготавливают по двенадцать виноградин (число ударов новогоднего колокола). Испанцы верят, что если все ягоды будут съедены за двенадцать ударов, год обязательно будет успешным."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "Желаю в новом вам году\nПоймать удачу на ходу.\nВсех удивлять, все успевать,\nСмеяться и не унывать.\n\nЛюбить, надеяться и верить\nИ счастье на себя примерить,\nИ никогда вам не тужить,\nИ просто интересно жить!"
|
||||
"header": "Гном и битье посуды в Швеции",
|
||||
"text": "В Швеции, в отличие от большинства европейских стран, подарки детям приносит не высокий бородатый старик, а гном Юль Томтен. А помогают ему разные зверюшки, тролли, феи, принц с принцессой и даже Снежная Королева. Шведы очень любят разные гадания. В новогоднюю ночь они разбивают тарелки о двери соседей. Чем мельче осколки, тем больше счастья придет в новом году."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "Счастье, радость и веселье\nПусть подарит Новый год!\nИ удачи пусть под елку\nВам побольше принесет.\n\nПусть положит под подушку\nПуд тепла и доброты,\nА в ладошке тихо спрячет\nИсполнение мечты.\n\nИз любви и вдохновенья\nПусть сплетет простой венок\nИ завяжет тихо-тихо\nВам на счастье узелок."
|
||||
"header": "Во Вьетнаме Новый год встречают со стариками",
|
||||
"text": "Вьетнамцы считают, что если за новогодним столом сидит человек старше семидесяти лет, его мудрость распространится на всех присутствующих. И чем старше гость, тем больше почета ему оказывают."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "Пусть этот праздник принесет\nВсё то, что в жизни много значит!\nЖелаю в светлый Новый год\nДобра, здоровья и удачи!\n\nПускай веселый смех звучит,\nА сердце — счастье заполняет,\nВедь дед Мороз осуществит\nВсё, что душа твоя желает!"
|
||||
"header": "Ожившие сказки Англии и поцелуи под омелой",
|
||||
"text": "Новый год в Англии отмечается традиционным карнавальным шествием, которое возглавляет Лорд Беспорядок. В толпе сказочных героев можно увидеть Мартовского зайца, Шалтая-Болтая и прочих любимцев детей. Дома и улицы Англии украшаются венками из омелы, которая, по поверьям, обладает магической силой. Во время звона новогоднего колокола влюбленные целуются под таким венком, чтобы жить в согласии."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "Пожелаю в Новый год,\nЧтобы шел год без хлопот,\nПодарил Вам много счастья\nИ укрыл от всех ненастий.\n\nПусть случится волшебство,\nДарит радость торжество.\nПусть все сбудутся мечты.\nСчастья, мира, доброты!"
|
||||
"header": "В Голландии идут в гости со спичками",
|
||||
"text": "Голландцы идут на новогодний ужин, захватив с собой спичку. Спичка впоследствии сжигается в камине. Если она сгорает полностью, год будет очень счастливым."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "С Новым годом поздравляю\nИ от всей души желаю\nВеселиться и смеяться,\nНи на что не обижаться,\nЖить легко и без забот\nВесь грядущий новый год.\n\nНаслаждаться каждым мигом\nИ дарить свое тепло,\nБыть всегда на позитиве,\nЧтоб всегда во всём везло!\n\nС Новым годом! С новым счастьем!\nСмеха, мира и добра!\nПусть обходят все ненастья,\nЖизнь одарит вас сполна!"
|
||||
"header": "Бочка дегтя в Шотландии",
|
||||
"text": "В некоторых городах Шотландии в новогоднюю ночь поджигают бочки с дегтем и катят их по улицам города. Так сжигают старый год и очищают дорогу новому. Если вам предстоит новогодний ужин у шотландца, не забудьте захватить с собой уголек, чтобы бросить его в очаг хозяина. Таким образом в Шотландии желают удачи в новом году."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "С Новым годом, с Новым годом!\nПусть здоровье входит в дом,\nПусть Мороз рукою легкой\nРазбросает счастье в нем!\n\nБудет пусть он полон смеха,\nИ любви, и доброты,\nЧтоб заботы — не помеха,\nДостатка, мира, красоты!"
|
||||
"header": "Японцы загребают счастье граблями",
|
||||
"text": "В Японии к Новому году принято украшать дома бамбуковыми граблями. Считается, что если в доме нет граблей, то нечем будет загребать счастье. В первые секунды нового года японцы громко смеются, чтобы год был веселым и радостным."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "С Новым годом! С Новым счастьем!\nПусть исполнятся мечты,\nВ миг чудесный, в миг прекрасный,\nВ новогодний дивный миг!\n\nЧтобы было чудо в доме,\nРадость, счастье, волшебство,\nПозитив, тепло, веселье,\nИ здоровье, и добро!\n\nПусть умножатся доходы,\nКлассных, выгодных идей,\nЧтобы были только лучше,\nЧтобы жили веселей!"
|
||||
"header": "Во Франции у кого боб, тот и король",
|
||||
"text": "В католической Франции зимние праздники заканчиваются 6 января на Богоявление. Этот праздник посвящен библейскому сюжету о трех волхвах, которые принесли дары младенцу Христу. В современной Франции в этот день едят знаменитый слоеный пирог с начинкой из миндаля — Пирог Волхвов. Пирог разрезается на части, один из гостей забирается под стол и оттуда выкрикивает, кому какой кусок следует отдать. В прежние времена в пироге запекался боб, и человек, которому он попадался, становился королем вечера. Сейчас в пирог кладут керамическую фигурку и корону из картона."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "Пусть в Новом году всё плохое сотрется,\nКак ластик стирает ненужный нам штрих!\nПусть самое лучшее вам улыбнется,\nИ ярким пусть будет в году каждый миг!\n\nЗдоровья, успехов и много везенья,\nДостатка и благ в наступившем году!\nОтличных идей и всегда вдохновенья!\nВсего лишь хорошего в вашу судьбу!"
|
||||
"header": "В Бразилии «море пламенем горит»",
|
||||
"text": "В жаркой Бразилии в новогоднюю ночь океан сверкает огнями. По традиции, люди загадывают желания и пускают по воде плоты со свечами и дарами богине моря. В прибрежные волны бросают лепестки белых цветов в надежде, что океан примет желания и не выбросит лепестки на берег. Приход Нового года сопровождает выстрел из пушки, после которого бразильцы обнимают всех вокруг, чтобы год был полон любви."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "Пусть год уходящий с собой заберет\nПроблемы, недуги, ненастье,\nА новый − здоровье и радость несет,\nЛюбовь доброту и участье!\n\nЧудес новогодних, добра, волшебства,\nУюта, семейного счастья,\nУлыбок, веселья, достатка, тепла,\nНе знать ни забот, ни напастей."
|
||||
"header": "В Венгрии освистывают злых духов",
|
||||
"text": "Венгры уверены в том, что злые духи очень боятся звука свистков и дудочек. Чтобы наступающий год был счастливым, перед его приходом обязательно нужно очистить города от духов-вредителей. И в новогоднюю ночь Венгрия наполняется громкими трелями и свистом."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "Желаю в этот Новый год\nПоменьше грусти и забот,\nПобольше счастья и добра,\nУлыбок, нежности, тепла!\n\nЧтоб были верными друзья\nИ очень дружною семья,\nЧтоб каждый день удачным был,\nИ чтоб на всё хватало сил!\n\nНу а ещё пусть Новый год\nПобольше денег принесёт,\nЗдоровья, мира и любви,\nЧтоб в сердце не было зимы!"
|
||||
"header": "Чтобы год был сладким, в Израиле едят сладости",
|
||||
"text": "В Израиле отмечают Новый год в сентябре. Во время праздника едят сладкую пищу. Даже рыбу поливают медом. От горькой еды стараются отказаться, чтобы не привлечь «горькую» жизнь в новом году."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "С Новым годом поздравляю\nИ от всей души желаю,\nЧтоб сбывались все мечты,\nВ праздник зимней красоты!\n\nЧтобы счастье приходило,\nВам везение дарило,\nА еще успех и радость,\nЧудеса, удачи сладость!"
|
||||
"header": "Кубинцы смывают грехи в новогоднюю ночь",
|
||||
"text": "В день перед Новым годом на Кубе наливают воду в кружки, тазы и кастрюли. Каждый набирает столько воды, сколько, по его мнению, грехов он совершил за год. После полуночи вода выливается за порог, что символизирует очищение от пороков."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "С Новым годом! С новым счастьем!\nНикогда не знать ненастья,\nВерить в чудо и добро,\nЧтоб плохое всё ушло!\n\nЖить и жизнью наслаждаться,\nНикогда не огорчаться,\nБыть любимыми, любить\nИ тепло души дарить.\n\nДобрых лишь людей встречать,\nО заботах не ворчать,\nВерных, преданных друзей,\nСамых лучших, светлых дней!"
|
||||
"header": "Пауза для поцелуев в Болгарии и кизиловые палочки",
|
||||
"text": "Во время празднования Нового года в Болгарии во всех домах на три минуты выключают свет. В это время можно поцеловаться с тем, с кем не решался сделать это при свете. А 1 января болгарские дети идут поздравлять взрослых с кизиловыми палочками в руках. Дети стучат палочками друг о друга, после чего получают подарки."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "Новый Год — прекрасный праздник,\nПусть в нем крупно повезет,\nНастроенье будет ясным,\nА удача — круглый год!\n\nВ чудеса поверить нужно,\nИ они придут к тебе\nИ помогут вместе, дружно\nК небесам взлететь мечте.\n\nВаша жизнь пусть станет сказкой,\nБудет в ней всегда добро,\nЖизнь наполнит счастьем, лаской,\nПусть все будет хорошо!"
|
||||
"header": "Санта Клаус — серфингист в Австралии",
|
||||
"text": "Новый год отмечается в Австралии летом. Жара вынуждает Санту избавиться от теплой шубы, и из всего праздничного костюма на нем часто остаются лишь красные плавки, борода и колпак. Оленям жары тоже не вынести, и на санях без снега не проехать, поэтому Санта Клаус доставляет подарки на серфе. Толпа встречает его на пляже радостными криками и фейерверками."
|
||||
},
|
||||
{
|
||||
"header": "",
|
||||
"text": "Вот приходит Новый год\nИ с собой он пусть несет\nМного счастья, много смеха,\nВ жизни и в делах — успеха.\n\nЯрких, творческих идей,\nСамых преданных друзей.\nИ любви − огромной, чистой,\nИ улыбок − лишь лучистых!"
|
||||
"header": "Камень за пазухой в Греции",
|
||||
"text": "Если вы идете на новогодний ужин в Греции, по дороге обязательно подберите камень побольше. Крупные камни греки кладут у порога хозяина дома с пожеланиями такого же большого богатства. Если же больших камней не нашлось, можно взять самый маленький и пожелать, чтобы возможные беды хозяев были не тяжелее этого камешка."
|
||||
}
|
||||
]
|
||||
}
|
3
cron.txt
3
cron.txt
|
@ -1,3 +0,0 @@
|
|||
0 3 * * 1-5 curl http://127.0.0.1:10001/send_today_lessons_to_chat
|
||||
0 15 * * 1-5 curl http://127.0.0.1:10001/send_tomorrow_lessons_to_chat
|
||||
0 5 20-31 12 * curl http://127.0.0.1:10001/send_new_year_to_chat
|
25
date/date.go
25
date/date.go
|
@ -2,31 +2,10 @@ package date
|
|||
|
||||
import "time"
|
||||
|
||||
func Today(offset time.Duration) string {
|
||||
func Today() int {
|
||||
location, err := time.LoadLocation("Asia/Novosibirsk")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
return time.Now().In(location).Add(offset).Format("2006-01-02")
|
||||
}
|
||||
|
||||
func GetTranslatedWeekday(date time.Time) string {
|
||||
switch date.Weekday() {
|
||||
case time.Monday:
|
||||
return "Понедельник"
|
||||
case time.Tuesday:
|
||||
return "Вторник"
|
||||
case time.Wednesday:
|
||||
return "Среда"
|
||||
case time.Thursday:
|
||||
return "Четверг"
|
||||
case time.Friday:
|
||||
return "Пятница"
|
||||
case time.Saturday:
|
||||
return "Суббота"
|
||||
case time.Sunday:
|
||||
return "Воскресенье"
|
||||
default:
|
||||
return ""
|
||||
}
|
||||
return int(time.Now().In(location).Weekday())
|
||||
}
|
||||
|
|
8
go.mod
8
go.mod
|
@ -4,9 +4,13 @@ go 1.17
|
|||
|
||||
require (
|
||||
github.com/3crabs/go-yandex-weather-api v0.6.0
|
||||
github.com/erizocosmico/go-ics v0.0.0-20180527181030-697b9000b86f
|
||||
github.com/PuerkitoBio/goquery v1.7.1
|
||||
github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible
|
||||
github.com/umputun/go-flags v1.5.1
|
||||
)
|
||||
|
||||
require github.com/technoweenie/multipartstreamer v1.0.1 // indirect
|
||||
require (
|
||||
github.com/andybalholm/cascadia v1.3.1 // indirect
|
||||
github.com/technoweenie/multipartstreamer v1.0.1 // indirect
|
||||
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f // indirect
|
||||
)
|
||||
|
|
17
go.sum
17
go.sum
|
@ -1,10 +1,23 @@
|
|||
github.com/3crabs/go-yandex-weather-api v0.6.0 h1:EpqAfaStJNVRNRyYsvUmiNFQYGrQ+eXVP2e+vMWIh08=
|
||||
github.com/3crabs/go-yandex-weather-api v0.6.0/go.mod h1:MZLPelQjylEK4nPL9g2cpnAPtqzOpF/SrtRGWXK7QHs=
|
||||
github.com/erizocosmico/go-ics v0.0.0-20180527181030-697b9000b86f h1:IUdUh6y8VDhn5iO/ggBCVb9H0vOI3MDlhDSDCrrSC8Q=
|
||||
github.com/erizocosmico/go-ics v0.0.0-20180527181030-697b9000b86f/go.mod h1:VFnDugGvBJREsor/aiVcXhvAbyjatl0AKXEaGV9u63I=
|
||||
github.com/PuerkitoBio/goquery v1.7.1 h1:oE+T06D+1T7LNrn91B4aERsRIeCLJ/oPSa6xB9FPnz4=
|
||||
github.com/PuerkitoBio/goquery v1.7.1/go.mod h1:XY0pP4kfraEmmV1O7Uf6XyjoslwsneBbgeDjLYuN8xY=
|
||||
github.com/andybalholm/cascadia v1.2.0/go.mod h1:YCyR8vOZT9aZ1CHEd8ap0gMVm2aFgxBp0T0eFw1RUQY=
|
||||
github.com/andybalholm/cascadia v1.3.1 h1:nhxRkql1kdYCc8Snf7D5/D3spOX+dBgjA6u8x004T2c=
|
||||
github.com/andybalholm/cascadia v1.3.1/go.mod h1:R4bJ1UQfqADjvDa4P6HZHLh/3OxWWEqc0Sk8XGwHqvA=
|
||||
github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible h1:2cauKuaELYAEARXRkq2LrJ0yDDv1rW7+wrTEdVL3uaU=
|
||||
github.com/go-telegram-bot-api/telegram-bot-api v4.6.4+incompatible/go.mod h1:qf9acutJ8cwBUhm1bqgz6Bei9/C/c93FPDljKWwsOgM=
|
||||
github.com/technoweenie/multipartstreamer v1.0.1 h1:XRztA5MXiR1TIRHxH2uNxXxaIkKQDeX7m2XsSOlQEnM=
|
||||
github.com/technoweenie/multipartstreamer v1.0.1/go.mod h1:jNVxdtShOxzAsukZwTSw6MDx5eUJoiEBsSvzDU9uzog=
|
||||
github.com/umputun/go-flags v1.5.1 h1:vRauoXV3Ultt1HrxivSxowbintgZLJE+EcBy5ta3/mY=
|
||||
github.com/umputun/go-flags v1.5.1/go.mod h1:nTbvsO/hKqe7Utri/NoyN18GR3+EWf+9RrmsdwdhrEc=
|
||||
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20210916014120-12bc252f5db8/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f h1:OfiFi4JbukWwe3lzw+xunroH1mnC1e2Gy5cxNJApiSY=
|
||||
golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
|
|
68
main.go
68
main.go
|
@ -132,18 +132,6 @@ func run() {
|
|||
w.WriteHeader(http.StatusOK)
|
||||
_, _ = fmt.Fprintf(w, `{"result":"ok"}`)
|
||||
})
|
||||
http.HandleFunc("/send_tomorrow_lessons_to_chat", func(w http.ResponseWriter, r *http.Request) {
|
||||
sendTomorrowLessonsToChat(bot, opts.ChatID, "Завтра эти пары:")
|
||||
w.Header().Add("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
_, _ = fmt.Fprintf(w, `{"result":"ok"}`)
|
||||
})
|
||||
http.HandleFunc("/send_new_year_to_chat", func(w http.ResponseWriter, r *http.Request) {
|
||||
sendNewYearToChat(bot, opts.ChatID, imageService)
|
||||
w.Header().Add("Content-Type", "application/json")
|
||||
w.WriteHeader(http.StatusOK)
|
||||
_, _ = fmt.Fprintf(w, `{"result":"ok"}`)
|
||||
})
|
||||
|
||||
port := ":10001"
|
||||
log.Println("Server is start up! port", port)
|
||||
|
@ -187,10 +175,11 @@ func run() {
|
|||
sendTodayLessonsToChat(bot, chatID, "Сегодня, "+update.Message.From.FirstName+", эти пары:")
|
||||
|
||||
case commands.TomorrowLessons:
|
||||
sendTomorrowLessonsToChat(bot, chatID, "Завтра, "+update.Message.From.FirstName+", эти пары:")
|
||||
|
||||
case commands.AllLessons:
|
||||
sendAllLessonsToChat(bot, chatID, "Пока знаю про эти пары:")
|
||||
send(bot, tgbot.NewMessage(chatID, messages.LessonsMessage(
|
||||
parser.ParseByDay(date.Today()+1),
|
||||
"Завтра, "+update.Message.From.FirstName+", эти пары:",
|
||||
"Завтра пар нет",
|
||||
)))
|
||||
|
||||
case commands.Weather:
|
||||
w, err := weather.GetWeatherWithCache(opts.Key, 53.346853, 83.777012, time.Hour)
|
||||
|
@ -200,7 +189,11 @@ func run() {
|
|||
send(bot, tgbot.NewMessage(chatID, messages.WeatherMessage(w)))
|
||||
|
||||
case commands.NewYear:
|
||||
sendNewYearToChat(bot, chatID, imageService)
|
||||
url := imageService.GetRandomImageURL()
|
||||
message := imageService.GetRandomMessage()
|
||||
msg := tgbot.NewPhotoShare(chatID, url)
|
||||
msg.Caption = messages.NewYearMessage(message)
|
||||
send(bot, msg)
|
||||
|
||||
default:
|
||||
}
|
||||
|
@ -215,49 +208,12 @@ func send(bot *tgbot.BotAPI, msg tgbot.Chattable) {
|
|||
func sendTodayLessonsToChat(bot *tgbot.BotAPI, chatID int64, prefix string) {
|
||||
send(
|
||||
bot,
|
||||
tgbot.NewMessage(
|
||||
chatID,
|
||||
tgbot.NewMessage(chatID,
|
||||
messages.LessonsMessage(
|
||||
parser.ParseByDay(date.Today(0)),
|
||||
parser.ParseByDay(date.Today()),
|
||||
prefix,
|
||||
"Сегодня пар нет",
|
||||
),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
func sendTomorrowLessonsToChat(bot *tgbot.BotAPI, chatID int64, prefix string) {
|
||||
send(
|
||||
bot,
|
||||
tgbot.NewMessage(
|
||||
chatID,
|
||||
messages.LessonsMessage(
|
||||
parser.ParseByDay(date.Today(24*time.Hour)),
|
||||
prefix,
|
||||
"Завтра пар нет",
|
||||
),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
func sendAllLessonsToChat(bot *tgbot.BotAPI, chatID int64, prefix string) {
|
||||
send(
|
||||
bot,
|
||||
tgbot.NewMessage(
|
||||
chatID,
|
||||
messages.LessonsMessage(
|
||||
parser.ParseByDay(""),
|
||||
prefix,
|
||||
"Пусто",
|
||||
),
|
||||
),
|
||||
)
|
||||
}
|
||||
|
||||
func sendNewYearToChat(bot *tgbot.BotAPI, chatID int64, imageService new_year_service.NewYearService) {
|
||||
url := imageService.GetRandomImageURL()
|
||||
message := imageService.GetRandomMessage()
|
||||
msg := tgbot.NewPhotoShare(chatID, url)
|
||||
msg.Caption = messages.NewYearMessage(message)
|
||||
send(bot, msg)
|
||||
}
|
||||
|
|
|
@ -5,7 +5,6 @@ import (
|
|||
"math/rand"
|
||||
"strconv"
|
||||
"strings"
|
||||
"student_bot/date"
|
||||
"student_bot/new_year_service"
|
||||
"student_bot/parser"
|
||||
"time"
|
||||
|
@ -30,11 +29,10 @@ func ThanksMessage() string {
|
|||
}
|
||||
|
||||
func HelpMessage(chatID int64) string {
|
||||
return "Вот чем я могу вам помочь (v1.4.6), отправь:\n\n" +
|
||||
return "Вот чем я могу вам помочь (v1.0.4), отправь:\n\n" +
|
||||
"- /ping отобью pong\n" +
|
||||
"- /today_lessons покажу расписание на сегодня\n" +
|
||||
"- /tomorrow_lessons покажу расписание на завтра\n" +
|
||||
"- /all_lessons - пары на несколько дней\n" +
|
||||
"- /weather покажу погоду у универа\n" +
|
||||
"- /new_year - посчитаю количество дней до нового года\n" +
|
||||
"\nНу а больше я пока ничего не умею" +
|
||||
|
@ -54,30 +52,18 @@ func LessonsMessage(schedule []parser.Lesson, prefix, emptyText string) string {
|
|||
if prefix != "" {
|
||||
s += prefix + "\n\n"
|
||||
}
|
||||
endDate := ""
|
||||
for _, l := range schedule {
|
||||
if endDate != l.TimeStart.Format("02.01") {
|
||||
if endDate != "" {
|
||||
s += "\n"
|
||||
}
|
||||
endDate = l.TimeStart.Format("02.01")
|
||||
s += date.GetTranslatedWeekday(l.TimeStart) + " " + endDate + "\n"
|
||||
}
|
||||
if strings.Contains(l.User, "Ярных В.В.") {
|
||||
s += "⭐️ "
|
||||
}
|
||||
l.Name = strings.ReplaceAll(l.Name, l.Place, "")
|
||||
l.Name = strings.ReplaceAll(l.Name, "()", "")
|
||||
l.Name = strings.ReplaceAll(l.Name, l.TimeStart.Format("15:04"), "")
|
||||
l.Name = strings.TrimSpace(l.Name)
|
||||
s += fmt.Sprintf("%s %s (%s)\n%s\n", l.TimeMsg, l.Name, l.Place, l.User)
|
||||
s += fmt.Sprintf("%s %s (%s)\n", l.Time, l.Name, l.Place)
|
||||
}
|
||||
if prefix != "" {
|
||||
s += "\n" +
|
||||
"Д — Димитрова 66\n" + // (Филологический, социологический)
|
||||
"Л — Ленина 61\n" + // (Математический, биологический)
|
||||
"М — Ленина 61а\n" + // (Исторический и географический)
|
||||
"С — Социалистический 68" // (Экономический и юридический)
|
||||
"Д — Димитрова 66 (Филологический, социологический)\n" +
|
||||
"Л — Ленина 61 (Математический и биологический)\n" +
|
||||
"М — Ленина 61а (Исторический и географический)\n" +
|
||||
"С — Социалистический 68 (Экономический и юридический)"
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
@ -106,13 +92,10 @@ func WeatherMessage(w weather.Weather) string {
|
|||
|
||||
func NewYearMessage(message new_year_service.NewYearMessage) string {
|
||||
loc := time.FixedZone("UTC+7", +7*60*60)
|
||||
ny := time.Date(time.Now().Year()+1, 1, 1, 0, 0, 0, 0, loc)
|
||||
ny := time.Date(2023, 1, 1, 0, 0, 0, 0, loc)
|
||||
now := time.Now().In(loc)
|
||||
days := ny.Sub(now).Hours() / 24
|
||||
if message.Header != "" {
|
||||
return fmt.Sprintf("❄ %s ❄ \n\n%s\n\n%s", toStrDays(int(days)), message.Header, message.Text)
|
||||
}
|
||||
return fmt.Sprintf("❄ %s ❄ \n\n%s", toStrDays(int(days)), message.Text)
|
||||
return fmt.Sprintf("❄ %s ❄ \n\n%s\n\n%s", toStrDays(int(days)), message.Header, message.Text)
|
||||
}
|
||||
|
||||
func toStrDays(days int) string {
|
||||
|
|
|
@ -4,10 +4,9 @@ import (
|
|||
"fmt"
|
||||
"student_bot/date"
|
||||
"student_bot/parser"
|
||||
"time"
|
||||
)
|
||||
|
||||
func main() {
|
||||
lessons := parser.ParseByDay(date.Today(-48 * time.Hour))
|
||||
lessons := parser.ParseByDay(date.Today())
|
||||
fmt.Println(lessons)
|
||||
}
|
||||
|
|
124
parser/parser.go
124
parser/parser.go
|
@ -1,54 +1,126 @@
|
|||
package parser
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"net/http"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/erizocosmico/go-ics"
|
||||
"github.com/PuerkitoBio/goquery"
|
||||
)
|
||||
|
||||
const scheduleURLTemplate = "https://www.asu.ru/timetable/students/12/2129440415/?date=%s-%s"
|
||||
|
||||
type Lesson struct {
|
||||
Number string
|
||||
TimeStart time.Time
|
||||
TimeMsg string
|
||||
Name string
|
||||
User string
|
||||
Place string
|
||||
Day int
|
||||
Number string
|
||||
Time string
|
||||
Name string
|
||||
User string
|
||||
Place string
|
||||
}
|
||||
|
||||
func ParseByDay(day string) []Lesson {
|
||||
func ParseByDay(day int) []Lesson {
|
||||
return selectLessonsByDay(parse(), day)
|
||||
}
|
||||
|
||||
func parse() []Lesson {
|
||||
link := "https://www.asu.ru/timetable/students/12/2129440415/?file=2129440415.ics"
|
||||
calendar, err := ics.ParseCalendar(link, 0, nil)
|
||||
location, err := time.LoadLocation("Asia/Novosibirsk")
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
now := time.Now().In(location)
|
||||
url := fmt.Sprintf(scheduleURLTemplate, now.Format("20060102"), now.Add(24*time.Hour).Format("20060102"))
|
||||
|
||||
var lessons []Lesson
|
||||
for _, event := range calendar.Events {
|
||||
l := Lesson{
|
||||
Number: "",
|
||||
TimeStart: event.Start,
|
||||
TimeMsg: event.Start.Format("15:04") + " - " + event.End.Format("15:04"),
|
||||
Name: event.Summary,
|
||||
User: event.Description,
|
||||
Place: event.Location,
|
||||
}
|
||||
if l.Place == "" {
|
||||
l.Place = "не приходи"
|
||||
}
|
||||
lessons = append(lessons, l)
|
||||
// Get html
|
||||
res, err := http.Get(url)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer func(Body io.ReadCloser) {
|
||||
_ = Body.Close()
|
||||
}(res.Body)
|
||||
if res.StatusCode != 200 {
|
||||
log.Fatalf("status code error: %d %s", res.StatusCode, res.Status)
|
||||
}
|
||||
|
||||
// Load the HTML document
|
||||
doc, err := goquery.NewDocumentFromReader(res.Body)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
// Find the review items
|
||||
k := 0
|
||||
var lessons []Lesson
|
||||
var l Lesson
|
||||
doc.Find(".schedule_table tr td").Each(func(i int, s *goquery.Selection) {
|
||||
text := strings.TrimSpace(s.Text())
|
||||
if strings.Contains(text, "Понедельник") ||
|
||||
strings.Contains(text, "Вторник") ||
|
||||
strings.Contains(text, "Среда") ||
|
||||
strings.Contains(text, "Четверг") ||
|
||||
strings.Contains(text, "Пятница") ||
|
||||
strings.Contains(text, "Суббота") {
|
||||
k = 0
|
||||
l = Lesson{}
|
||||
if strings.Contains(text, "Понедельник") {
|
||||
l.Day = 1
|
||||
}
|
||||
if strings.Contains(text, "Вторник") {
|
||||
l.Day = 2
|
||||
}
|
||||
if strings.Contains(text, "Среда") {
|
||||
l.Day = 3
|
||||
}
|
||||
if strings.Contains(text, "Четверг") {
|
||||
l.Day = 4
|
||||
}
|
||||
if strings.Contains(text, "Пятница") {
|
||||
l.Day = 5
|
||||
}
|
||||
if strings.Contains(text, "Суббота") {
|
||||
l.Day = 6
|
||||
}
|
||||
}
|
||||
n := (k - 1) % 6
|
||||
if n == 0 {
|
||||
l.Number = trim(text)
|
||||
}
|
||||
if n == 1 {
|
||||
l.Time = trim(text)
|
||||
}
|
||||
if n == 2 {
|
||||
l.Name = trim(text)
|
||||
}
|
||||
if n == 3 {
|
||||
l.User = trim(text)
|
||||
}
|
||||
if n == 4 {
|
||||
l.Place = trim(text)
|
||||
if l.Place == "" {
|
||||
l.Place = "не приходи"
|
||||
}
|
||||
lessons = append(lessons, l)
|
||||
}
|
||||
k++
|
||||
})
|
||||
return lessons
|
||||
}
|
||||
|
||||
func selectLessonsByDay(schedule []Lesson, day string) []Lesson {
|
||||
func trim(s string) string {
|
||||
s = strings.Replace(s, "пр.з.", "пр.", -1)
|
||||
s = strings.Replace(s, " ", "", -1)
|
||||
s = strings.Replace(s, "\n", " ", -1)
|
||||
return s
|
||||
}
|
||||
|
||||
func selectLessonsByDay(schedule []Lesson, day int) []Lesson {
|
||||
var todayLessons []Lesson
|
||||
for _, l := range schedule {
|
||||
if day == "" || strings.Contains(l.TimeStart.String(), day) {
|
||||
if l.Day == day {
|
||||
todayLessons = append(todayLessons, l)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
[Service]
|
||||
WorkingDirectory=/home/crab/deploys/verochka_tg_bot
|
||||
ExecStart=/home/crab/deploys/verochka_tg_bot/verochka_tg_bot
|
||||
Restart=always
|
Loading…
Reference in New Issue