- RSS für Kanäle! Fix #6
- ID kennzeichnet Chat-Admins und -Gründer - table.contains() in utilites.lua verschoben - Mehr Bindings: getChatInfo, getChatAdministrators
This commit is contained in:
		@@ -95,6 +95,17 @@ function id:action(msg)
 | 
			
		||||
      local user_info = id:get_user(user_id, chat_id)
 | 
			
		||||
      table.insert(users_info, user_info)
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
	-- get all administrators and the creator
 | 
			
		||||
	local administrators = utilities.get_chat_administrators(self, chat_id)
 | 
			
		||||
	local admins = {}
 | 
			
		||||
	for num in pairs(administrators.result) do
 | 
			
		||||
	  if administrators.result[num].status ~= 'creator' then
 | 
			
		||||
	    table.insert(admins, tostring(administrators.result[num].user.id))
 | 
			
		||||
	  else
 | 
			
		||||
	    creator_id = administrators.result[num].user.id
 | 
			
		||||
	  end
 | 
			
		||||
    end
 | 
			
		||||
	local result = id:get_member_count(self, msg, chat_id)
 | 
			
		||||
	local member_count = result.result - 1 -- minus the bot
 | 
			
		||||
	if member_count == 1 then
 | 
			
		||||
@@ -104,8 +115,13 @@ function id:action(msg)
 | 
			
		||||
	end
 | 
			
		||||
    local text = 'IDs für *'..chat_name..'* `['..chat_id..']`\nHier '..member_count..':*\n---------\n'
 | 
			
		||||
    for k,user in pairs(users_info) do
 | 
			
		||||
      text = text..'*'..user.name..'* `['..user.id..']`\n'
 | 
			
		||||
	  text = string.gsub(text, "%_", " ")
 | 
			
		||||
	  if table.contains(admins, tostring(user.id)) then
 | 
			
		||||
	    text = text..'*'..user.name..'* `['..user.id..']` _Administrator_\n'
 | 
			
		||||
	  elseif tostring(creator_id) == user.id then
 | 
			
		||||
	    text = text..'*'..user.name..'* `['..user.id..']` _Gruppenersteller_\n'
 | 
			
		||||
	  else
 | 
			
		||||
        text = text..'*'..user.name..'* `['..user.id..']`\n'
 | 
			
		||||
	  end
 | 
			
		||||
    end
 | 
			
		||||
	utilities.send_reply(self, msg, text, true)
 | 
			
		||||
  end
 | 
			
		||||
 
 | 
			
		||||
@@ -3,6 +3,7 @@ local rss = {}
 | 
			
		||||
local http = require('socket.http')
 | 
			
		||||
local https = require('ssl.https')
 | 
			
		||||
local url = require('socket.url')
 | 
			
		||||
local bindings = require('otouto.bindings')
 | 
			
		||||
local utilities = require('otouto.utilities')
 | 
			
		||||
local redis = (loadfile "./otouto/redis.lua")()
 | 
			
		||||
local feedparser = require("feedparser")
 | 
			
		||||
@@ -10,12 +11,22 @@ local feedparser = require("feedparser")
 | 
			
		||||
rss.command = 'rss <sub/del>'
 | 
			
		||||
 | 
			
		||||
function rss:init(config)
 | 
			
		||||
	rss.triggers = utilities.triggers(self.info.username, config.cmd_pat):t('rss', true).table
 | 
			
		||||
	rss.triggers = {
 | 
			
		||||
	  "^/(rss) @(.*)$",
 | 
			
		||||
      "^/rss$",
 | 
			
		||||
      "^/rss (sub) (https?://[%w-_%.%?%.:/%+=&%~]+) @(.*)$",
 | 
			
		||||
      "^/rss (sub) (https?://[%w-_%.%?%.:/%+=&%~]+)$",
 | 
			
		||||
      "^/rss (del) (%d+) @(.*)$",
 | 
			
		||||
      "^/rss (del) (%d+)$",
 | 
			
		||||
	  "^/rss (del)",
 | 
			
		||||
      "^/rss (sync)$"	
 | 
			
		||||
	}
 | 
			
		||||
	rss.doc = [[*
 | 
			
		||||
]]..config.cmd_pat..[[rss*: Feed-Abonnements anzeigen
 | 
			
		||||
*]]..config.cmd_pat..[[rss* _sub_ _<URL>_: Diesen Feed abonnieren
 | 
			
		||||
*]]..config.cmd_pat..[[rss* _del_ _<#>_: Diesen Feed deabonnieren
 | 
			
		||||
*]]..config.cmd_pat..[[rss* _sync_: Feeds syncen (nur Superuser)]]
 | 
			
		||||
]]..config.cmd_pat..[[rss* _@[Kanalname]_: Feed-Abonnements anzeigen
 | 
			
		||||
*]]..config.cmd_pat..[[rss* _sub_ _<URL>_ _@[Kanalname]_: Diesen Feed abonnieren
 | 
			
		||||
*]]..config.cmd_pat..[[rss* _del_ _<#>_ _@[Kanalname]_: Diesen Feed deabonnieren
 | 
			
		||||
*]]..config.cmd_pat..[[rss* _sync_: Feeds syncen (nur Superuser)
 | 
			
		||||
Der Kanalname ist optional]]
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function tail(n, k)
 | 
			
		||||
