From b6a30dd9d333f4ad2084e3310bf95e9e804d6aef Mon Sep 17 00:00:00 2001 From: Andreas Bielawski Date: Mon, 15 Aug 2016 22:03:14 +0200 Subject: [PATCH] =?UTF-8?q?Plugin=20zum=20Migrieren=20von=20Gruppen=20zu?= =?UTF-8?q?=20Supergruppen=20Dieses=20Plugin=20migriert=20alle=20chatbezog?= =?UTF-8?q?enen=20Daten=20in=20Redis.=20Dazu=20z=C3=A4hlen:=20der=20Nachri?= =?UTF-8?q?chtenz=C3=A4hler,=20RSS,=20Tagesschau-Eilmeldungen,=20abonniert?= =?UTF-8?q?e=20GitHub-Repos,=20Blocks,=20Bans,=20deaktivierte=20Plugins,?= =?UTF-8?q?=20Zitate,=20Variablen,=20etc.=20Es=20wird=20jedes=20Mal=20aufg?= =?UTF-8?q?erufen,=20wenn=20es=20eine=20Service-Nachricht=20mit=20"migrate?= =?UTF-8?q?=5Fto=5Fchat=5Fid"=20empf=C3=A4ngt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../plugins/service_migrate_to_supergroup.lua | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 otouto/plugins/service_migrate_to_supergroup.lua diff --git a/otouto/plugins/service_migrate_to_supergroup.lua b/otouto/plugins/service_migrate_to_supergroup.lua new file mode 100644 index 0000000..3fe4172 --- /dev/null +++ b/otouto/plugins/service_migrate_to_supergroup.lua @@ -0,0 +1,66 @@ +local migrate = {} + +migrate.triggers = { + '^//tgservice migrate_to_chat_id$' +} + +function migrate:action(msg, config, matches) + if not is_service_msg(msg) then return end -- Bad attempt at trolling! + + local old_id = msg.chat.id + local new_id = msg.migrate_to_chat_id + print('Migrating every data from '..old_id..' to '..new_id..'...') + print('--- SUPERGROUP MIGRATION STARTED ---') + + local keys = redis:keys('*'..old_id..'*') + for k,v in pairs(keys) do + local string_before_id = string.match(v, '(.+)'..old_id..'.+') or string.match(v, '(.+)'..old_id) + local string_after_id = string.match(v, '.+'..old_id..'(.+)') or '' + print(string_before_id..old_id..string_after_id..' -> '..string_before_id..new_id..string_after_id) + redis:rename(string_before_id..old_id..string_after_id, string_before_id..new_id..string_after_id) + end + + -- Migrate GH feed + local keys = redis:keys('github:*:subs') + if keys then + for k,v in pairs(keys) do + local repo = string.match(v, "github:(.+):subs") + local is_in_set = redis:sismember('github:'..repo..':subs', old_id) + if is_in_set then + print('github:'..repo..':subs - Changing ID in set...') + redis:srem('github:'..repo..':subs', old_id) + redis:sadd('github:'..repo..':subs', new_id) + end + end + end + + -- Migrate RSS feed + local keys = redis:keys('rss:*:subs') + if keys then + for k,v in pairs(keys) do + local feed = string.match(v, "rss:(.+):subs") + local is_in_set = redis:sismember('rss:'..feed..':subs', 'chat#id'..old_id) + if is_in_set then + print('rss:'..feed..':subs - Changing ID in set...') + redis:srem('rss:'..feed..':subs', 'chat#id'..old_id) + redis:sadd('rss:'..feed..':subs', 'chat#id'..new_id) + end + end + end + + -- Migrate Tagesschau-Eilmeldungen + local does_tagesschau_set_exists = redis:exists('telegram:tagesschau:subs') + if does_tagesschau_set_exists then + local is_in_set = redis:sismember('telegram:tagesschau:subs', 'chat#id'..old_id) + if is_in_set then + print('telegram:tagesschau:subs - Changing ID in set...') + redis:srem('telegram:tagesschau:subs', 'chat#id'..old_id) + redis:sadd('telegram:tagesschau:subs', 'chat#id'..new_id) + end + end + + print('--- SUPERGROUP MIGRATION ENDED ---') + utilities.send_message(self, new_id, 'Die User-ID dieser Gruppe ist nun '..new_id..'.\nAlle Daten wurden übertragen.') +end + +return migrate \ No newline at end of file