From 2c72bc802348b54d9f22e59d221a59d53ed951c4 Mon Sep 17 00:00:00 2001 From: Vladimir Hodakov Date: Sun, 6 May 2018 05:57:52 +0400 Subject: [PATCH] Add /rules command and trigger for all group chat commands --- lib/connections/connections.go | 2 +- lib/router/group_request.go | 4 ++ lib/router/private_request.go | 3 ++ lib/talkers/help.go | 45 +++++++++++++++++++ .../talkersinterface/talkersinterface.go | 1 + lib/welcomer/welcomer.go | 2 + 6 files changed, 56 insertions(+), 1 deletion(-) diff --git a/lib/connections/connections.go b/lib/connections/connections.go index 2aded03..e6352ca 100644 --- a/lib/connections/connections.go +++ b/lib/connections/connections.go @@ -5,7 +5,7 @@ package connections import ( "bitbucket.org/pztrn/mogrus" - _ "github.com/go-sql-driver/mysql" + _ "github.com/go-sql-driver/mysql" // MySQL driver for sqlx "github.com/go-telegram-bot-api/telegram-bot-api" "github.com/jmoiron/sqlx" "source.wtfteam.pro/i2_bot/i2_bot/lib/config" diff --git a/lib/router/group_request.go b/lib/router/group_request.go index 03dcc1d..d47c216 100644 --- a/lib/router/group_request.go +++ b/lib/router/group_request.go @@ -63,6 +63,10 @@ func (r *Router) routeGroupRequest(update tgbotapi.Update, playerRaw *dbmapping. switch { case update.Message.Command() == "long": return c.Talkers.LongMessage(&update) + default: + if update.Message.IsCommand() { + return c.Talkers.RulesMessage(&update) + } } // Ah, we're still here diff --git a/lib/router/private_request.go b/lib/router/private_request.go index 30d5789..fcb982a 100644 --- a/lib/router/private_request.go +++ b/lib/router/private_request.go @@ -67,6 +67,9 @@ func (r *Router) routePrivateRequest(update tgbotapi.Update, playerRaw *dbmappin return "ok" case update.Message.Command() == "faq": return c.Talkers.FAQMessage(&update) + case update.Message.Command() == "rules": + return c.Talkers.RulesMessage(&update) + case update.Message.Command() == "academy": c.Talkers.AcademyMessage(&update, playerRaw) return "ok" diff --git a/lib/talkers/help.go b/lib/talkers/help.go index 1fbd844..6a3ebbe 100644 --- a/lib/talkers/help.go +++ b/lib/talkers/help.go @@ -165,3 +165,48 @@ func (t *Talkers) FAQMessage(update *tgbotapi.Update) string { return constants.UserRequestSuccess } + +// RulesMessage prints chat rules +func (t *Talkers) RulesMessage(update *tgbotapi.Update) string { + if update.Message.Chat.IsPrivate() { + message := "*Правила чатов лиги Инстинкт*\n_Версия 2.1, принята 17.12.2017, с дополнениями от 24.01.2018, с дополнениями от 04.04.2018._\n\n" + + message += "*Запрещённые в чате вещи:*\n" + message += "1. Бессмысленный флуд — стикерами, смайлами, множественным тыканьем «команд» (сообщений, начинающихся с /), множественными короткими сообщениями\n" + message += "2. Реклама других игр или проектов. Простого обсуждения игр и проектов без ссылок на них это не касается. За обнуление аккаунта в игре PokememBro из-за обсуждений другой игры ответственности администрация чата не несёт.\n" + message += "3. Бессмысленная ругань, хамство по отношению к другим участникам чата. То, что вы давно знакомы и всю жизнь общаетесь на «Слышь, ублюдок ёбаный» администрация чата знать не обязана.\n" + message += "4. Пародирование ников, аватаров или других опознавательных признаков других участников чата. Разбан по данному пункту правил возможен лишь после переименования.\n" + message += "5. Оспаривание приказа совета на атаку. Обсуждение того, кого атаковать, и принятие решения об этом, является прерогативой командиров отрядов. Они же и несут ответственность в случае поражения своего отряда. Призыв атаковать, противоречащий приказу Совета или командира отряда — запрещён.\n" + message += "6. Дезинформирование других игроков, спрашивающих цель атаки.\n" + message += "7. Отправка в чат одного и того же сообщения несколько раз подряд, или отправка одного сообщения в разные чаты одновременно. Степень похожести двух сообщений определяется администрацией чата.\n" + message += "8. Отправка одних и тех же вопросов наставникам Академии. Самые часто задаваемые вопросы уже освещены в справке @i2\\_bot (команда /faq). Если вы считаете, что вопрос следует добавить в /faq — пишите об этом @Eigot. Первая отправка такого вопроса не карается, последующие — на усмотрение наставника Академии.\n" + message += "9. Обсуждение вещей, запрещенных законодательством Российской Федерации и/или одной из стран Европейского союза. \n" + message += "10. Политический или около-политический, религиозный, половой или националистический флейм в любой форме.\n" + message += "11. Указание участникам чата на то, что они нарушают данные правила. Оставьте работу администрации модераторам. Хотите оповестить модераторов о том, что в чате нарушаются правила — пишите им в личные сообщения.\n" + message += "12. Создание твинков (дополнительных аккаунтов) для преодоления ограничений, наложенных на основной аккаунт, ведёт к увеличению ограничения на основном аккаунте вдвое и пожизненному бану твинка.\n" + message += "13. Вынос за пределы чатов лиги того, что было отправлено в чаты лиги (даже если это ваше собственное сообщение). Переписка с ботом @i2\\_bot и игровые профили тоже подпадают под это правило — их пересылать куда-либо, кроме чатов лиги и бота @i2\\_bot, нельзя.\n" + message += "14. Использование игровых ботов (и вообще любых ботов), кроме @i2\\_bot, в чатах лиги, за исключением специализированного. Ссылку на специализированный чат можно узнать, отправив в личные сообщения @i2\\_bot команду /games\\_chat.\n\n" + + c.Sender.SendMarkdownAnswer(update, message) + + message = "*Применение правил*:\n" + message += "1. Администрация чата является ответственной за применение правил и чистоту на территории чатов лиги.\n" + message += "2. В Telegram существует исключительно постмодерация. Из этого следует: то, что сообщение существует в чате, не означает того, что оно соответствует правилам.\n" + message += "3. Срок и вид наказания (мут/бан) устанавливается модератором чата в каждом случае применения правил индивидуально. В каждом случае учитывается поведение пользователя до, во время и после инцидента, влекущего за собой применение правил. \n" + message += "4. Модераторы чатов отчитываются Совету лиги в установленной Советом форме, доступной исключительно для модераторов и членов Совета Лиги. Модераторы чатов не обязаны пояснять свои действия никому из других пользователей чата, включая авторов игры PokememBro, кроме членов Совета, за исключением случаев, когда их действия нарушают правила игры PokememBro.\n" + message += "5. В случае ограничения пользователя по одному из пунктов правил, кроме случая, если ограничение установлено пожизненно без права на амнистию, разрешается обратиться к одному из модераторов чата с просьбой о разблокировке с обещанием не нарушать впредь правила. Злоупотребляющие данным пунктом пользователи могут получить пожизненный бан без права на амнистию за любое нарушение.\n" + message += "6. Обсуждение ограничения пользователя допускается лишь в форме личного обращения пользователя к модератору (в ЛС). Вынос обсуждения ограничения пользователя в одном чате лиги в другой чат ведёт лишь к увеличению наказания (и шансу получить пожизненный бан).\n" + message += "7. Администрация чата применяет правила в соответствии со своей совестью, убеждениями и обстановкой в чате. Не следует сомневаться в компетенции модераторов — их назначил Совет лиги, и только он может решать, хорошо они исполняют свою работу, или нет.\n\n" + + message += "Правила могут быть изменены без предупреждения в любой момент времени.\n\n" + message += "Данные правила созданы с целью поддерживать порядок в чатах лиги. В них нет задачи ущемить кого-либо. Уважайте других пользователей — и вас будут уважать" + + c.Sender.SendMarkdownAnswer(update, message) + } else { + message := "Не нарушай правила, боженька молниями отхуячит!\n\nПрочитать правила можно, отправив команду /rules в личные сообщения @i2\\_bot." + + c.Sender.SendMarkdownAnswer(update, message) + } + + return "ok" +} diff --git a/lib/talkers/talkersinterface/talkersinterface.go b/lib/talkers/talkersinterface/talkersinterface.go index c92b729..a38b7c6 100644 --- a/lib/talkers/talkersinterface/talkersinterface.go +++ b/lib/talkers/talkersinterface/talkersinterface.go @@ -17,6 +17,7 @@ type TalkersInterface interface { GamesMessage(update *tgbotapi.Update, playerRaw *dbmapping.Player) string HelpMessage(update *tgbotapi.Update, playerRaw *dbmapping.Player) string FAQMessage(update *tgbotapi.Update) string + RulesMessage(update *tgbotapi.Update) string AnyMessageUnauthorized(update *tgbotapi.Update) string BanError(update *tgbotapi.Update) string diff --git a/lib/welcomer/welcomer.go b/lib/welcomer/welcomer.go index e4b9127..8c1d4ec 100644 --- a/lib/welcomer/welcomer.go +++ b/lib/welcomer/welcomer.go @@ -36,6 +36,8 @@ func (w *Welcomer) groupWelcomeUser(update *tgbotapi.Update, newUser *tgbotapi.U message += "Алгоритм, как зарегистрироваться:\n\n1) Нажимаешь кнопку ниже, и выбираешь @PokememBroBot как цель для сообщения\n2) В ответ получаешь длинное сообщение-статистику.\n3) Полученное сообщение форвардишь в @i2\\_bot (не забудь заранее нажать там /start!)\n4) Готово, вы восхитительны." + message += "\n\nПравила чатов лиги Инстинкт:/rules. Незнание правил — отягчающее обстоятельство." + msg := tgbotapi.NewMessage(update.Message.Chat.ID, message) msg.ParseMode = "Markdown" keyboard := tgbotapi.InlineKeyboardMarkup{}