Advertisement
Guest User

Untitled

a guest
Sep 20th, 2017
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.61 KB | None | 0 0
  1. local acc, name, data = ...
  2.  
  3. local list_topic_id = 13152151
  4.  
  5. local function get_list_from_top()
  6.     local t = acc.discussion().get_topic(list_topic_id)
  7.     if not t then return end
  8.  
  9.     local list, index = {}, {}
  10.     for c in acc.discussion().comments(t) do
  11.         if not c.deleted and type(c.removed) ~= "number" then
  12.             local id = c.user.id
  13.             if id and not index[id] then
  14.                 table.insert(list, id)
  15.                 index[id] = true
  16.             end
  17.         end
  18.     end
  19.     return list
  20. end
  21.  
  22. local function vocabulary_size(usr)
  23.     local hres = acc.http_get_data("/vocabularies/size", { user_id = usr.id() })
  24.     if not hres.error then
  25.         local v_list = hres.data.vocab_size and hres.data.vocab_size.languages or {}
  26.         local lgstr  = usr.get("learning_language_string")
  27.         for i = 1, #v_list do
  28.             local vl = v_list[i]
  29.             if vl.language_string == lgstr then
  30.                 return type(vl.count) == "number" and vl.count or nil
  31.             end
  32.         end
  33.     end
  34. end
  35.  
  36. if not data then
  37.     acc.output().printf("Getting the list from post %d...", list_topic_id)
  38.     local list = get_list_from_top()
  39.     if not list then
  40.         acc.output().print("Error!")
  41.         return {}
  42.     end
  43.     data = {}
  44.     data.ulist = list
  45.     data.pos   = 1
  46.     data.keep  = true
  47.     data.vlist = {}
  48.     data.users = 0
  49. end
  50.  
  51. local size = #data.ulist
  52. while data.pos <= size do
  53.     local usr = acc.user(data.ulist[data.pos])
  54.     if usr then
  55.         local from, to = usr.get("fromLanguage"), usr.get("learningLanguage")
  56.         acc.output().printf("[%3d/%3d] %-20s | %s -> %s", data.pos, size, usr.get("username"), from, to)
  57.         if from == "en" then -- from English only
  58.             -- Getting vocab data
  59.             local uvocab = vocabulary_size(usr)
  60.             if not uvocab then acc.output().print("Failed to get vocabulary size") end
  61.             --
  62.             local v = data.vlist[to]
  63.             if not v then
  64.                 data.vlist[to] = { count = uvocab, language_string = usr.get("learning_language_string") }
  65.             elseif v.count < uvocab then
  66.                 v.count = uvocab
  67.             end
  68.             data.users = data.users + 1
  69.         end
  70.     end
  71.     data.pos = data.pos + 1
  72.     if (data.pos - 1) % 100 == 0 then
  73.         break
  74.     end
  75. end
  76.  
  77. if data.pos <= size then
  78.     acc.output().print("Went to bed")
  79.     data.timeout = 2 * 60
  80.     return data
  81. end
  82.  
  83. local print_list = {}
  84. for lg, d in pairs(data.vlist) do
  85.     table.insert(print_list, { lang = lg, language_string = d.language_string, count = d.count })
  86. end
  87. table.sort(print_list, function(a, b) return a.count > b.count end)
  88.  
  89. acc.output().print("--------------------")
  90. for i = 1, #print_list do
  91.     local v = print_list[i]
  92.     acc.output().printf("%s(%s): %d", v.language_string, v.lang, v.count)
  93. end
  94. acc.output().printf("The list size: %d", #print_list)
  95. acc.output().printf("Number of users: %d", data.users)
  96.  
  97. return {}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement