<commit_before>include base
import httpclient, strutils, times, math, unicode

const
  DefaultCity = "Москва"
  Key = "78b50ffaf45be011ccc5fccca4d836d8"
  BaseURL = "http://api.openweathermap.org/data/2.5/"
  ResultFormat = """$1:
$2
Температура: $3 °C
Влажность: $4%
Облачность: $5%
Скорость ветра: $6 м/с
"""

proc sortData(x, y: (string, int)): int = 
  return len(y[0]) - len(x[0])

var textToDays = {"завтра": 1, "послезавтра": 2, "через день": 2, 
                "через 1 день": 2, "через 2 дня": 3, "через 3 дня": 4, 
                "через 4 дня": 5,  "через 5 дней": 6, "через 6 дней": 7, 
                "через неделю": 8}.toOrderedTable

textToDays.sort(sortData)
  
module "&#127782;", "Погода":
  command "погода":
    usage = "погода <город> <время> - узнать погоду, например `погода в Москве через неделю`"
    let client = newAsyncHttpClient()
    var 
      city = DefaultCity
      days = 1
      url: string
    let args = msg.cmd.args
    if args.len > 0:
      var args = args.join(" ")

      for key, val in textToDays.pairs:
        if key in args:
          args = args.replace(key, "")
          days = val
      let possibleCity = args.replace(" в ", "").replace(" в", "").replace("в ", "")
      if possibleCity != "":
        city = unicode.toLower(possibleCity)
    echo city
    url = BaseURL & "forecast/daily?APPID=$1&lang=ru&q=$2&cnt=$3" % [Key, city, $(days)]
    let resp = await client.get(url)
    if resp.code != HttpCode(200):
      await api.answer(msg, "Информацию по заданному городу получить не удалось :(")
      return
    let data = parseJson(await resp.body)
    echo data
    let
      # День - последний элемент из массива<commit_msg>Забыл убрать отладочные выводы, небольшой рефакторинг<commit_after>include base
import httpclient, strutils, times, math, unicode

const
  DefaultCity = "Москва"
  Key = "78b50ffaf45be011ccc5fccca4d836d8"
  BaseURL = "http://api.openweathermap.org/data/2.5/"
  ResultFormat = """$1:
$2
Температура: $3 °C
Влажность: $4%
Облачность: $5%
Скорость ветра: $6 м/с
"""

proc sortData(x, y: (string, int)): int = 
  return len(y[0]) - len(x[0])

var textToDays = {"завтра": 1, "послезавтра": 2, "через день": 2, 
                "через 1 день": 2, "через 2 дня": 3, "через 3 дня": 4, 
                "через 4 дня": 5,  "через 5 дней": 6, "через 6 дней": 7, 
                "через неделю": 8}.toOrderedTable

textToDays.sort(sortData)
  
module "&#127782;", "Погода":
  command "погода":
    usage = "погода <город> <время> - узнать погоду, например `погода в Москве через неделю`"
    let 
      client = newAsyncHttpClient()
      args = msg.cmd.args
    var 
      city = DefaultCity
      days = 1
      url: string
    if args.len > 0:
      var args = args.join(" ")

      for key, val in textToDays.pairs:
        if key in args:
          args = args.replace(key, "")
          days = val
      let possibleCity = args.replace(" в ", "").replace(" в", "").replace("в ", "")
      if possibleCity != "":
        city = unicode.toLower(possibleCity)
      
    url = BaseURL & "forecast/daily?APPID=$1&lang=ru&q=$2&cnt=$3" % [Key, city, $(days)]
    let resp = await client.get(url)
    # Если сервер не нашёл этот город
    if resp.code != HttpCode(200):
      await api.answer(msg, "Информацию по заданному городу получить не удалось :(")
      return
    let
      # Парсим ответ сервера
      data = parseJson(await resp.body)
      # День - последний элемент из массива
{'fraction_non_alphanumeric': 0.14302224790522972, 'fraction_numerical': 0.03178272175671771, 'mean_word_length': 2.686900958466454, 'pattern_counts': {'":': 26, '<': 7, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4788438', 'n_tokens_mistral': 1398, 'n_tokens_neox': 1410, 'n_words': 351}