@@ -208,60 +219,91 @@ function rss:print_subs(id, chat_name)
 | 
			
		||||
   return text, keyboard
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function rss:action(msg, config)
 | 
			
		||||
  local input = utilities.input(msg.text)
 | 
			
		||||
function rss:action(msg, config, matches)
 | 
			
		||||
  local id = "user#id" .. msg.from.id
 | 
			
		||||
  if msg.chat.type == 'channel' then
 | 
			
		||||
    print('Kanäle werden momentan nicht unterstützt')
 | 
			
		||||
  end
 | 
			
		||||
  if msg.chat.type == 'group' or msg.chat.type == 'supergroup' then
 | 
			
		||||
    id = 'chat#id'..msg.chat.id
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  if not input then
 | 
			
		||||
	if msg.chat.type == 'group' or msg.chat.type == 'supergroup' then
 | 
			
		||||
      chat_name = msg.chat.title
 | 
			
		||||
	else
 | 
			
		||||
	  chat_name = msg.chat.first_name
 | 
			
		||||
  -- For channels
 | 
			
		||||
  if matches[1] == 'sub' and matches[2] and matches[3] then
 | 
			
		||||
    if msg.from.id ~= config.admin then
 | 
			
		||||
      utilities.send_reply(self, msg, config.errors.sudo)
 | 
			
		||||
	  return
 | 
			
		||||
    end
 | 
			
		||||
	local id = '@'..matches[3]
 | 
			
		||||
	local result = utilities.get_chat_info(self, id)
 | 
			
		||||
	if not result then
 | 
			
		||||
	  utilities.send_reply(self, msg, 'Diesen Kanal gibt es nicht!')
 | 
			
		||||
	  return
 | 
			
		||||
	end
 | 
			
		||||
	local output = rss:subscribe(id, matches[2])
 | 
			
		||||
	utilities.send_reply(self, msg, output, true)
 | 
			
		||||
	return
 | 
			
		||||
  elseif matches[1] == 'del' and matches[2] and matches[3] then
 | 
			
		||||
    if msg.from.id ~= config.admin then
 | 
			
		||||
      utilities.send_reply(self, msg, config.errors.sudo)
 | 
			
		||||
	  return
 | 
			
		||||
    end
 | 
			
		||||
	local id = '@'..matches[3]
 | 
			
		||||
	local result = utilities.get_chat_info(self, id)
 | 
			
		||||
	if not result then
 | 
			
		||||
	  utilities.send_reply(self, msg, 'Diesen Kanal gibt es nicht!')
 | 
			
		||||
	  return
 | 
			
		||||
	end
 | 
			
		||||
	local output = rss:unsubscribe(id, matches[2])
 | 
			
		||||
	utilities.send_reply(self, msg, output, true)
 | 
			
		||||
	return
 | 
			
		||||
  elseif matches[1] == 'rss' and matches[2] then
 | 
			
		||||
    local id = '@'..matches[2]
 | 
			
		||||
	local result = utilities.get_chat_info(self, id)
 | 
			
		||||
	if not result then
 | 
			
		||||
	  utilities.send_reply(self, msg, 'Diesen Kanal gibt es nicht!')
 | 
			
		||||
	  return
 | 
			
		||||
	end
 | 
			
		||||
	local chat_name = result.result.title
 | 
			
		||||
    local output = rss:print_subs(id, chat_name)
 | 
			
		||||
	utilities.send_reply(self, msg, output, true)
 | 
			
		||||
	return
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  if input:match('(sub) (https?://[%w-_%.%?%.:/%+=&%~]+)$') then
 | 
			
		||||
  if msg.chat.type == 'group' or msg.chat.type == 'supergroup' then
 | 
			
		||||
	chat_name = msg.chat.title
 | 
			
		||||
  else
 | 
			
		||||
	chat_name = msg.chat.first_name
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  if matches[1] == 'sub' and matches[2] then
 | 
			
		||||
    if msg.from.id ~= config.admin then
 | 
			
		||||
      utilities.send_reply(self, msg, config.errors.sudo)
 | 
			
		||||
	  return
 | 
			
		||||
    end
 | 
			
		||||
	local rss_url = input:match('(https?://[%w-_%.%?%.:/%+=&%~]+)$')
 | 
			
		||||
	local output = rss:subscribe(id, rss_url)
 | 
			
		||||
	local output = rss:subscribe(id, matches[2])
 | 
			
		||||
	utilities.send_reply(self, msg, output, true)
 | 
			
		||||
  elseif input:match('(del) (%d+)$') then
 | 
			
		||||
	return
 | 
			
		||||
  elseif matches[1] == 'del' and matches[2] then
 | 
			
		||||
    if msg.from.id ~= config.admin then
 | 
			
		||||
      utilities.send_reply(self, msg, config.errors.sudo)
 | 
			
		||||
	  return
 | 
			
		||||
    end
 | 
			
		||||
	local rss_url = input:match('(%d+)$')
 | 
			
		||||
	local output = rss:unsubscribe(id, rss_url)
 | 
			
		||||
	local output = rss:unsubscribe(id, matches[2])
 | 
			
		||||
	utilities.send_reply(self, msg, output, true, '{"hide_keyboard":true}')
 | 
			
		||||
  elseif input:match('(del)$') then
 | 
			
		||||
	if msg.chat.type == 'group' or msg.chat.type == 'supergroup' then
 | 
			
		||||
      chat_name = msg.chat.title
 | 
			
		||||
	else
 | 
			
		||||
	  chat_name = msg.chat.first_name
 | 
			
		||||
	end
 | 
			
		||||
	return
 | 
			
		||||
  elseif matches[1] == 'del' and not matches[2] then
 | 
			
		||||
    local list_subs, keyboard = rss:print_subs(id, chat_name)
 | 
			
		||||
	utilities.send_reply(self, msg, list_subs, true, keyboard)
 | 
			
		||||
    return
 | 
			
		||||
  elseif input:match('(sync)$') then
 | 
			
		||||
  elseif matches[1] == 'sync' then
 | 
			
		||||
    if msg.from.id ~= config.admin then
 | 
			
		||||
      utilities.send_reply(self, msg, config.errors.sudo)
 | 
			
		||||
	  return
 | 
			
		||||
    end
 | 
			
		||||
	rss:cron(self)
 | 
			
		||||
	return
 | 
			
		||||
  end
 | 
			
		||||
  
 | 
			
		||||
  local output = rss:print_subs(id, chat_name)
 | 
			
		||||
  utilities.send_reply(self, msg, output, true)
 | 
			
		||||
  return
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -24,15 +24,6 @@ local apikey = cred_data.google_apikey
 | 
			
		||||
 | 
			
		||||
