コード例 #1
0
 /// <summary>
 /// Сохраняет входящие и исходящие сообщения в базу данных
 /// </summary>
 /// <param name="message">Сообщение</param>
 /// <param name="direct">Направление</param>
 private void SaveMessageToDB(TelegramMessage message, string direct)
 {
     if (sqlConnection != null)
     {
         SQLiteCommand cmd = sqlConnection.CreateCommand();
         cmd.CommandText = "INSERT INTO messages (direct, message_id, parent_id, user_id, chat_id, username, first_name, last_name, text, date) "
                           + "VALUES (@direct, @message_id, @parent_id, @user_id, @chat_id, @username, @first_name, @last_name, @text, @date);";
         cmd.Parameters.AddWithValue("@direct", direct);
         cmd.Parameters.AddWithValue("@message_id", message.message_id);
         cmd.Parameters.AddWithValue("@parent_id", (message.reply_to_message != null) ? message.reply_to_message.message_id : 0);
         cmd.Parameters.AddWithValue("@user_id", message.from.id);
         cmd.Parameters.AddWithValue("@chat_id", message.chat.id);
         cmd.Parameters.AddWithValue("@username", message.from.username);
         cmd.Parameters.AddWithValue("@first_name", message.from.first_name);
         cmd.Parameters.AddWithValue("@last_name", message.from.last_name);
         cmd.Parameters.AddWithValue("@text", (message.text != null) ? message.text : "");
         cmd.Parameters.AddWithValue("@date", message.date);
         try {
             Logger.Debug(tmSettings, "sql start insert", false, mutLogger);
             cmd.ExecuteNonQuery();
             Logger.Debug(tmSettings, "sql insert ok", false, mutLogger);
         }
         catch (SQLiteException ex) {
             Logger.Debug(tmSettings, "sql ins error: " + ex.Message.ToString(), true, mutLogger);
         }
     }
 }
コード例 #2
0
        /// <summary>
        /// Возвращает текст команды
        /// </summary>
        /// <param name="message">Сообщение, для которого надо получить вышестоящую команду</param>
        private string GetTextOfRootCommand(TelegramMessage message)
        {
            string        commandText   = "";
            List <string> commandParams = new List <string>();

            commandParams.Add(message.text);

            MessageTDB msg       = null;
            Int64      parent_id = message.reply_to_message.message_id;

            while (parent_id > 0)
            {
                msg = GetMessageFromDB(parent_id, message.from.id, message.chat.id);
                if (msg == null)
                {
                    parent_id = 0;
                }
                else if (msg.ParentID > 0)
                {
                    parent_id = msg.ParentID;
                    if (msg.Direct == "in")
                    {
                        commandParams.Add(msg.Text);
                    }
                }
                else
                {
                    parent_id   = 0;
                    commandText = msg.Text;
                }
            }

            string param = "";
            int    i     = commandParams.Count - 1;

            while (0 <= i)
            {
                param += commandParams[i];
                if (0 < i)
                {
                    param += ",";
                }
                i--;
            }


            if (!String.IsNullOrEmpty(param))
            {
                commandText += " " + param;
            }

            return(commandText);
        }
コード例 #3
0
        /// <summary>
        /// Разбирает полученное сообщение и определяет, что с ним делать
        /// <PARAM name="message">Сообщение TelegramMessage</PARAM>
        /// </summary>
        private void listener_CheckMessage(TelegramMessage message)
        {
            SaveMessageToDB(message, "in");

            if (message.text == null)
            {
                SendMessage(message.chat.id, "Неизвестная команда");
            }
            else
            {
                string username = message.from.username;
                string text     = "";
                string param    = "";

                if (message.reply_to_message != null)
                {
                    // Это ответ на начальное сообщение, значит команда содержится в предыдущем, а в текущем идут параметры
                    text = GetTextOfRootCommand(message);
                }
                else
                {
                    text = message.ToString();
                }

                text  = text.ToLower();
                param = extractParamForCommand(text, out text);

                // Фильтрация пользователей
                if (tmSettings.AllowableUser(username))
                {
                    if (text == "/start" || text == "/help" || text == "/settings")
                    {
                        // Запрошен список команд
                        SendMessage(message.chat.id, tmSettings.GetCommands(username), tmSettings.GetKeyboardCommands(username));
                    }
                    else if (text == "/screen")
                    {
                        // Запрошен скриншот всей области экрана
                        if (tmSettings.AllowToGetScreenshot(username))
                        {
                            string fileName = getScreenShot();
                            SendPhoto(message.chat.id, fileName);
                            File.Delete(fileName);
                        }
                        else
                        {
                            SendMessage(message.chat.id, "У вас нет доступа к данной команде");
                        }
                    }
                    else
                    {
                        object cmd = tmSettings.GetCommandByName(text);
                        if (cmd != null)
                        {
                            // Запрошена команда из списка
                            if (!messageOrder.ContainsKey(message.message_id))
                            {
                                Command cur_command = (Command)cmd;
                                if (tmSettings.AllowableUserForCommand(username, cur_command))
                                {
                                    TelegramCommand tCommand = new TelegramCommand();
                                    tCommand.Message    = message;
                                    tCommand.Command    = cur_command;
                                    tCommand.Parameters = param;
                                    messageOrder.Add(message.message_id, tCommand);
                                    BackgroundWorker executer = new BackgroundWorker();
                                    executer.WorkerSupportsCancellation = true;
                                    executer.DoWork += new DoWorkEventHandler(ExecuteCommand);
                                    executer.RunWorkerAsync(tCommand);
                                }
                                else
                                {
                                    SendMessage(message.chat.id, "У вас нет доступа к данной команде");
                                }
                            }
                        }
                        else
                        {
                            // unknow command
                            SendMessage(message.chat.id, "Неизвестная команда");
                        }
                    }
                }
                else
                {
                    SendMessage(message.chat.id, "У вас нет доступа к данному боту");
                }
            }
        }