local BASE_URL = 'https://www.googleapis.com/youtube/v3'
 | 
			
		||||
 | 
			
		||||
function table.contains(table, element)
 | 
			
		||||
  for _, value in pairs(table) do
 | 
			
		||||
    if value == element then
 | 
			
		||||
      return true
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
  return false
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
local makeOurDate = function(dateString)
 | 
			
		||||
  local pattern = "(%d+)%-(%d+)%-(%d+)T"
 | 
			
		||||
  local year, month, day = dateString:match(pattern)
 | 
			
		||||
 
 | 
			
		||||
@@ -175,6 +175,20 @@ function utilities:answer_callback_query(callback, text, show_alert)
 | 
			
		||||
	} )
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- https://core.telegram.org/bots/api#getchat
 | 
			
		||||
function utilities:get_chat_info(chat_id)
 | 
			
		||||
  return bindings.request(self, 'getChat', {
 | 
			
		||||
		chat_id = chat_id
 | 
			
		||||
	} )
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
-- https://core.telegram.org/bots/api#getchatadministrators
 | 
			
		||||
function utilities:get_chat_administrators(chat_id)
 | 
			
		||||
  return bindings.request(self, 'getChatAdministrators', {
 | 
			
		||||
		chat_id = chat_id
 | 
			
		||||
	} )
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
 -- get the indexed word in a string
 | 
			
		||||
function utilities.get_word(s, i)
 | 
			
		||||
	s = s or ''
 | 
			
		||||
@@ -865,4 +879,13 @@ function url_encode(str)
 | 
			
		||||
  return str
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
function table.contains(table, element)
 | 
			
		||||
  for _, value in pairs(table) do
 | 
			
		||||
    if value == element then
 | 
			
		||||
      return true
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
  return false
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
return utilities
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user