Page MenuHomePhabricator (Chris)

No OneTemporary

Size
584 KB
Referenced Files
None
Subscribers
None
This file is larger than 256 KB, so syntax highlighting was skipped.
diff --git a/configuration.example.lua b/configuration.example.lua
index 9acc2ce..c13a1c8 100644
--- a/configuration.example.lua
+++ b/configuration.example.lua
@@ -1,399 +1,399 @@
--[[
_ _ _
_ __ ___ __ _| |_| |_ __ _| |_ __ _
| '_ ` _ \ / _` | __| __/ _` | __/ _` |
| | | | | | (_| | |_| || (_| | || (_| |
|_| |_| |_|\__,_|\__|\__\__,_|\__\__,_|
Configuration file for mattata v1.5
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
Each value in an array should be comma separated, with the exception of the last value!
Make sure you always update your configuration file after pulling changes from GitHub!
]]
local configuration = { -- Rename this file to configuration.lua for the bot to work!
['bot_token'] = '', -- In order for the bot to actually work, you MUST insert the Telegram
-- bot API token you received from @BotFather.
['connected_message'] = 'Connected to the Telegram bot API!', -- The message to print when the bot is connected to the Telegram bot API
['version'] = '1.5', -- the version of mattata, don't change this!
-- The following two tokens will require you to have setup payments with @BotFather, and
-- a Stripe account with @stripe!
['stripe_live_token'] = '', -- Payment token you receive from @BotFather.
['stripe_test_token'] = '', -- Test payment token you receive from @BotFather.
['admins'] = { -- Here you need to specify the numerical ID of the users who shall have
-- FULL control over the bot, this includes access to server files via the lua and shell plugins.
221714512
},
['allowlist_plugin_exceptions'] = { -- An array of plugins that will still be used for allowlisted users.
'antispam'
},
['beta_plugins'] = { -- An array of plugins that only the configured bot admins are able to use.
'array_of_beta_plugins'
},
- ['blocklist_plugin_exceptions'] = {}, -- An array of plugins that will still process blocklisted users.
['permanent_plugins'] = { -- An array of plugins that can't be disabled with /plugins.
'plugins',
'help',
'administration',
'about'
},
['updates'] = {
['timeout'] = 3, -- timeout in seconds for api.get_updates()
['limit'] = 100 -- message limit for api.get_updates() - must be between 1-100
},
['language'] = 'en', -- The two character locale to set your default language to.
['log_chat'] = nil, -- This needs to be the numerical identifier of the chat you wish to log
-- errors into. If it's not a private chat it should begin with a '-' symbol.
['log_admin_actions'] = true, -- Should administrative actions be logged? [true/false]
['log_channel'] = nil, -- This needs to be the numerical identifier of the channel you wish
-- to log administrative actions in by default. It should begin with a '-' symbol.
['bug_reports_chat'] = nil, -- This needs to be the numerical identifier of the chat you wish to send
-- bug reports into. If it's not a private chat it should begin with a '-' symbol.
['counter_channel'] = nil, -- This needs to be the numerical identifier of the channel you wish
-- to forward messages into, for use with the /counter command. It should begin with a '-' symbol.
-- The following directory values should NOT have a "/" at the end!
['bot_directory'] = '/path/to/bot',
['download_location'] = '/path/to/downloads', -- The location to save all downloaded media to.
['fonts_directory'] = '/path/to/fonts', -- The location where fonts are stored for CAPTCHAs
['debug'] = true, -- Turn this on to print EVEN MORE information to the terminal.
['redis'] = { -- Configurable options for connecting the bot to redis. Do NOT modify
-- these settings if you don't know what you're doing!
['host'] = '127.0.0.1',
['port'] = 6379,
['password'] = nil,
['db'] = 2
},
['keys'] = { -- API keys needed for the full functionality of several plugins.
['cats'] = '', -- http://thecatapi.com/api-key-registration.html
['translate'] = '', -- https://tech.yandex.com/keys/get/?service=trnsl
['lyrics'] = '', -- https://developer.musixmatch.com/admin/applications
['lastfm'] = '', -- http://www.last.fm/api/account/create
['weather'] = '', -- https://darksky.net/dev/register
['youtube'] = '', -- https://console.developers.google.com/apis
['maps'] = '', -- https://console.cloud.google.com/google/maps-apis
['location'] = '', -- https://opencagedata.com/api
['bing'] = '', -- https://datamarket.azure.com/account/keys
['flickr'] = '', -- https://www.flickr.com/services/apps/create/noncommercial/
['news'] = '', -- https://newsapi.org/
['twitch'] = '', -- https://twitchapps.com/tmi/
['pastebin'] = '', -- https://pastebin.com/api
['dictionary'] = { -- https://developer.oxforddictionaries.com/
['id'] = '',
['key'] = ''
},
['adfly'] = { -- https://ay.gy/publisher/tools#tools-api
['api_key'] = '',
['user_id'] = '',
['secret_key'] = ''
},
['pasteee'] = '', -- https://paste.ee/
['google'] = { -- https://console.developers.google.com/apis
['api_key'] = '',
['cse_key'] = ''
},
['steam'] = '', -- https://steamcommunity.com/dev/apikey
['spotify'] = { -- https://developer.spotify.com/my-applications/#!/applications/create
['client_id'] = '',
['client_secret'] = '',
['redirect_uri'] = 'https://t.me/mattatabot?start='
},
['twitter'] = { -- https://apps.twitter.com/app/new
['consumer_key'] = '',
['consumer_secret'] = ''
},
['imgur'] = { -- https://api.imgur.com/oauth2/addclient
['client_id'] = '',
['client_secret'] = ''
},
['spamwatch'] = '', -- https://t.me/SpamWatchSupport
['wolframalpha'] = '', -- https://developer.wolframalpha.com/portal/myapps/
['movies'] = {
['omdb'] = '', -- http://www.omdbapi.com/apikey.aspx
['poster'] = '' -- https://www.myapifilms.com/token.do
- }
+ },
+ ['transcribe'] = '' -- https://wit.ai/v2
},
['errors'] = { -- Messages to provide a more user-friendly approach to errors.
['connection'] = 'Connection error.',
['results'] = 'I couldn\'t find any results for that.',
['supergroup'] = 'This command can only be used in supergroups.',
['admin'] = 'You need to be a moderator or an administrator in this chat in order to use this command.',
['unknown'] = 'I don\'t recognise that user. If you would like to teach me who they are, forward a message from them to any chat that I\'m in.',
['generic'] = 'An unexpected error occured. Please report this error using /bugreport.'
},
['limits'] = {
['bing'] = {
['private'] = 15,
['public'] = 7
},
['stackoverflow'] = {
['private'] = 12,
['public'] = 8
},
['reddit'] = {
['private'] = 8,
['public'] = 4
},
['chatroulette'] = 512,
['copypasta'] = 300,
['drawtext'] = 1000,
['help'] = {
['per_page'] = 4
},
['nick'] = 128,
['plugins'] = {
['per_page'] = 18,
['columns'] = 2
}
},
['administration'] = { -- Values used in administrative plugins
['warnings'] = {
['maximum'] = 10,
['minimum'] = 2,
['default'] = 3
},
['captcha'] = {
['length'] = {
['min'] = 4,
['max'] = 10,
['default'] = 7
},
['size'] = {
['min'] = 20,
['max'] = 50,
['default'] = 40
},
['timeout'] = {
['min'] = 1,
['max'] = 60,
['default'] = 5
}
},
['allowed_links'] = {
'username',
'telegram',
'mattata',
'admin',
'admins'
},
['aliases'] = {
['length'] = {
['min'] = 1,
['max'] = 64
},
['total'] = 150
},
['store_chat_members'] = true,
['global_antispam'] = { -- normal antispam is processed in plugins/antispam.mattata
['ttl'] = 5, -- amount of seconds to process the messages in
['message_warning_amount'] = 10, -- amount of messages a user can send in the TTL until they're warned
['message_allowlist_amount'] = 25, -- amount of messages a user can send in the TTL until they're allowlisted
['allowlist_length'] = 86400, -- amount (in seconds) to allowlist the user for (set it to -1 if you want it forever)
['max_code_length'] = 64 -- maximum length of code or pre entities that are allowed with "remove pasted code" setting on
},
['default'] = {
['antispam'] = {
['text'] = 8,
['forwarded'] = 16,
['sticker'] = 4,
['photo'] = 4,
['video'] = 4,
['location'] = 4,
['voice'] = 4,
['game'] = 2,
['venue'] = 4,
['video_note'] = 4,
['invoice'] = 2,
['contact'] = 2,
['dice'] = 1,
['poll'] = 1
}
},
['feds'] = {
['group_limit'] = 3,
['shortened_feds'] = {
['name'] = 'uuid'
}
}
},
['join_messages'] = { -- Values used in plugins/administration.lua.
'Welcome, NAME!',
'Hello, NAME!',
'Enjoy your stay, NAME!',
'I\'m glad you joined, NAME!',
'Howdy, NAME!',
'Hi, NAME!'
},
['groups'] = {
['name'] = 't.me/username'
},
['sort_groups'] = true, -- Decides whether groups will be sorted by name in /groups.
['stickers'] = { -- Values used in mattata.lua, for administrative plugin functionality.
-- These are the file_id values for stickers which are binded to the relevant command.
['ban'] = {
'AgAD0AIAAlAYNw0',
'AgADzwIAAlAYNw0'
},
['warn'] = {
'AgAD0QIAAlAYNw0',
'AgAD0gIAAlAYNw0'
},
['kick'] = {
'AgAD0wIAAlAYNw0'
}
},
['slaps'] = {
'{THEM} was shot by {ME}.',
'{THEM} was pricked to death.',
'{THEM} walked into a cactus while trying to escape {ME}.',
'{THEM} drowned.',
'{THEM} drowned whilst trying to escape {ME}.',
'{THEM} blew up.',
'{THEM} was blown up by {ME}.',
'{THEM} hit the ground too hard.',
'{THEM} fell from a high place.',
'{THEM} fell off a ladder.',
'{THEM} fell into a patch of cacti.',
'{THEM} was doomed to fall by {ME}.',
'{THEM} was blown from a high place by {ME}.',
'{THEM} was squashed by a falling anvil.',
'{THEM} went up in flames.',
'{THEM} burned to death.',
'{THEM} was burnt to a crisp whilst fighting {ME}.',
'{THEM} walked into a fire whilst fighting {ME}.',
'{THEM} tried to swim in lava.',
'{THEM} tried to swim in lava whilst trying to escape {ME}.',
'{THEM} was struck by lightning.',
'{THEM} was slain by {ME}.',
'{THEM} got finished off by {ME}.',
'{THEM} was killed by magic.',
'{THEM} was killed by {ME} using magic.',
'{THEM} starved to death.',
'{THEM} suffocated in a wall.',
'{THEM} fell out of the world.',
'{THEM} was knocked into the void by {ME}.',
'{THEM} withered away.',
'{THEM} was pummeled by {ME}.',
'{THEM} was fragged by {ME}.',
'{THEM} was desynchronized.',
'{THEM} was wasted.',
'{THEM} was busted.',
'{THEM}\'s bones are scraped clean by the desolate wind.',
'{THEM} has died of dysentery.',
'{THEM} fainted.',
'{THEM} is out of usable Pokemon! {THEM} whited out!',
'{THEM} is out of usable Pokemon! {THEM} blacked out!',
'{THEM} whited out!',
'{THEM} blacked out!',
'{THEM} says goodbye to this cruel world.',
'{THEM} got rekt.',
'{THEM} was sawn in half by {ME}.',
'{THEM} died. I blame {ME}.',
'{THEM} was axe-murdered by {ME}.',
'{THEM}\'s melon was split by {ME}.',
'{THEM} was sliced and diced by {ME}.',
'{THEM} was split from crotch to sternum by {ME}.',
'{THEM}\'s death put another notch in {ME}\'s axe.',
'{THEM} died impossibly!',
'{THEM} died from {ME}\'s mysterious tropical disease.',
'{THEM} escaped infection by dying.',
'{THEM} played hot-potato with a grenade.',
'{THEM} was knifed by {ME}.',
'{THEM} fell on his sword.',
'{THEM} ate a grenade.',
'{THEM}\'s parents got shot by {ME}.',
'{THEM} practiced being {ME}\'s clay pigeon.',
'{THEM} is what\'s for dinner!',
'{THEM} was terminated by {ME}.',
'{THEM} was shot before being thrown out of a plane.',
'{THEM} was not invincible.',
'{THEM} has encountered an error.',
'{THEM} died and reincarnated as a goat.',
'{ME} threw {THEM} off a building.',
'{THEM} is sleeping with the fishes.',
'{THEM} got a premature burial.',
'{ME} replaced all of {THEM}\'s music with Nickelback.',
'{ME} spammed {THEM}\'s email.',
'{ME} cut {THEM}\'s genitals off with a rusty pair of scissors!',
'{ME} made {THEM} a knuckle sandwich.',
'{ME} slapped {THEM} with pure nothing.',
'{ME} hit {THEM} with a small, interstellar spaceship.',
'{THEM} was quickscoped by {ME}.',
'{ME} put {THEM} in check-mate.',
'{ME} RSA-encrypted {THEM} and deleted the private key.',
'{ME} put {THEM} in the friendzone.',
'{ME} molested {THEM} in a shed.',
'{ME} slaps {THEM} with a DMCA takedown request!',
'{THEM} became a corpse blanket for {ME}.',
'Death is when the monsters get you. Death comes for {THEM}.',
'Cowards die many times before their death. {THEM} never tasted death but once.',
'{THEM} died of hospital gangrene.',
'{THEM} got a house call from Doctor {ME}.',
'{ME} beheaded {THEM}.',
'{THEM} got stoned...by an angry mob.',
'{ME} sued the pants off {THEM}.',
'{THEM} was impeached.',
'{THEM} was beaten to a pulp by {ME}.',
'{THEM} was forced to have cheeky bum sex with {ME}!',
'{THEM} was one-hit KO\'d by {ME}.',
'{ME} sent {THEM} to /dev/null.',
'{ME} sent {THEM} down the memory hole.',
'{THEM} was a mistake.',
'{THEM} is a failed abortion.',
'{THEM}\'s birth certificate is just an apology letter from their local condom dispensary.',
'\'{THEM} was a mistake.\' - {ME}',
'{ME} checkmated {THEM} in two moves.',
'{THEM} was brutally raped by {ME}.'
}
}
local get_plugins = function(extension, directory)
extension = extension and tostring(extension) or 'lua'
if extension:match('^%.') then
extension = extension:match('^%.(.-)$')
end
directory = directory and tostring(directory) or 'plugins'
if directory:match('/$') then
directory = directory:match('^(.-)/$')
end
local plugins = {}
local list = io.popen('ls ' .. directory .. '/')
local all = list:read('*all')
list:close()
for plugin in all:gmatch('[%w_-]+%.' .. extension .. ' ?') do
plugin = plugin:match('^([%w_-]+)%.' .. extension .. ' ?$')
table.insert(plugins, plugin)
end
return plugins
end
local get_fonts = function()
local fonts = {}
local list = io.popen('ls fonts/')
local all = list:read('*all')
list:close()
for font in all:gmatch('%a+') do
table.insert(fonts, font)
end
return fonts
end
configuration.plugins = get_plugins()
configuration.administrative_plugins = get_plugins(nil, 'plugins/administration')
configuration.administration.captcha.files = get_fonts()
for _, v in pairs(configuration.administrative_plugins) do
table.insert(configuration.plugins, v)
end
return configuration
--[[
End of configuration, you're good to go.
Use `./launch.sh` to start the bot.
If you can't execute the script, try running `chmod +x launch.sh`
-]]
+]]
\ No newline at end of file
diff --git a/fonts.sh b/fonts.sh
new file mode 100644
index 0000000..06806ba
--- /dev/null
+++ b/fonts.sh
@@ -0,0 +1,4 @@
+#!/bin/sh
+for x in fonts/*.ttf; do
+ mkdir "${x%.*}" && mv "$x" "${x%.*}"
+done
diff --git a/languages/ar_ar.lua b/languages/ar_ar.lua
index 82d1358..64b8ef4 100644
--- a/languages/ar_ar.lua
+++ b/languages/ar_ar.lua
@@ -1,805 +1,806 @@
-- This is a language file for mattata
-- Language: ar_ar
-- Author: disk3
-- DO NOT CHANGE ANYTHING THAT BEGINS OR ENDS WITH A %
-- THESE ARE PLACEHOLDERS!
-- DO NOT CHANGE ANY MARKDOWN/HTML FORMATTING!
-- IF YOU ARE UNSURE, ASK ON TELEGRAM (t.me/mattataDev),
return {
['errors'] = {
['connection'] = 'خطا في الاتصال.',
['results'] = 'لا نتائج.',
['supergroup'] = 'هذا الامر فقط للمجموعات الكبيرة.',
['admin'] = 'يجب أن تكون مشرفاً أو منشئاً لإستخدام هذا الأمر',
['unknown'] = 'لا أعرف هذا الشخص. إذا أردت أن تعرفني علية، حول أيً من رسائلة إلى أي محادثة أنا فية',
['generic'] = 'حصلت مشكلة!',
['use'] = 'استخدام هذا غير مسموح!',
['private'] = 'يمكنك استعمال هذا الأمر في الخاص فقط'
},
['addcommand'] = {
['1'] = 'يرجى تحديد الأمر بالشكل <code> /command - المحتوى</code>',
['2'] = 'لم تعطني امر!',
['3'] = 'وصف الامر لا يمكن ان يكون اطول من 256 أحرف!',
['4'] = 'حدث خطأ لم يتم إضافة الأمر!',
['5'] = 'تم إضافة الأمر بنجاح!'
},
['addrule'] = {
['1'] = 'يرجى تحديد النص لقانون المجموعة!',
['2'] = 'ليس لديك أية قوانين حالية لكي تضيف له. يرجى إرسال /setrules لضبط القوانين!',
['3'] = 'لا يمكن إضافة القانون؛ النص طويل جدا أكثر من حد التليجرام 4096 احرف!',
['4'] = 'لا يمكن أضافة هذا القانون لأنه يحتوي على تحديدات خط غير مدعومة!',
['5'] = 'تم تحديث القانون بنجاح!'
},
['addslap'] = {
['1'] = 'يمكن استعماله فقط في المجموعات!',
['2'] = 'لا يمكن استعمال هذه الأقواس في أمر الصفعة بعيدا عن الثوابت!',
['3'] = 'الحد الأقصى الأحرف 256!',
['4'] = 'تم إضافة هذه الصفعة بنجاح!',
['5'] = 'يجب أن تضع هذه القوانين في الصفعة، {ME} يعني اسم الشخص الصافع، {THEM} اسم الشخص المصفوع'
},
['administration'] = {
['1'] = 'تفعيل الأدمنية',
['2'] = 'تعطيل الأدمنية',
['3'] = 'إعدادات تكرار الرسائل',
['4'] = 'إعدادات التحذير',
['5'] = 'الحظر بتصويت الأعضاء',
['6'] = 'ترحيب الأعضاء الجدد؟',
['7'] = 'ارسال القوانين عند الانضمام؟',
['8'] = 'ارسال القوانين في المجموعة؟',
['9'] = 'رجوع',
['10'] = 'التالي',
['11'] = 'فلترة الكلمة',
['12'] = 'مانع البوت',
['13'] = 'مانع الروابط',
['14'] = 'تسجيل الافعال؟',
['15'] = 'كتم العربية',
['16'] = 'عقوبة تكرار الرسائل',
['17'] = 'حظر',
['18'] = 'طرد',
['19'] = 'مسح الأوامر؟',
['20'] = 'رد الإنجليزي فقط؟',
['21'] = 'ارسال الاعدادات بالمجموعة؟',
['22'] = 'مسح الرد على الأوامر؟',
['23'] = 'طلب تحقق للمنضمين؟',
['24'] = 'تحقق inline للمنضمين؟',
['25'] = 'طرد المشبوهين تلقائياً؟',
['26'] = 'عدد التحذيرات لكي يتم %s:',
['27'] = 'عدد التصويتات المطلوبة:',
['28'] = 'عدد التصويتات الرفض للإلغاء:',
['29'] = 'تم مسح %s, من قاعدة البيانات',
['30'] = 'لا يوجد قيمة مطابقة لهذا "%s" في قاعدة البيانات!',
['31'] = 'لست مشرفاً في تلك المحادثة!',
['32'] = 'اقل عدد التصويتات للحظر بالتصويت هي %s.',
['33'] = 'أقصى عدد التصويتات للحظر بالتصويت هي %s.',
['34'] = 'اقل عدد رفض التصويت للحظر بالتصويت هي %s.',
['35'] = 'أقصى عدد رفض التصويت للحظر بالتصويت هي %s.',
['36'] = 'اقصى عدد التحذيرات هي %s.',
['37'] = 'أقل عدد التحذيرات هي %s.',
['38'] = 'يمكنك إضافة كلمات بالأمر الاتي /filter <الكلمة>',
['39'] = 'لن يتم اشعارك بأن الاضافة (الادمنية) معطلة, استعمل /administration لتفعيله.',
['40'] = 'ليست محادثة صالحة!',
['41'] = 'على ما يبدو أنك لست مشرفاً هناك!',
['42'] = 'خاصيتي (الادمنية) يمكن استعمالها في مجموعات/قنوات..اذا كنت تبحث عن المساعدة باستعمالها، اكتب /help ثم قسم "الادمنية",لو كنت تريد إدارة مجموعة لم الإشراف فيها أرسل /administration <اسم المحادثة>.',
['43'] = 'استعمل الأزرار السفلية لتضبيط اعدادات الإدارية في <b>%s</b>:',
['44'] = 'ارسل لي [رسالة خاصة](https://t.me/%s), لكي أرسل لك المعلومة.',
['45'] = 'ارسلت لك معلومتك في الخاص',
['46'] = 'ازالة تثبيتات القناة؟',
['47'] = 'ازالة باقي تثبيتات؟',
['48'] = 'مسح الكود الملصوق؟',
['49'] = 'منع بوتات inline؟',
['50'] = 'طرد مرسل الصور عند انضمام؟',
['51'] = 'اطفاء الاضافات للكل؟'
},
['afk'] = {
['1'] = 'عذرا, هذا الخاصية متاحة فقط للأشخاص، بإسم مستخدم @username!',
['2'] = 'رجع %s, بعد غياب %s!',
['3'] = 'ملاحظة',
['4'] = '%s مشغول الآن,%s'
},
['antispam'] = {
['1'] = 'تعطيل',
['2'] = 'تفعيل',
['3'] = 'تعطيل الحد',
['4'] = 'تفعيل الحد في %s',
['5'] = 'جميع إعدادات الادمنية',
['6'] = ' طردت %s [%s] %s [%s] من %s [%s] لتجاوز حد التكرار [%s] للوسائط.',
['7'] = 'طردت %s لتجاوز حد التكرار [%s] للوسائط.',
['8'] = 'الحد الأقصى هي 100.',
['9'] = 'الحد الأدنى هي 1.',
['10'] = 'ضبط حد التكرار ل %s ادناه:',
['11'] = 'مرحبا %s, إذا ترسل كود أطول من %s حرف, استعمل /paste في <a href="https://t.me/%s"> محادثة خاصة معي</a>!',
['12'] = '%s <code>[%s]</code> لديه %s %s <code>[%s]</code> من %s <code>[%s]</code> لإرسال روابط الدعوة.\n#chat%s #المستخدم%s',
['13'] = '%s %s لإرسال روابط دعوة.',
['14'] = 'مرحبا, لاحظت أنك مفعل مانع روابط، ولا تسمح المستخدمين بنشر روابط حتى الذي استعملته ,إذا أردت أن تسمح رابطك استعمل /whitelistlink <رابط>.',
['15'] = 'طردت %s <code>[%s]</code> من %s <code>[%s]</code> لارسال صورة عند أول دخول.\n#محادثة%s #مستخدم%s',
['16'] = 'Kicked %s <code>[%s]</code> from %s <code>[%s]</code> for sending a URL within their first few messages.\n#chat%s #user%s',
['17'] = 'Action',
['18'] = 'Kick',
['19'] = 'Ban',
['20'] = 'Mute'
},
['appstore'] = {
['1'] = 'عرض في ايتونز',
['2'] = 'التقييم',
['3'] = 'التقييمات'
},
['authspotify'] = {
['1'] = 'انت بالفعل مخول بهذا الحساب.',
['2'] = 'يتم التخويل، يرجى الانتضار...',
['3'] = 'حصل خطأ في الإتصال، هل الرابط صالح؟ مثال الرابط',
['4'] = 'تم التخويل بنجاح!'
},
['avatar'] = {
['1'] = 'لم أحصل على الصور الخاصة بالمستخدم, يرجى التأكد من إدخال اسم مستخدم صالح أو ID.',
['2'] = 'لا يملك المستخدم هذا أية صور.',
['3'] = 'لا يملك المستخدم هذا الكم من الصور!',
['4'] = 'هذا المستخدم رفض خاصية تجميع البيانات عنه, وعليه لست مخولا لإظهار صورهِ.',
['5'] = 'مستخدم: %s\nصورة: %s/%s\nارسل /avatar %s [رقم] الى @%s لإظهار الصورة ذات الرقم المعطى',
['6'] = 'مستخدم: %s\nصورة: %s/%s\nاستعمل /avatar %s [رقم] لإظهار صورة ذات الرقم المطلوب',
},
['ban'] = {
['1'] = 'من يجب على حظره؟ , يمكنك تحديد المستخدم مع @username او ID الرقمي..',
['2'] = ' لا أستطيع حظر المشرفين و المنشئين.',
['3'] = 'لا أستطيع حظر هذا الشخص لأنهم خارج المجموعة اصلاً.',
['4'] = 'لا يمكنني حظر هذا الشخص لأنه محظور بالفعل.',
['5'] = 'اجعلني مشرفا لكي احظر هذا المستخدم، حاول مجددا لاحقا.',
['6'] = '%s <code>[%s]</code> حظر %s <code>[%s]</code> من %s <code>[%s]</code>%s.\n%s %s',
['7'] = 'قام %s بحظر %s%s.'
},
['bash'] = {
['1'] = 'حدد أمراً لتنفيذه!',
['2'] = 'نجح!'
},
['blacklist'] = {
['1'] = 'أي مستخدم تريده في القائمة السوداء؟ حدد بوساطة @username او ID الرقمي.',
['2'] = 'لا أستطيع وضع المشرفين و المنشئين في القائمة السوداء',
['3'] = 'لا أستطيع وضعه في القائمة السوداء لأنه خارج المجموعة اصلاً.',
['4'] = 'لا أستطيع وضعه في القائمة السوداء لأنه محظور من المجموعة اصلاً.',
['5'] = 'وضع %s <code>[%s]</code> ... %s <code>[%s]</code> في القائمة السوداء، لمنع استعمال %s <code>[%s]</code> في %s <code>[%s]</code>%s.\n%s %s',
['6'] = 'وضع %s %s في القائمة السوداء من استعمال %s%s.'
},
['blacklistchat'] = {
['1'] = 'تم وضع %s بالقائمة السوداء، سوف أغادر عند انضمامي هنا.!',
['2'] = '%s مستخدم, هذا الأمر للمجموعات و ليس المستخدمين!',
['3'] = ' هذا المحادثة %s لا يبدو صالحاً'
},
['bugreport'] = {
['1'] = 'تم إرسال تقرير الأخطاء للمطور!. عنوان ID للبلاغ هي #%s.',
['2'] = 'حصلت مشكلة أثناء هذه العملية، يا لحظك!'
},
['calc'] = {
['1'] = 'اضغط لإرسال النتائج.',
['2'] = 'هذه الكلمة "%s" غير متوقعة!',
['3'] = 'لا يمكن وضع وحدة قبل الأرقام!!'
},
['captionbotai'] = {
['1'] = 'لا أستطيع وصف الصورة!'
},
['cats'] = {
['1'] = 'مياو :3!'
},
['channel'] = {
['1'] = 'غير مسموح لك القيام بهذا!',
['2'] = 'انت لست مشرفا في المحادثة!',
['3'] = 'فشلت في ارسال رسالتك، هل انت متاكد انه اذوناتي لكتابه الرسائل مفعله؟',
['4'] = 'تم ارسال رسالتك!',
['5'] = 'لا استطيع الحصول على لائحه مشرفين المحادثه!',
['6'] = 'يبدو انك لست مشرفا المحادثه!',
['7'] = 'حدد رساله المطلوبه للارسال، استعمل الصيغه /channel <القناة> <الرسالة>.',
['8'] = 'هل انت متاكد انك تريد ارسال هذه الرساله؟ سوف تبدو هكذا:',
['9'] = 'نعم انا متاكد!',
['10'] = 'الرساله تحتوي على تحديدات هن غير مدعومه ! يرجى تصحيح الصيغه والمحاوله مجددا.'
},
['chatroulette'] = {
['1'] = 'مرحبا! لا ترسل رسائل اطول من %s حرف. لكي لا تزعج المستخدم الثاني!',
['2'] = '*قال المجهول:*\n```\n%s\n```\nلإنهاء الجلسة, ارسل /endchat.',
['3'] = 'للاسف فقدت الاتصال بالمستخدم الاخر! لبدء محادثه جديده ارسل رجاءا /chatroulette!',
['4'] = 'الشخص الذي تتحدث معه انهى الجلسه. لبدء محادثه جديده ارسل /chatroulette.',
['5'] = 'تم بدء جلسة بنجاح. لبدء واحده جديده أرسل /chatroulette.',
['6'] = 'لقد ازلتك من لائحة مستخدمين المتوفرين بنجاح.',
['7'] = 'لا تملك جلسه حاليا. لبدء واحده جديده ارسل /chatroulette.',
['8'] = 'جاري البحث عن الجلسه انتضر...',
['9'] = 'لسوء الحظ لا يوجد اي مستخدمين حاليا لكني اضفتك الى لائحه المستخدمين المتوفرين! لايقاف هذا كليا ارسل /endchat.',
['10'] = 'لقد جمعتك بنجاح مع شخص اخر في الجلسه! تذكر رجاءا ان تكون لطيفا! ايقاف الجلسه ارسل /endchat.',
['11'] = 'لسوء الحظ الشخص الذي حاولت انشاء الجلسه معه محظور. ارسل رجاءا /chatroulette للمحاوله!',
['12'] = 'لقد تم جمعكبنجاح مع شخص اخر في محادثه! تذكر ان تكون لطيفا معهم! لانهاء الجلسه ارسل /endchat.'
},
['commandstats'] = {
['1'] = 'لم يتم ارسال اي اوامر في هذه المحادثه!',
['2'] = '<b> احصائيات الاوامر في:</b> %s\n\n%s\n<b> مجمل الاوامر المستعمله:</b> %s',
['3'] = 'تم مسح التفاصيل الاوامر المستعمله!',
['4'] = 'فشل مسح التفاصيل الاوامر المستعمله في هذه المحادثه على الاغلب لانها ممسوحه اصلا؟'
},
['control'] = {
['1'] = 'تهي, أنت تتمنى!',
['2'] = 'جاري تحميل %s...'
},
['copypasta'] = {
['1'] = 'النص الذي قمت بالرد عليه لا يجب ان يتجاوز %s احرف!'
},
['coronavirus'] = {
['1'] = [[* احصائيات COVID-19 عن:* %s
*الحالات الموثقه الجديده:* %s
*الحالات الموثقه الكليه:* %s
*احصائيات الموت الجديده:* %s
*اجمالي الموت:* %s
*حالات التعافي الجديده:* %s
*حالات التعافى الكليه:* %s]]
},
['counter'] = {
['1'] = 'لم استطع اضافه العداد الى تلك الرساله!'
},
['custom'] = {
['1'] = 'تم النجاح! سوف يرسل رساله في كل مره يرسل احدهم %s!',
['2'] = 'الرد "%s" غير موجود!',
['3'] = 'تم مسح الرد "%s"!',
['4'] = 'ليس لديك اي ردود خاصه محفوظه!',
['5'] = 'الاوامر الخاصه في %s:\n',
['6'] = 'لصنع امر خاص جديد استعمل الصيغه الاتيه:\n/custom new #<كلمة> <الرد>... لعرض كل الردود الحاليه استعمل الأمر /custom list. لمسح رد استعمل /custom del #<كلمة>.'
},
['delete'] = {
['1'] = 'لم أستطع مسح الرسالة. ربما لان الرساله قديمه جدا او غير موجوده؟'
},
['demote'] = {
['1'] = 'اي مستخدم تريد مني تخفيضه؟ يمكنك تحديد بوساطة @username أو ID.',
['2'] = 'لماذا تريد مني تخفيظه من هو ليس مشرفا أو منشئا.',
['3'] = 'لا يمكنني تخفيضه لانه خارج المحادثه.',
['4'] = 'لا يمكنني تخفيض هذا المستخدم لانه مطرود من المحادثه.'
},
['dice'] = {
['1'] = 'النطاق الادنى هي: %s.',
['2'] = 'النطاق الاعلى والعد هما %s.',
['3'] = 'النطاق الاقصى هي %s, والعداد الادنى هي %s.',
['4'] = 'نطاق %s هي %s:\n'
},
['doge'] = {
['1'] = 'ادخل النص الذي تريده في صورة الكلب. كل جمله يجب ان تكون مفصوله بسطر جديد او سلاش'
},
['donate'] = {
['1'] = '<b>مرحبا, %s!</b>\n\nلو تشعر بالكرم, يمكنك التبرع لمشروع mattata, بدعمنا بشكل إرادي بأي كمية. سوف تستعمل كلها لتكاليف الخوادم و تعويضاً للوقت و الموارد المستعملة في المشروع. هذا **اختياري**, على كل حال مساهمتك مشكورة و ستظهر اسمك في صفحتنا على كيت هاب\n\nإذا أردت الاستمرار, رابط الدعم المادي<a href="https://paypal.me/wrxck"> هنا</a>. شكرا جزيلا لدعمك!'
},
['duckduckgo'] = {
['1'] = 'لا أعرف ما هذا :/!'
},
['eightball'] = {
['1'] = 'نعم.',
['2'] = 'لا.',
['3'] = 'على مايبدو هي كذلك.',
['4'] = 'همممم،...حسنا، لو كنت مكانك لسألت مرة اخرى'
},
['exec'] = {
['1'] = 'حدد لغة البرمجة:',
['2'] = 'خطا في الاتصال. هل كنت تنوي صنع اضرار؟',
['3'] = 'اختيارك هي "%s" – هل استمر؟',
['4'] = 'رجوع',
['5'] = 'استمر',
['6'] = 'ادخل البرمجة لتنفيذه. لا حاجة لتحديد لغتها, سوف نهتم بها لاحقا!',
['7'] = 'حدد لغة البرمجة:'
},
['facebook'] = {
['1'] = 'حدثت مشكلة!',
['2'] = 'ادخل اسم مستخدم الفيسبوك للحصول على صوره،.',
['3'] = 'افتح @%s في الفيسبوك'
},
['fact'] = {
['1'] = 'اصنع غيرها'
},
['fban'] = {
['1'] = 'اي مستخدم علي حظره بالحظر الجماعي؟ حدد باسم @username او ID الرقمي.',
['2'] = ' لا يمكنني حظر هذا الشخص جماعيا لأنه مشرف أو منشئ هنا',
},
['flickr'] = {
['1'] = 'بحثك كانت عن:',
['2'] = 'ادخل كلمة البحث(المراد البحث عنه مثل: "لمبوركيني" سوف يظهر لك ما لا يمكنك الحصول عليه :p).',
['3'] = 'المزيد'
},
['fortune'] = {
['1'] = 'اضغط لإرسال حظك!'
},
['frombinary'] = {
['1'] = 'ادخل الرقم الثنائي لتحويله الى كلمات.',
['2'] = 'المعطيات تالفة!'
},
['game'] = {
['1'] = 'إجمالي الفوز: %s\nإجمالي الخسارة: %s\nالرصيد: %s عملة متاتا',
['2'] = 'انضمام للعبة',
['3'] = 'هذه اللعبة انتهت!',
['4'] = ' دورك الآن!',
['5'] = 'لست مشاركاً في اللعبة!',
['6'] = 'لا يمكنك الذهاب هنا!',
['7'] = 'انت مشترك باللعبة فعلا!',
['8'] = 'لقد بدأت اللعبة بالفعل!',
['9'] = 'يقوم %s [%s] باللعب ضد %s [%s]\nإنه دور%s حالياً!',
['10'] = 'فاز %s على %s!',
['11'] = 'تعادل %s مع %s!',
['12'] = 'بانتضار متحدٍ...',
['13'] = 'لعبه X O',
['14'] = 'اضغط لإرسال اللعبة لمحادثتك!',
['15'] = 'احصائيات %s:\n',
['16'] = 'إلعب X O!'
},
['gblacklist'] = {
['1'] = 'ردَ على المستخدم لوضعه في قائمة السوادء الشاملة, أو حددهم باسم المستخدم أو ID.',
['2'] = ' فشلت في تحصيل المعلومات عن "%s", رجاءا تأكد أنه اسم مستخدم أو ID صالح و حاول.',
['3'] = 'همم، هذا %s, وليس مستخدماً!'
},
['gif'] = {
['1'] = 'اعطي كلمات البحث رجاءا، (الذي تريد البحث عنه في GIPHY مثلا memes سيظهر لك متحركات الميمز :-:)'
},
['godwords'] = {
['1'] = 'ادخل قيمة عددية يتراوح بين 1 الى 64!',
['2'] = 'رقم صغيرٌ جدا, حدد واحداً بين 1 الى 64!',
['3'] = 'رقم كبيرٌ جدا, حدد واحداً بين 1 الى 64!',
},
['gwhitelist'] = {
['1'] = 'ردَ على المستخدم لازالته من قائمة السوادء الشاملة, أو حددهم باسم المستخدم أو ID.',
['2'] = ' فشلت في تحصيل المعلومات عن "%s", رجاءا تأكد أنه اسم مستخدم أو ID صالح و حاول.',
['3'] = 'همم، هذا %s, وليس مستخدماً!'
},
['hackernews'] = {
['1'] = 'ابرز العناوين Hacker News:'
},
['help'] = {
['1'] = 'لا نتائج!',
['2'] = 'لا يوجد ميزة تم الحصول عليها باسم "%s", حاول أنت تكون دقيقا أكثر!',
['3'] = '\n\nالجملة: <مطلوب> [اختياري]\n\nابحث عن المميزات أو ابحث بخاصية inline - فقط الصق هذا المعرف بمكان الكتابة @%s ثم <كلمة البحث>.',
['4'] = 'السابق',
['5'] = 'التالي',
['6'] = 'رجوع',
['7'] = 'البحث',
['8'] = 'الصفحة رقم %s من %s!',
['9'] = [[
أستطيع إدارة مجموعتك فقط اجعلني مشرفا وارسل /administration لضبط الاعدادات لمجموعتك.
الأوامر الشائعة:
• /pin <نص> - تثبيت الرسالة
• /ban - حظر المستخدمين بالرد أو /ban @username
• /kick - طرد
• /unban - إلغاء الحظر
• /setrules <نص> - ضبط قوانين المجموعه، يحصل عليها من الأمر /rules
]],
['10'] = [[
• /setwelcome - وضع ترحيب،،(يمكن استعمال أشياء مذهلة ايضا. مثل $name اكتبه بالرسالة الترحيب فيكتب اسم الشخص المرحب به او, $chat_id الكتابه ID المحادثة في الرسالة الترحيبية, $user_id لكتابة ID الشخص المرحب به, $title لادخال اسم المحادثة $username لادخال المعرف الشخص المركزي به برسالة الترحيب( إذا المستخدم لا يملك اسم المستخدم سيتم استخدام اسمه بدلا من ذلك)
• /warn - تحذير المخالفة ثم الطرد بعد تجاوز الحد الاقصى
• /mod - ترقية الناس،، لا ترقي احد الا اذا كنت تثق به
• /demod - تخفيض الرتبة
• /staff - عرض المجموعة الاشرافية
]],
['11'] = [[
• /report - تاك الادمنية
• /setlink <الرابط> - حفظ الروابط,, يحصل عليه من قبل الاعضاء بباستعمال الامر /link
• /links <نص> - عدم حظر جميع الروابط التي ترسل هذا الامر اليه ردا على رسالة الحاوية للروابط المطلوبة
]],
['12'] = 'ادناه روابط قد تكون مفيدة:',
['13'] = 'تواصل',
['14'] = 'قناتنا',
['15'] = 'دعم',
['16'] = 'الاسئلة',
['17'] = 'السورس',
['18'] = 'تبرع',
['19'] = 'تقييم',
['20'] = 'سجلات الطرد',
['21'] = 'إعدادات المشرف',
['22'] = 'الإضافات',
['23'] = [[
<b>مرحبا %s! اسمي %s, سررت بمعرفتك </b> %s
أستطيع فهم أوامر عديدة، يمكنك معرفة الأوامر بالضغط على زر "الاوامر" أدناه
%s <b>نصيحة:</b> استعمل زر "الاعدادات" لتغيير أسلوب عملي %s!
%s <b>لو استفدت مني, أو تريد المساعدة فقط؟</b> سوف تسرني بدعم مالي صغير , استعمل الأمر /donate لمزيد من المعلومات!
]],
['24'] = 'داخل'
},
['id'] = {
['1'] = 'لا أعرف هذا الشخص. إذا أردت أن تعرفني علية، حول أيً من رسائلة إلى أي محادثة أنا فية أو أخبرهم بمراسلتي',
['2'] = 'المحادثة المطلوبة:',
['3'] = 'هذه المحادثة:',
['4'] = 'اضغط لإرسال النتائج!'
},
['imdb'] = {
['1'] = 'السابق',
['2'] = 'التالي',
['3'] = 'انت في الصفحة %s من %s!'
},
['import'] = {
['1'] = 'لا أعرف هذه المحادثة!',
['2'] = 'هذه ليس مجموعه خارقة, وعليه لن أستطيع استيراد أيه الاعدادات منه!',
['3'] = 'تم الاستيراد اعدادات الاشراف و الاضافات المفعلة من %s إلى %s!'
},
['info'] = {
['1'] = [[
```
Redis:
%s ملف التفاصيل: %s
%s الوضع: %s
%s بوابة TCP: %s
%s الإصدار: %s
%s وقت التشغيل: %s days
%s تفاصيل العملية: %s
%s مفاتيح منتهيه الصلاحية: %s
%s عدد المستخدمين: %s
%s عدد المجموعات: %s
النظام:
%s OS: %s
```
]]
},
['instagram'] = {
['1'] = '@%s في الانستكرام'
},
['ipsw'] = {
['1'] = '<b>%s</b> iOS %s\n\n<code>MD5 شفرة: %s\nSHA1 شفرة: %s\nحجم الملف: %s كيكا</code>\n\n<i>%s %s</i>',
['2'] = 'هذا النظام خارج عملية التسجيل!',
['3'] = 'هذا النظام يتم تسجيله!',
['4'] = 'حدد موديلك:',
['5'] = 'حدد إصدار النظام:',
['6'] = 'حدد نوع الجهاز:',
['7'] = 'iPod الملموس',
['8'] = 'ايفون',
['9'] = 'ايباد',
['10'] = 'Apple تلفاز'
},
['ispwned'] = {
['1'] = 'تم العثور على الحساب في التسريبات ادناه:'
},
['isup'] = {
['1'] = 'هذا الموقع يبدو نشطا',
['2'] = 'لا يبدو هذا موقعاً صالحا!',
['3'] = 'الموقع غير نشط عندي كذلك'
},
['itunes'] = {
['1'] = 'الاسم:',
['2'] = 'الفنان:',
['3'] = 'الالبوم:',
['4'] = 'الأغنية:',
['5'] = 'القرص:',
['6'] = 'لم يتم العثور على الطلب الأصلي , لقد مسحت رسالتك الأصلية على الأغلب.',
['7'] = 'القطعة الفنية موجودة ادناه:',
['8'] = 'ادخل كلمة البحث (ما تريد البحث عنه مثل "شيلات" ستظهر نتائج عن الشيلات (—~—).',
['9'] = 'احصل على الالبوم',
},
['kick'] = {
['1'] = 'من علي طرده؟ حدد بالمعروف خاصتهم @username or ID.',
['2'] = 'لا يمكنني طرد المشرفين و المنشئين.',
['3'] = 'لا يمكن طرد هذا الشخص لأنه خارج المجموعة اصلا.',
['4'] = 'لا يمكن طرد هذا الشخص لأنه مطرود اصلا.',
['5'] = 'اجعلني مشرفاً لكي أستطيع طردهم. وفر هذا رجاءاً, وحاول مجددا',
},
['lastfm'] = {
['1'] = 'تم تغيير اسم last.fm الخاصة في %s إلى "%s".',
['2'] = 'تم المسح!',
['3'] = 'ليست هناك أي اسم مستخدم last.fm!',
['4'] = 'حدد اسم مستخدم last.fm او اصنع واحدة بالأمر /fmset.',
['5'] = 'لم يتم العثور على سجلات لهذا المستخدم.',
['6'] = 'يقوم %s بالاستماع إلى:\n',
['7'] = 'استمع %s آخر مرة الى:\n',
['8'] = 'مجهول',
['9'] = 'اضغط لإرسال النتائج.'
},
['lmgtfy'] = {
['1'] = 'دعني ابحثها في الكوكل لك!'
},
['location'] = {
['1'] = 'لم تعيين ايه مواقع سابقة،، ماذا تود أن يكون الموقع الحالي؟'
},
['logchat'] = {
['1'] = 'ادخل المعرف ID المحادثة التي تودني أن أرسل سجلات الأفعال مثل الطرد و غيرها.',
['2'] = 'جارٍ التحقق من صلاحية المحادثة...',
['3'] = 'للاسف، أن أنه المحادثةُ غير موجودة,أو أنك نسيت اضافتي هناك، تأكد من هذا و حاول مجددا.',
['4'] = 'فقط المحادثات و القنوات، لايمكن اختبار مستخدم!',
['5'] = 'لا يبدو انك مشرف في تلك محادثه !',
['6'] = 'على ما يبدو، إنه المحادثة قيد الاستخدام من قبلي فعلا، استعمل /logchat بتحديد واحده جديده.',
['7'] = 'تبدو المحادثه جيده سوف ارسل رساله تجريبيه اليها للتاكد فحسب انني املك حقوق ارسال الرسائل!',
['8'] = 'مرحبا ايها العالم - هذه رساله تجريبيه - اذا كنت تقراها فان كل شيء على ما يرام!',
['9'] = 'تم بنجاح! من الان فصاعدا سوف يرسل الجميع السجلات الى %s - لتغيير المحادثه المرسله اليه الاحداث ارسل /logchat.',
},
['lua'] = {
['1'] = 'ادخل معطيات Lua',
},
['lyrics'] = {
['1'] = 'Spotify',
['2'] = 'اظهار كلمات الاغنيه',
['3'] = 'ادخل كلمه البحث(لاغنيه/الفنان الذي تريد مني إحضار كلمات اغنيت، مثال "This is america" سوف يكون رد البوت كلمات هذه الاغنيه.',
},
['minecraft'] = {
['1'] = '<b> قام المستخدم %s بتغير اسمه بمرة %s</b>',
['2'] = '<b>قام المستخدم %s بتغيير اسمه %s مرات</b>',
['3'] = 'السابق',
['4'] = 'التالي',
['5'] = 'رجوع',
['6'] = 'UUID',
['7'] = 'الصور الشخصية',
['8'] = 'تاريخ المعرف',
['9'] = 'حدد اختياراً:',
['10'] = 'ادخل اسم لاعب الماينكرافت الذي تريد عرض معلوماته،(مثال ارسال "cucumber" لعرض معلومات اللاعب المسمى cucumber).',
['11'] = 'اسماء الماينكرافت تتراوح بين 3 إلى 16 كحد أقصى.'
},
['msglink'] = {
['1'] = 'الامر المجموعات فقط و القنوات.',
['2'] = 'هذا %s يجب أن يكون عام ليس خاصا.',
['3'] = 'رد على الرسالة المطلوبة رابطه.'
},
['mute'] = {
['1'] = 'من يجب علي كتمه؟ حدد بواسطه المعرف @username او ID أو الرد.',
['2'] = 'لا استطيع كتم هذا الشخص لانه مكتوم اصلا .',
['3'] = 'لا استطيع كتم المشرفين او منشئين.',
['4'] = 'لا استطيع كتم هذا المستخدم لانه غادر المجموعه بالفعل -او قد طرد منه هو-.',
['5'] = 'احتاج أوامر الإشراف لكي احظر المستخدمين، رجاءا اصلح هذا وحاول مجددا.',
},
['myspotify'] = {
['1'] = 'الصفحه شخصيه',
['2'] = 'يتابع',
['3'] = 'المشغله مؤخرا',
['4'] = 'يتم التشغيل الان',
['5'] = 'الاغاني المشهوره',
['6'] = 'صناع الاغاني المشهورين',
['7'] = 'لست تتابع اي فنانين!',
['8'] = 'الفنانين المفضلين لديك',
['9'] = 'لاتملك اي اغاني في قائمة التشغيل!',
['10'] = 'اغانيك المفضله',
['11'] = 'لا يبدو انك تتابعوا اية فنانين',
['12'] = 'الفنانين الذين تتابعهم',
['13'] = 'لا تملك اغاني تم تشغيلها مؤخرا!',
['14'] = '<b>المشغله مؤخرا</b>\n%s %s\n%s %s\n%sتم الاستماع عند %s:%s في %s/%s/%s.',
['15'] = 'تم قبول طلب التكمله ولكن العمليه لم تكتمل.',
['16'] = 'لا يبدو انك تستمع على اية اغاني الان!',
['17'] = 'يتم تشغيلها حاليا',
['18'] = 'حدثت مشكله عند اعاده اعطاء الاذن لحسابك!',
['19'] = 'تم اعاده اعطاء الاذن بنجاح لحساب Spotify! جاري اكمال طلبك السابق...',
['20'] = 'جاري اعاده اعطاء الاذن لحسابك في Spotify, يرجى الانتظار...',
['21'] = 'يجب ان تعطي الاذن ل mattata إذن اتصال مع حسابك في. اضغط [هنا](https://accounts.spotify.com/en/authorize؟client_id=%s&response_type=code&redirect_uri=%s&scope=user-library-read,playlist-read-private,playlist-read-collaborative,user-read-private,user-read-email,user-follow-read,user-top-read,user-read-playback-state,user-read-recently-played,user-read-currently-playing,user-modify-playback-state) اضغط على الزر الاخظر"اوكي". لربط حسابك, ارسل الرابط الذي تم تحويلك اليه (يجب ان يبدا هكذا "%s", متبوعا بكود المميز) ردا لهذه الرسالة.',
['22'] = 'قائمة تشغيل',
['23'] = 'استخدام وضع Inline',
['24'] = 'الكلمات',
['25'] = 'لم يتم العثور على الاجهزه.',
['26'] = 'ليست لديك قائمة تشغيل.',
['27'] = 'قائمة تشغيلك',
['28'] = '%s %s [%s اغاني]',
['29'] = '%s %s [%s]\nSpotify %s المستخدم\n\n<b>الاجهزة:</b>\n%s',
['30'] = 'جاري تشغيل الاغنيه السابقه...',
['31'] = 'انت الان مستخدمون مدفوع!',
['32'] = 'لم اعثر على اي اجهزه.',
['33'] = 'جاري تشغيل الاغنيه التاليه...',
['34'] = 'جاري استئناف الاغنيه...',
['35'] = 'اجهزتك غير متاحه مؤقتا...',
['36'] = 'لم احصل على الاجهزه!',
['37'] = 'جاري ايقاف الاغنيه...',
['38'] = 'مشغل حاليا',
['39'] = 'اختيار عشوائي لأغانيك...',
['40'] = 'الصوت غير مدعوم يرجى الاختيار قيمه تتراوح من 0 الى 100.',
['41'] = 'تم ضبط الصوت الى %s%%!',
['42'] = 'هذه الرساله تستخدمه اضافه من اصدار قديم، طلب واحده جديده بارسال /myspotify!'
},
['name'] = {
['1'] = 'الاسم الذي ارد عليه حاليا هي "%s" - لو اردت تغييره ارسل /name <نص> (حيث <نص> هو ما تريدني ان ارد عليه).',
['2'] = 'اسمي الجديد يجب ان يتراوح بين 2 الى 32 احرف!',
['3'] = 'اسمي يمكن هو الاحتواء وعلى الأحرف اللاتينية فقط!',
['4'] = 'سوف اجيب الى "%s", بدل امين "%s" - لتغيير هذا مجددا ارسل /name <كلمه> حيث <كلمه> هي ما تريدني ان اجيب عليه.)'
},
['netflix'] = {
['1'] = 'اقرا المزيد.'
},
['news'] = {
['1'] = '"<code>%s</code>" ليست صيغه Lua صالحة.',
['2'] = 'لم استطع الحصول على لائحه المصادر.',
['3'] = '<b> تم الحصول على موارد الاخباريه تطابق </b> "<code>%s</code>":\n\n%s',
['4'] = '<b> قائمه المصادر الاخبار </b> /news<b>. Use</b> /nsources &lt;query&gt; <b> البحث في قائمه الاخبار في نتيجه اكثر دقه،، تطابق نتائج البحث هي باستعمال اللغه Lua</b>\n\n%s',
['5'] = 'لا تملك مصدر أخبار مفظلة. ارسل /setnews <المصدر> لضبط واحدة. اظهر لائحة المصادر بإرسال /nsources, أو قلل النتائج باستعمال /nsources <المعطيات>.',
['6'] = 'مصدرك الاخباري المفظل هي %s. استعمل /setnews <المصدر> لتغييره. أعرض اللائحة من /nsources, أو قلل النتائج باستعمال /nsources <المعطيات>',
['7'] = 'مصدرك المغزى بالفعل %s! استعمل /news لعرض آخر الاحداث.',
['8'] = 'المصدر غير مدعوم، أعرض اللائحة من /nsources ,أو قلل النتائج باستعمال /nsources <المعطيات>.',
['9'] = 'مصدرك المفضل تم تحديثه إلى %s! استعمل /news لعرض آخر الأخبار.',
['10'] = 'المصدر غير مدعوم، أعرض اللائحة المصادر من /nsources. إذا لديك مصدر مفظل استعمل /setnews <المصدر> لتحصل على الأخبار منها عند إرسال /news, بدون جمل اضافيه',
['11'] = 'اقرا المزيد.'
},
['nick'] = {
['1'] = ' اسمك المستعار تم نسيانه !',
['2'] = ' اسمك المستعار تم ضبطه إلى "%s"!'
},
['ninegag'] = {
['1'] = 'اقرا المزيد'
},
['optout'] = {--dead util
['1'] = 'لقد انضممت إلى تجميع بياناتك المرسلة! ارسل /optout للخروج.',
['2'] = 'لقد خرجت من تجميع بياناتك المرسلة! ارسل /optoin للسماح.',
},
['paste'] = {
['1'] = 'حدد خدمة لرفع النص إليه:'
},
['pay'] = {
['1'] = 'لديك حاليا %s عملات Matt. حصل المزيد بالفوز في الالعاب XO, بأستعمال /game - ستربح 100 عملاتMatt لكل فوز, و ستخسر 50 لكل خسارة.',
['2'] = 'يجب استعمال الامر ردا على الشخص، لإرسال العملات له.',
['3'] = 'حدد كمية العملات لاعطائها إلى %s.',
['4'] = 'الكمية تكون رقمية فقط، واكبر من 0.',
['5'] = 'لا يمكن إرسال العملات لنفسك',
['6'] = 'لا يوجد رصيد كافي لإكمال التحويل!',
['7'] = 'لقد ارسلت%s عملات إلى %s. كمية عملتلك الآن هي %s.'
},
['pin'] = {
['1'] = 'لم تضبط رسالة مثبتة سابقاً. استعمل /pin <النص> لتثبيت واحدة. تغييرات الخط،، أي الماركداون مدعومة.',
['2'] = 'اخر رسالة تم تثبيتها بالأمر /pin.',
['3'] = 'وجدت تثبيتا جديدا في قاعدة البيانات،، ولكن رسالتي المرسولة تبدو محذوفة,فلا يمكنني إيجادها، اضبط واحدة جديدية بالأمر /pin <النص>. تغييرات الخطوط مدعومة.',
['4'] = 'فشل تجديد الرسالة المثبتة. اما ان نصك المدخل يحوي كلمات خاطئة، أو أن الرسالة المثبتة ممسوحة. سأرسل لك رسالة مثبتة جديدة- لو أردت تعديلها بعد التأكد من وجودها,استعمل /pin <النص>.',
['5'] = 'نصك المدخل يحوي كلمات ماركداون خاطئه.',
['6'] = 'اضغك هنا الرواية رسالة التثبيت المحدثة ↬.'
},
['pokedex'] = {
['1'] = 'الاسم: %s\nID: %s\nالنوع: %s\nالوصف: %s'
},
['prime'] = {
['1'] = 'ادخل رقما بين 1 إلى 99999.',
['2'] = ' الرقم %s اساسي!',
['3'] = 'الرقم %s ليس اساسياً...'
},
['promote'] = {
['1'] = ' لا أستطيع الترقية لأنه من المشرفين و المنشئين.',
['2'] = 'لا أستطيع ترقية هذا الشخص لأنه خارج المجموعة.',
['3'] = 'لا يمكنني ترقيه هذا الشخص لأنه مطرود من المجموعة.',
},
['quote'] = {
['1'] = 'هذا المستخدم رفض خاصية تجميع البيانات.',
['2'] = 'لا يوجد "اقتباسات" مخزونة ل %s! أصنع بوساطة /save ردا على رسالتهم .'
},
['randomsite'] = {
['1'] = 'اصنع غيرها'
},
['randomword'] = {
['1'] = 'تم الصنع',
['2'] = 'كلمتك العشوائية هي <b>%s</b>!'
},
['report'] = {
['1'] = 'قم بالرد على رسالته، لابلاغ الشخص للمشرفين.',
['2'] = 'لا يمكنك إبلاغ نفسك، هل تظن نفسك أضحوكة XD؟',
['3'] = '<b>يحتاج %s المساعدة في %s!</b>',
['4'] = 'اضغط لعرض الإبلاغ.',
['5'] = 'تم إبلاغ الرسالة للمشرفين بنجاح إلى %s من المشرفين!'
},
['rms'] = {
['1'] = 'يا ربتاه منك يا GNU!'
},
['save'] = {
['1'] = 'هذا المستخدم رفض خاصية تجميع البيانات.',
['2'] = 'خزنتها لقاعدتي البيانية, و اضفتها الى الردود المتوقعه عند استعمال /quote ردا على %s!'
},
['sed'] = {
['1'] = '%s\n\n<i>%s لم ينوي قول هذا!</i>',
['2'] = '%s\n\n<i>%s اعترف بالهزيمة</i>',
['3'] = '%s\n\n<i>%s غير متأكد من خطئه ...</i>',
['4'] = 'اسكت فحسب, <i>أنا لا اخطى ابدا😌 ؟</i>',
['5'] = '"<code>%s</code>" ليس كودا صالحا.',
- ['6'] = '<b>مرحبا, %s, هل تعني:</b>\n<i>%s</i>',
+ ['6'] = 'Hey %s, %s seems to think you meant:\n<i>%s</i>',
['7'] = 'نعم',
['8'] = 'لا',
- ['9'] = 'ربما'
+ ['9'] = 'ربما',
+ ['10'] = 'Just edit your message, idiot.'
},
['setgrouplang'] = {
['1'] = 'تم تغيير لغة المجموعة إلى %s!',
['2'] = 'لغتنا الحالية هنا هي %s.\nيرجى العلم ان بعض الكلمات غير مترجمة من قبل الناس، حاليا. اضغط لاختيار لغتك المفضلة من اللوحة أدناه :',
['3'] = 'الاختيار لاجبار متاتا للرد على الانكليزي فقط معطل حاليا. فعله من الأمر /administration ولكن, لجعلها أسهل لك,وضعتها ادناه.',
['4'] = 'تفعيل',
['5'] = 'تعطيل'
},
['setlang'] = {
['1'] = 'تم ضبط لغتك إلى %s!',
['2'] = 'لغتك الحالية %s.\n ربما ليس كل الكلمات مترجمة حاليا. لو أردت تغيير اللغة, حدد من اللوحة المفاتيح:'
},
['setlink'] = {
['1'] = 'رابط غيُر صالح.',
['2'] = 'تم بنجاح!'
},
['setrules'] = {
['1'] = 'خطوط غير مدعومة.',
['2'] = 'تم ضبط القوانين!'
},
['setwelcome'] = {
['1'] = 'ضبط رسالة الترحيب؟ سيرسل الترحيب للأعضاء الجدد(يمكن تعديلها بارسال /help ثم قسم الادمنية, أو بالأمر /administration). يمكن استعمال أشياء مذهلة ايضا. مثل $name اكتبه بالرسالة الترحيب فيكتب اسم الشخص المرحب به او, $chat_id الكتابه ID المحادثة في الرسالة الترحيبية, $user_id لكتابة ID الشخص المرحب به, $title لادخال اسم المحادثة $username لادخال المعرف الشخص المركزي به برسالة الترحيب( إذا المستخدم لا يتكلم اسم المستخدم سيتم استخدام اسمه بدلا من ذلك،).',
['2'] = 'هناك مشكلة بصيغة الملف, تأكد من الماركداون أي كود الخطوط، وحاول مجددا.',
['3'] = 'تم حفظ الرسالة ل%s بنجاح!'
},
['share'] = {
['1'] = 'شارك'
},
['shorten'] = {
['1'] = 'حدد خادما من الأزرار ادناه:'
},
['shsh'] = {
['1'] = 'لم استقبل رد السيرفر لأي SHSH، لهذه ECID, تأكد من صحتها وأنك حفظته من https://tsssaver.1conan.com.',
['2'] = 'ال SHSH ، لهذا الجهاز متاح لهذه الاصدارات من Ios:\n',
['3'] = 'نزل .zip'
},
['statistics'] = {
['1'] = 'لم يرسل ايه رسائل هنا!',
['2'] = '<b>الإحصائيات لهذا:</b> %s\n\n%s\n<b>إجمالي إرسال الرسائل:</b> %s',
['3'] = 'تم المسح الإحصائيات!',
['4'] = 'فشلت في المسرح، ربما هي ممسوحة اصلا؟'
},
['steam'] = {
['1'] = 'اسم المستخدم تم ضبتها إلى "%s".',
['2'] = '"%s" ليست اسما صالحا.',
['3'] = 'المسخدم %s عضو منذ %s, عند %s. آخر تسجيل خروج عند %s, في %s. اضغط <a href="%s">هنا</a> لعرض الصفحه في ستيم.',
['4'] = '%s, AKA "%s",'
},
['synonym'] = {
['1'] = 'الكلمة <b>%s</b>, يبدو احسن من %s.'
},
['thoughts'] = {
['1'] = '%s\n\nايجابي: <code>%s%% [%s]</code>\nسلبي: <code>%s%% [%s]</code>\nمحير: <code>%s%% [%s]</code>\nإجمالي الافكار: <code>%s</code>'
},
['tobinary'] = {
['1'] = 'ادخل الكلمات لتحويلها إلى أرقام ثنائية.'
},
['trust'] = {
['1'] = 'لا أستطيع الثقة لأنه من المشرفين و المنشئين بالفعل.',
['2'] = 'لا أستطيع الثقة بهذا الشخص لأنه خارج المجموعة اصلا.',
['3'] = 'لا يمكنني الثقة بهذا الشخص لأنه مطرود من المجموعة.',
},
['unmute'] = {
['1'] = 'من يجب علي فك كتمه؟ حددهم باستخدام @username او ID.',
['2'] = 'لا يمكنني فك الكتم من هذا الشخص لأنه ليس مكتوم اصلا.',
['3'] = 'لا أستطيع فك الكتم لأنه من المشرفين و المنشئين.',
['4'] = 'لا أستطيع فك الكتم من هذا الشخص لأنه خرج من المجموعة أو انطرد.',
},
['untrust'] = {
['1'] = 'من يجب علي إلغاء الثقة به؟ حددهم باستخدام @username او ID.',
['2'] = 'لا أستطيع إلغاء الثقة لأنه من المشرفين و المنشئين بالفعل.',
['3'] = 'لا أستطيع الغاء الثقة بهذا الشخص لأنه خارج المجموعة اصلا.',
['4'] = 'لا يمكنني إلغاء الثقة بهذا الشخص لأنه مطرود من المجموعة.',
},
['upload'] = {
['1'] = 'رد على الملف، يجب أن يكون < 20 MB.',
['2'] = 'ملف كبير جدا اجعله < 20 MB.',
['3'] = 'لا يمكنني الحصول على الملفات القديمة هنا.',
['4'] = 'حصلت مشكلة أثناء التنزيل.',
['5'] = 'تم التنزيل...- أحصل عليه من هنا <code>%s</code>!'
},
['version'] = {
['1'] = '@%s AKA %s `[%s]` is running mattata %s, created by [Matthew Hesketh](https://t.me/wrxck). The source code is available on [GitHub](https://github.com/wrxck/mattata).'
},
['voteban'] = {
['1'] = 'من تريدني أن أفتح له الحظر بالتصويت؟ حددهم بواسطة @username أو ID.',
['2'] = 'لا استطيع أن أفتح له الحظر بالتصويت لأنه مدير أو مشرف.',
['3'] = 'لا استطيع أن أفتح له الحظر بالتصويت لأنه خارج المجموعة.',
['4'] = 'هل يجب حظر %s [%s] من %s؟ نحتاج %s من التصويت لحظره ,و %s من رفض التصويت لإغلاق هذا.',
['5'] = 'نعم [%s]',
['6'] = 'لا [%s]',
['7'] = 'هذا مطلب الناس لقد حظرت %s [%s] من %s لأن %s صوتوا لهذا.',
['8'] = 'تم تلبية الحظ الأدنى, على كلٍ, لا أستطيع حظر %s - ربما انطردوا أو خرجوا أو تمت ترقيتهم وقت فتح التصويت، أو اخذت مني صلاحية الحظر',
['9'] = 'هذا مطلب الناس. لم احظر %s [%s] من %s لأن الناس المطلوبين %s رفضوا الحظر.',
['10'] = 'لقد اخترت حظر %s [%s]!',
['11'] = ' لقد تراجعت عن اختيارك, اختر من جديد.',
['12'] = 'لقد رفضت حظر %s [%s]!',
['13'] = 'الحظر بالتصويت مفتوح فعلا لهذا الشخص..!'
},
['weather'] = {
['1'] = 'لا موقع لديك. استخدم /setloc <الموقع> لضبط واحدة.',
['2'] = 'الان %s (يبدو مثل %s) في %s. %s'
},
['welcome'] = {
['1'] = 'قوانين المجموعة'
},
['whitelist'] = {
['1'] = 'من علي اعفاءه؟ حدد باستخدام المعرف أو ID.',
['2'] = 'لا أستطيع وضعه في القائمة البيضاء لأنه مدير أو مشرف فلا داعي لهذا.',
['3'] = 'لا أستطيع وضعه في القائمة البيضاء لأنه خارج المجموعة.',
['4'] = 'لا أستطيع وضعه في القائمة البيضاء لأنه محظور.',
},
['wikipedia'] = {
['1'] = 'اقرأ المزيد.'
},
['youtube'] = {
['1'] = 'السابق',
['2'] = 'التالي',
['3'] = 'انت في الصفحة %s من %s!'
}
}
\ No newline at end of file
diff --git a/languages/de_de.lua b/languages/de_de.lua
index baf3250..a500f5e 100644
--- a/languages/de_de.lua
+++ b/languages/de_de.lua
@@ -1,782 +1,783 @@
-- This is a language file for mattata
-- Language: de-de
-- Author: LKD70, CodeNameT1M
-- DO NOT CHANGE ANYTHING THAT BEGINS OR ENDS WITH A %
-- THESE ARE PLACEHOLDERS!
-- DO NOT CHANGE ANY MARKDOWN/HTML FORMATTING!
-- IF YOU ARE UNSURE, ASK ON TELEGRAM (t.me/mattataDev)
return {
['errors'] = {
['connection'] = 'Verbindungs-fehler.',
['results'] = 'Kein Ergebnis gefunden.',
['supergroup'] = 'Dieser Befehl kann nur in Supergruppen benutzt werden.',
['admin'] = 'Für diesen Befehl musst du ein Moderator oder Administrator in dieser Gruppe sein.',
['unknown'] = 'Ich kann den Benutzer nicht erkennen. Wenn du mich lehren möchtest wer dieser Benutzer ist, dann leite einfach eine Nachricht von diesem Benutzer in eine Gruppe in der ich auch bin .',
['generic'] = 'Ein Fehler ist passiert!',
['use'] = 'Du hast keine Benutzungserlaubnis!',
['private'] = 'Du kannst diesen Command nur im Privatchat nutzen!'
},
['addcommand'] = {
['1'] = 'Bitte Spezifiziere den Command so: <code>/command - description</code>',
['2'] = 'Ich konnte meine Befehle nicht abrufen!',
['3'] = 'Die Beschreibung des Comands darf nicht länger als 256 Zeichen sein!',
['4'] = 'Ein unbekannter fehler ist passiert, ich war nicht in der Lage den Command hinzuzufügen!',
['5'] = 'Command wurde erfolgreich hinzugefügt.'
},
['addrule'] = {
['1'] = 'Bitte spezifiziere die Regel die du hinzufügen willst!',
['2'] = 'Du hast keine Regeln zum hinzufügen! Bitte erstelle Regeln mit dem Befehl /setrules!',
['3'] = 'Ich konnte diese Regel nicht hinzufügen, da so die Länge der Regel zu lang wäre und Telegram\'s 4096 Zeichen limit überschreiten würde!',
['4'] = 'Ich konnte diese Regel nicht hinzufügen, es scheint so als würde es nicht zulässige Markdown-Formatierungen beinhalten!',
['5'] = 'Regeln wurden erfolgreich aktualisiert!'
},
['addslap'] = {
['1'] = 'Du kannst diesen Befehl nur in Gruppen benutzen!',
['2'] = 'Der slap darf keine { oder } außerhalb der Platzhalter haben!',
['3'] = 'Der slap darf nicht länger als 256 Zeichen sein!',
['4'] = 'Ich habe erfolgreich diesen slap hinzugefügt als eine Möglichkeit für /slap in dieser Gruppe!',
['5'] = 'Du musst Platzhalter benutzen im slap. Benutze {ME} für die Person die den Befehl benutzt und {THEM} für das Opfer.'
},
['administration'] = {
['1'] = 'Aktiviere Administration',
['2'] = 'Deaktiviere Administration',
['3'] = 'Anti-Spam Einstellungen',
['4'] = 'Warn-Einstellungen',
['5'] = 'Vote-Bann Eintellungen',
['6'] = 'Neue User begrüßen?',
['7'] = 'Regeln senden bei Beitritt?',
['8'] = 'Regeln in Gruppe senden?',
['9'] = 'Zurück',
['10'] = 'Weiter',
['11'] = 'Wort Filter',
['12'] = 'Anti-Bot',
['13'] = 'Anti-Link',
['14'] = 'Aktionen loggen?',
['15'] = 'Anti-RTL',
['16'] = 'Anti-Spam Aktion',
['17'] = 'Bann',
['18'] = 'Kick',
['19'] = 'Commands löschen?',
['20'] = 'Gruppen-Sprache erzwingen?',
['21'] = 'Einstellungen in Gruppe senden?',
['22'] = 'Antwort löschen bei Aktion?',
['23'] = 'Captcha benötigt?',
['24'] = 'Inline Captcha benutzen?',
['25'] = 'Banne SpamWatch-markierte Benutzer?',
['26'] = 'Anzahl der Warunungen bis %s:',
['27'] = 'Upvotes benötigt für Bann:',
['28'] = 'Downvotes benötigt für ignorieren:',
['29'] = 'Löschte %s, war ein passender Link von der Database!',
['30'] = 'Keine Einträge vorhanden in der database passend zu "%s"!',
['31'] = 'Du bist kein Administrator in dieser Gruppe!',
['32'] = 'Die minimale Anzahl von upvotes benötigt für einen vote-bann ist %s.',
['33'] = 'Die maximale Anzahl von upvotes benötigt für einen vote-bann ist %s.',
['34'] = 'Die minimale Anzahl von downvotes benötigt für einen vote-bann ist %s.',
['35'] = 'Die maximale Anzahl von downvotes benötigt für einen vote-bann ist %s.',
['36'] = 'Die maximale Anzahl von Warnungen ist %s.',
['37'] = 'Die minimale Anzahl von Warnungen ist %s.',
['38'] = 'Du kannst ein oder mehrere Wörter hinzufügen zum Wort Filter mit /filter <Wort>',
['39'] = 'Du wirst nicht länger dran erinnert, das das Administrations-Plugin abgeschaltet ist. Um es anzuschalten, benutze /administration.',
['40'] = 'Das ist kein zulässiger Chat!',
['41'] = 'Es sieht nicht so aus, als wärst du Administrator in diesem Chat!',
['42'] = 'Meine Administrativen funktionen können nur in Gruppen benutzt werden! Wenn du Hilfe brauchst meine administrativen Funktionen zu nutzen, schau mal in den "Administration" Bereich bei /help! Alternativ, wenn du die Winstellungen einer Gruppe ändern willst die du Administrierst, du kannst das Hier tun mit dem Befehl /administration <chat>.',
['43'] = 'Benutze die Knöpfe unten um die Administrativen Einstellungen zu ändern von <b>%s</b>:',
['44'] = 'Bitte sende mir eine [private message](https://t.me/%s), damit ich dir diese Information schicken kann.',
['45'] = 'Ich habe dir die angefragten Informationen privat zugeschickt.',
['46'] = 'Entferne Channel Pins?',
['47'] = 'Entferne Other Pins?',
['48'] = 'Entferne Code?',
['49'] = 'Blockiere Inline Bots?',
['50'] = 'Kick Medien bei Beitritt?',
['51'] = 'Aktiviere Plugins für Admins?',
['52'] = 'Kick URLs bei Beitritt?'
},
['afk'] = {
['1'] = 'Tut mir leid. Dieses Feature ist nur dann verfügbar, wenn der Benutzer einen öffentlichen @Benutzername hat!',
['2'] = '%s ist wieder zurück nachdem er/sie nicht anwesend war für %s!',
['3'] = 'Notiz',
['4'] = '%s ist nicht anwesend.%s'
},
['antispam'] = {
['1'] = 'Abschalten',
['2'] = 'Anschalten',
['3'] = 'Deaktiviere Limit',
['4'] = 'Aktiviere limits von %s',
['5'] = 'Alle Administrations-Einstellungen',
['6'] = '%s [%s] hat %s [%s] gekickt von %s [%s] für überschreiten des eingestellten anti-spam limits für [%s] Medien.',
['7'] = 'Kickte %s für Überschreitung des eingesellten antispam limits für [%s] Medien.',
['8'] = 'Das maximale Limit ist 100.',
['9'] = 'Das minimale Limit ist 1.',
['10'] = 'Ändere die Anti-Spam Einstellungen für %s unten:',
['11'] = 'Hey %s, wenn du Code sendest der länger ist als %s Zeichen, bitte nutze stattdessen /paste im <a href="https://t.me/%s">privatem Chat mit mir</a>!',
['12'] = '%s <code>[%s]</code> hat %s %s <code>[%s]</code> von %s <code>[%s]</code> für das verschicken von Telegram-Einladungslinks.\n#chat%s #user%s',
['13'] = '%s %s für das verschicken von Telegram-Einladungslinks.',
['14'] = 'Hey, Ich habe gemerkt das du anti-link aktiviert hast und du deinen Nutzern nicht erlaubst einen Chat zu erwähnen den du gerade erwähnt hast,wenn du das erlauben willst, nutze /allowlink <links>.',
['15'] = 'Kickte %s <code>[%s]</code> von %s <code>[%s]</code> für das Senden von Medien in den ersten paar Nachrichten.\n#chat%s #user%s',
['16'] = 'Kickte %s <code>[%s]</code> von %s <code>[%s]</code> für das Senden von URLs in den ersten paar Nachrichten.\n#chat%s #user%s',
['17'] = 'Action',
['18'] = 'Kick',
['19'] = 'Ban',
['20'] = 'Mute'
},
['appstore'] = {
['1'] = 'Ansehen in iTunes',
['2'] = 'Bewertung',
['3'] = 'Bewertungen'
},
['authspotify'] = {
['1'] = 'Du bist schon authorisiert mit diesem Account.',
['2'] = 'Authorisierung, bitte warten...',
['3'] = 'Ein verbindungs-Fehler ist passiert. Bist du dir sicher das der Link Korrekt war? Es sollte aussehen wie',
['4'] = 'Erfolgreich authorisiert mit deinem Spotify-Account!'
},
['avatar'] = {
['1'] = 'Ich konnte kein Profilbild für den Benutzer abrufen. Bitte sorge dafür, dass du einen gültigen Benutzername oder eine gültige Identifikationsnummer angegeben hast.',
['2'] = 'Dieser Benutzer hat keine Profilbilder.',
['3'] = 'Dieser Benutzer hat nicht viele Profilbilder!',
['4'] = 'Dieser Benutzer ist opted out(ausgetreten) von der Datensammlung funktionalität, deswegen ist es mir nicht möglich die Profil Bilder anzuzeigen.',
['5'] = 'User: %s\nPhoto: %s/%s\nSend /avatar %s [offset] to @%s to view a specific photo of this user',
['6'] = 'User: %s\nPhoto: %s/%s\nUse /avatar %s [offset] to view a specific photo of this user'
},
['ban'] = {
['1'] = 'Welchen Benutzer soll ich sperren? Du kannst den Benutzer mit dem Benutzernamen oder mit der Identifikationsnummer angeben.',
['2'] = 'Ich kann diesen Benutzer nicht sperren, weil er/sie ein Moderator oder Administrator in dieser Gruppe ist.',
['3'] = 'Ich kann diesen Benutzer nicht sperren, weil er/sie die Gruppe schon verlassen hat.',
['4'] = 'Ich kann diesen Benutzer nicht sperren, weil er/sie für die Gruppe schon gesperrt ist.',
['5'] = 'Ich muss Administrationsberechtigung haben damit ich den Benutzer sperren kann. Bitte kümmer dich um das Problem und versuche es noch einmal.',
['6'] = '%s <code>[%s]</code> hat %s <code>[%s]</code> gebannt von %s <code>[%s]</code>%s.\n%s %s',
['7'] = '%s hat %s%s gebannt.'
},
['bash'] = {
['1'] = 'Zum durchführen gebe bitte einen Befehl an!',
['2'] = 'Erfolg!'
},
['blocklist'] = {
['1'] = 'Welchen Benutzer soll ich auf die Block-Liste setzen? Du kannst den Benutzer mit dem Benutzernamen oder mit der Identifikationsnummer angeben.',
['2'] = 'Ich kann diesen Benutzer nicht auf die Block-Liste setzen, weil er/sie ein Moderator oder Administrator in dieser Gruppe ist.',
['3'] = 'Ich kann diesen Benutzer nicht auf die Block-Liste setzen, weil er/sie die Gruppe schon verlassen hat.',
['4'] = 'Ich kann diesen Benutzer nicht auf die Block-Liste setzen, weil er/sie für die gruppe schon gesperrt ist.',
['5'] = '%s <code>[%s]</code> has blocklisted %s <code>[%s]</code> from using %s <code>[%s]</code> in %s <code>[%s]</code>%s.\n%s %s',
['6'] = '%s has blocklisted %s from using %s%s.'
},
['blocklistchat'] = {
['1'] = '%s ist nun auf der Block-Liste. Ich will euch auch verlassen wenn ich hinzugefügt werde!',
['2'] = '%s ist ein Benutzer. Dieser Befehl ist für die Block-Liste von Unterhaltungen wie Gruppen und Kanäle!',
['3'] = '%s ist keine gültige Gruppe!'
},
['bugreport'] = {
['1'] = 'Erfolg! Dein Fehlerbericht wurde gesendet. Die Identifikationsnummer für diesen Bericht ist #%s.',
['2'] = 'Es ist ein Fehler aufgetreten mit dem Fehlerbericht!'
},
['calc'] = {
['1'] = 'Zum senden des Ergebnis klicken.',
['2'] = '"%s" was an unexpected word!',
['3'] = 'You cannot have a unit before a number!'
},
['captionbotai'] = {
['1'] = 'Ich kann das Bild wirklich nicht beschreiben!'
},
['cats'] = {
['1'] = 'Miau!'
},
['channel'] = {
['1'] = 'Du bist nicht berechtigt zum benutzen!',
['2'] = 'Es sieht so aus als wärst du nicht mehr ein Administrator dieser Gruppe!',
['3'] = 'Ich konnte deine Nachricht nicht senden. Bist du sicher, dass ich immer noch befugt bin zum senden von Nachrichten in dieser Gruppe?',
['4'] = 'Deine Nachricht ist gesendet!',
['5'] = 'Es war mir nicht möglich eine List mit Administratoren von dieser Gruppe zu bekommen!',
['6'] = 'Es sieht so aus als wärst kein Administrator dieser Gruppe!',
['7'] = 'Bitte spezifiere die Nachricht und benutze den Syntax /channel <Kanal> <Nachricht>.',
['8'] = 'Bist du dir sicher, dass du die nachricht senden möchtest? Das ist wie es ausehen wird:',
['9'] = 'Ja, ich bin sicher!',
['10'] = 'Diese Nachricht hat ein falsches Format! Bitte korigiere den Syntax und versuche es noch einmal.'
},
['chatroulette'] = {
['1'] = 'Hey! Please don\'t send messages longer than %s characters. We don\'t want to annoy the other user!',
['2'] = '*Anonymous said:*\n```\n%s\n```\nTo end your session, send /endchat.',
['3'] = 'I\'m afraid I lost connection from the other user! To begin a new chat, please send /chatroulette!',
['4'] = 'The other person you were chatting with has ended the session. To start a new one, send /chatroulette.',
['5'] = 'Successfully ended your session. To start a new one, send /chatroulette.',
['6'] = 'I have successfully removed you from the list of available users.',
['7'] = 'You don\'t have a session set up at the moment. To start one, send /chatroulette.',
['8'] = 'Finding you a session, please wait...',
['9'] = 'I\'m afraid there aren\'t any available users right now, but I have added you to the list of available users! To stop this completely, please send /endchat.',
['10'] = 'I have successfully paired you with another user to chat to! Please remember to be kind to them! To end the chat, send /endchat.',
['11'] = 'I\'m afraid the user who I tried to pair you with has since blocked me. Please try and send /chatroulette again to try and connect to me!',
['12'] = 'I have successfully paired you with another user to chat to! Please remember to be kind to them! To end the chat, send /endchat.'
},
['commandstats'] = {
['1'] = 'Es wurden keine Befehle in dieser Unterhaltung gesendet!',
['2'] = '<b>Befehl Statistiken für:</b> %s\n\n%s\n<b>Summe der gesendeten Befehle:</b> %s',
['3'] = 'Die Befehl Statistiken für diese Unterhaltung wurden gelöscht!',
['4'] = 'Ich konnte die Befehl Statistiken für diese Unterhaltung nicht löschen. Wurden sie vielleicht schon gelöscht?'
},
['control'] = {
['1'] = 'Pfft, wie du willst!',
['2'] = '%s ist am Neuladen...'
},
['copypasta'] = {
['1'] = 'Der Antowrten-zu text kann nicht länger sein als %s Zeichen!'
},
['coronavirus'] = {
['1'] = [[*COVID-19 Statistics for:* %s
*New confirmed cases:* %s
*Total confirmed cases:* %s
*New deaths:* %s
*Total deaths:* %s
*New recovered cases:* %s
*Total recovered cases:* %s]]
},
['custom'] = {
['1'] = 'Erfolg! Die Nachricht wird nun jedesmal gesendet wen jemand %s benutzt!',
['2'] = 'Der Auslöser "%s" existiert nicht!',
['3'] = 'Der Auslöser "%s" ist gelöscht!',
['4'] = 'Du hast keine eigene Auslöser angegeben!',
['5'] = 'Eigene Befehle für %s:\n',
['6'] = 'Zum machen von eigenen Befehlen, benutze diesen Syntax:\n/custom new #Auslöser <Wert>. Zum listen aller bestehenden Auslöser, benutze /custom list. Zum löschen eines Auslösers, benutze /custom del #Auslöser.'
},
['delete'] = {
['1'] = 'Ich konnte die Nachricht nicht löschen. Ist die Nachricht vielleicht zu alt oder existiert nicht?'
},
['demote'] = {
['1'] = 'Welchen Benutzer soll ich degradieren? Du kannst den Benutzer mit dem Benutzernamen oder mit der Identifikationsnummer angeben.',
['2'] = 'Ich kann den Benutzer nicht degradieren, weil er/sie ein Moderator oder Administrator in dieser Gruppe ist.',
['3'] = 'Ich kann den Benutzer nicht degradieren, weil er/sie die Gruppe schon verlassen hat.',
['4'] = 'Ich kann den Benutzer nicht degradieren, weil er/sie von der Gruppe entfernt wurde.'
},
['dice'] = {
['1'] = 'Die mindest Spannweite ist %s.',
['2'] = 'Die maximal Spannweite und Zählung ist beides %s.',
['3'] = 'Die maximal Spannweite ist %s, die maximal Zählung ist %s.',
['4'] = '%s rollt mit einer Spannweite von %s:\n'
},
['doge'] = {
['1'] = 'Bitte gebe den text ein welchen du in Doge-ify sehen willst. Jeder Satz sollte getrennt sein mit Schrägstrich oder neue Zeile..'
},
['donate'] = {
['1'] = '<b>Hello, %s!</b>\n\nIf you\'re feeling generous, you can contribute to the mattata project by making a monetary donation of any amount. This will go towards server costs and any time and resources used to develop mattata. This is an optional act, however it is greatly appreciated and your name will also be listed publically on mattata\'s GitHub page.\n\nIf you\'re still interested, you can donate <a href="https://paypal.me/wrxck">here</a>. Thank you for your continued support!'
},
['duckduckgo'] = {
['1'] = 'Ich bin nicht sicher was das ist!'
},
['eightball'] = {
['1'] = 'Ja.',
['2'] = 'Nein.',
['3'] = 'Es ist warscheinlich so.',
['4'] = 'Also... Wenn ich du wäre würde ich später noch mal fragen.'
},
['exec'] = {
['1'] = 'Bitte wähle die Sprache in der dein Code ausgeführt werden soll:',
['2'] = 'Ein Fehler ist aufgetreten! Die Verbindung ist unterbrochen. Hast du versucht mich langsamer zu machen?',
['3'] = 'Du hast ausgewählt: "%s" – bist du sicher?',
['4'] = 'Zurück',
['5'] = 'Ich bin sicher',
['6'] = 'Bitte gebe den Schnipsel Code ein, welchen du durchführen willst. Du must keine Sprache wählen, wir machen das später!',
['7'] = 'Bitte wähle die Sprache in der dein Code ausgeführt werden soll:'
},
['facebook'] = {
['1'] = 'Ein Fehler ist aufgetreten!',
['2'] = 'Bitte gebe den Namen von dem Facebook Benutzer ein, von welchem du ein Profilbild bekommen willst.',
['3'] = 'Schaue @%s in Facebook an'
},
['fact'] = {
['1'] = 'Generiere nochmal'
},
['fban'] = {
['1'] = 'Which user would you like me to Fed-ban? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot Fed-ban this user because they are a moderator or an administrator in this chat.'
},
['flickr'] = {
['1'] = 'Du hast gesucht für:',
['2'] = 'Bitte gebe einen Suchbegriff ein (das ist, was ich in flickr für dich suchen soll, d.h. "Big Ben" will ein Bild vom Big Ben in London senden).',
['3'] = 'Mehr Ergebnisse.'
},
['game'] = {
['1'] = 'Total gewonnen: %s\nTotal verloren: %s\nGuthaben: %s mattacoins',
['2'] = 'Dem Spiel beitreten',
['3'] = 'Dieses Spiel hat schon geendet!',
['4'] = 'Du bist nicht an der reihe!',
['5'] = 'Du bist kein Mitspieler von diesem Spiel!',
['6'] = 'Du kannst da nicht hingehen!',
['7'] = 'Du bist schon ein Mitspieler von diesem Spiel!',
['8'] = 'Dieses Spiel hat schon angefangen!',
['9'] = '%s [%s] spielt gegen %s [%s]\nEs ist %s an der reihe!',
['10'] = '%s hat das Spiel gewonnen gegen %s!',
['11'] = '%s hat das spiel gezogen gegen %s!',
['12'] = 'Warte für einen Gegenspieler...',
['13'] = 'Tic-Tac-Toe',
['14'] = 'Klick zum senden des Spiels in die Unterhaltung!',
['15'] = 'Statistik für %s:\n',
['16'] = 'Spiel Tic-Tac-Toe!'
},
['gblocklist'] = {
['1'] = 'Bitte Antworte-zu dem Benutzer, welchen du global auf der schwarzen Liste haben möchtest, oder gebe ihn/sie mit Benutzername/Identifikationsnummer an.',
['2'] = 'Ich kann keine Information über "%s" finden, bitte prüfe nach ob der Benutzername/Identifikationsnummer gültig ist und versuche es noch einmal.',
['3'] = 'Das ist ein/e %s, aber kein Benutzer!'
},
['gif'] = {
['1'] = 'Bitte gebe einen Suchbegriff ein (das ist, was ich in GIPHY für dich suchen soll, d.h. "Katze" will ein GIF von einer Katze senden).'
},
['gallowlist'] = {
['1'] = 'Bitte Antworte-zu dem Benutzer, welchen du global auf der weißen Liste haben möchtest, oder gebe ihn/sie mit Benutzername/Identifikationsnummer an.',
['2'] = 'Ich kann keine Information über "%s" finden, bitte prüfe nach ob der Benutzername/Identifikationsnummer gültig ist und versuche es noch einmal.',
['3'] = 'Das ist ein/e %s, aber kein Benutzer!'
},
['hackernews'] = {
['1'] = 'Top Stories von Hacker News:'
},
['help'] = {
['1'] = 'Kein Ergebnis gefunden!',
['2'] = 'Keine Eigenschaften gefunden, welche übereinstimmen mit "%s". Bitte versuche ein bischen spezifischer zu sein!',
['3'] = '\n\nArguments: <erforderlich> [optional]\n\nSuche für Eigenschaften oder bekomme Hilfe mit der Benutzung von einem Befehl meiner inline Search Funktionalität - erwähne mich in irgendeiner Unterhaltung mit dem Syntax @%s <Suchbegriff>.',
['4'] = 'Vorherige',
['5'] = 'Nächste',
['6'] = 'Zurück',
['7'] = 'Suche',
['8'] = 'Du bist auf Seite %s von %s!',
['9'] = [[
Ich kann viele administrative Handlungen in deinen Gruppen machen. Du brauchst mich nur als Administrator hinzufügen und sende /administration zum anpassen der Einstellungen für deine Gruppe.
Hier sind einige administrative Befehle und ein kurzer Kommentar bezüglich was sie tun:
• /pin <text> - Sende einen formatierten Text, welcher auch bearbeitet werden kann mit dem selben Befehl und anderem Text, zum ersparen vom anheften eines textes den du nicht bearbeiten kannst to save you from having to re-pin a message if you can't edit it (was passieren kann, wenn der Text älter als 48 Stunden ist).
• /ban - Sperre einen Benutzer mit einer Antwort zu deren Text, oder mit spezifizieren mit deren Benutzername/Identifikationsnummer.
• /kick - Kick (sperren und dann sperre aufheben) einen Benutzer mit einer Antwort zu deren Text, oder mit spezifizieren mit deren Benutzername/Identifikationsnummer.
• /unban - Die Sperre eines Benutzer aufheben mit einer Antwort zu deren Text, oder mit spezifizieren mit deren Benutzername/Identifikationsnummer.
• /setrules <text> - Mache einen formatierten Text als Gruppenregel, welcher gesendet wird, wenn jemand /rules benutzt.
]],
['10'] = [[
• /setwelcome - Mache einen formatierten Text als Wilkommens Text, welcher jedesmal gesendet wird, wenn ein neuer Benutzer der Gruppe beitritt (der Willkommens Text kann ausgeschalted werden im Administration Menü, erreichbar durch /administration). Du kannst Platzhalter benutzen für einen individuellen Willkommens Text für jeden Benutzer. Benutze $user_id zum einfügen des Benutzers Identifikationsnummer, $chat_id zum einfügen der Gruppen Identifikationsnummer, $name zum einfügen des Benutzers name, $title zum einfügen des Gruppennamen und $username zum einfügen des Benutzers Benutzername (wenn der Benutzer keinen @Benutzernamen hat, wird deren Name benutzt, also ist es das beste, dieses zu vermeiden mit der Benutzung von $name).
• /warn - Warne einen Benutzer und sperre ihn/sie, wenn mehr als das Maximum der Warnungen ausgesprochen wurden.
• /mod - Befördere den Antworten-zu Benutzer. Gib im zugriff zu administrative Befehle wie /ban, /kick, /warn usw. (das ist sinnvoll wenn du nicht möchtest, dass jemand Nachrichten löschen kann)
• /demod - Degradiere den Antworten-zu Benutzer. Nehme deren Moderationstatus weg und die Möglichkeit zum benutzen administrativen Befehlen.
• /staff - Sehe den Gruppenerschaffer, Administratoren und Moderatoren in einer schön formatierten Liste.
]],
['11'] = [[
• /report - Sendet den Antworten-zu Text zu allen Administratoren und warnt sie vor der aktuellen Situation.
• /setlink <URL> - Ändert den Gruppen Link zu der gegebenen URL, welcher gesendet wird wenn jemand /link benutzt.
• /links <text> - Weiße Liste von allen gefundenen Telegram Links im angegebenen Text (einschließlich @Benutzername links)
]],
['12'] = 'Nachfolgend sind einige Links die du vielleicht nützlich findest:',
['13'] = 'Development',
['14'] = 'Channel',
['15'] = 'Support',
['16'] = 'FAQ',
['17'] = 'Source',
['18'] = 'Donate',
['19'] = 'Rate',
['20'] = 'Administration Log',
['21'] = 'Admin Settings',
['22'] = 'Plugins',
['23'] = [[
<b>Hallo %s! Mein Name ist %s, schön dich zu treffen.</b> %s
Ich verstehe viele Befehle, welche du lernen kannst wenn du den "Commands" Knopf drückst in der angehängten Tastatur.
%s <b>Tip:</b> Benutze den "Settings" Knopf zum verändern wie ich arbeite%s!
%s <b>Wenn du mich für sinnvoll hälst, oder vielleicht nur helfen willst?</b> Spenden sind willkommen, benutze /donate für mehr Information!
]],
['24'] = 'in'
},
['id'] = {
['1'] = 'Ich kann den Benutzer nicht erkennen. Wenn du mich lehren möchtest wer dieser Benutzer ist, dann leite einfach eine Nachricht von diesem Benutzer in eine Gruppe in der ich auch bin .',
['2'] = 'Abgefragte Unterhaltung:',
['3'] = 'Diese Unterhaltung:',
['4'] = 'Klick zum senden des Ergebnis!'
},
['imdb'] = {
['1'] = 'Vorherige',
['2'] = 'Nächste',
['3'] = 'Du bist auf Seite %s von %s!'
},
['import'] = {
['1'] = 'Ich kann die Unterhaltung nicht erkennen!',
['2'] = 'Dies ist keine Supergruppe, des wegen kann ich keine Einstellungen von da importieren!',
['3'] = 'Administrative Einstellungen erfolgreich importiert und ich habe die Plugins umgeschaltet von %s zu %s!'
},
['info'] = {
['1'] = [[
```
Redis:
%s Konfigurationsdatei: %s
%s Modus: %s
%s TCP Port: %s
%s Version: %s
%s Betriebszeit: %s Tage
%s Verarbeitete Identifikationsnummern: %s
%s Abgelaufene Schlüssel: %s
%s Benutzeranzahl: %s
%s Gruppenanzahl: %s
System:
%s OS: %s
```
]]
},
['instagram'] = {
['1'] = '@%s in Instagram'
},
['ipsw'] = {
['1'] = '<b>%s</b> iOS %s\n\n<code>MD5 sum: %s\nSHA1 sum: %s\nFile size: %s GB</code>\n\n<i>%s %s</i>',
['2'] = 'Diese Firmware ist nicht mehr signiert!',
['3'] = 'Diese Firmware ist noch signiert!',
['4'] = 'Bitte wähle dein Model:',
['5'] = 'Bitte wähle deine Firmware Version:',
['6'] = 'Bitte wähle deinen Geräte Typ:',
['7'] = 'iPod Touch',
['8'] = 'iPhone',
['9'] = 'iPad',
['10'] = 'Apple TV'
},
['ispwned'] = {
['1'] = 'Dieses Konto wurde in folgenden undichten Stellen gefunden:'
},
['itunes'] = {
['1'] = 'Name:',
['2'] = 'Artist:',
['3'] = 'Album:',
['4'] = 'Track:',
['5'] = 'Disc:',
['6'] = 'Die orginale Frage kann nicht gefunden werden. Du hast wahrscheinlich den orginalen Text gelöscht.',
['7'] = 'Das Kunstwerk kann weiter unten gefunden werden:',
['8'] = 'Bitte gebe einen Suchbegriff ein (das ist, was ich in iTunes für dich suchen soll, d.h. "Green Day American Idiot" gibt dir das erste Ergebnis von American Idiot von Green Day).',
['9'] = 'Bekomme Album Kunstwerke'
},
['kick'] = {
['1'] = 'Welchen Benutzer soll ich raus werfen? Du kannst ihn/sie mit dem @Benutzernamen oder mit der Identifikationsnummer angeben.',
['2'] = 'Ich kann den Benutzer nicht raus werfen, weil er/sie Moderator oder Administrator in dieser Gruppe ist.',
['3'] = 'Ich kann den Benutzer nicht raus werfen, weil er/sie hat die Gruppe schon verlassen hat.',
['4'] = 'Ich kann den Benutzer nicht raus werfen, weil er/sie schon von der Gruppe entfernt wurde.',
['5'] = 'Ich brauche administrative Berechtigung zum raus werfen des Benutzers. Bitte behebe das Problem und versuche es noch einmal.'
},
['lastfm'] = {
['1'] = '%s\'s last.fm Benutzername wurde zu "%s" gesendet.',
['2'] = 'Dein last.fm Benutzername wurde vergessen!',
['3'] = 'Im Moment hast du keinen last.fm Benutzernamen!',
['4'] = 'Bitte gebe deinen letzten last.fm Benutzernamen an oder richte ihn mit /fmset ein.',
['5'] = 'Keine Vergangenheit für diesen Benutzer gefunden.',
['6'] = '%s hört im Moment:\n',
['7'] = '%s hörte zuletzt:\n',
['8'] = 'Unbekannt',
['9'] = 'Klick zum senden des Ergebnis.'
},
['location'] = {
['1'] = 'Du hast keinen Standort angegeben. Welchen Standort möchtest du haben?'
},
['logchat'] = {
['1'] = 'Bitte gebe den Benutzernamen oder die Identifikationsnummer der Unterhaltung an, in welche du alle administrativen Handlungen senden möchtest.',
['2'] = 'Überprüfe ob die Unterhaltungen gültig ist...',
['3'] = 'Tut mir leid aber es sieht so aus, also ob du eine ungültige Unterhaltung, oder eine Unterhaltung in der ich nicht drin bin, angegeben hast. Bitte behebe das Problem und versuche es noch einmal.',
['4'] = 'Du kannst keinen Benutzer als logchat angeben!',
['5'] = 'Es sieht so aus, also ob du kein Administrator der Unterhaltung bistt!',
['6'] = 'Es sieht so aus, als ob ich schon administrative Handlungsrechte in dieser Gruppe besitze. Wenn du mir administrative Handlungsrechte in einer anderen Gruppe geben willst benutze /logchat.',
['7'] = 'Diese Unterhaltung ist gültig. Ich werde nun einen Testtext zu der Unterhaltung schicken, um zu sehen ob ich die Genehmigung zum schreiben habe!',
['8'] = 'Hallo, Welt - dies ist ein Testext zum herausfinden ob ich die Gehnemigung zum schreiben habe - wenn du das liest, dann ist alles OK!',
['9'] = 'Alles fertig! Von nun an alle administrativen Handlungen werden auch zu %s gesendet - zum ändern der Unterhaltung, in die du administrative Handlungen senden möchtest, sende /logchat.'
},
['lua'] = {
['1'] = 'bitte gebe eine Reihe von Lua ein zum ausführen!'
},
['lyrics'] = {
['1'] = 'Spotify',
['2'] = 'Zeige Liedtext',
['3'] = 'Bitte gebe einen Suchbegriff ein (das ist, zu welchem Lied/Sänger/Gruppe ich den Liedtext suchen soll, d.h. "Green Day Basket Case" gibt dir den Liedtext zu dem Lied song Basket Case von Green Day).'
},
['minecraft'] = {
['1'] = '<b>%s hat den Benutzernamen %s mal gewechselt</b>',
['2'] = '<b>%s hat den Benutzernamen %s mal gewechselt</b>',
['3'] = 'Vorherige',
['4'] = 'Nächste',
['5'] = 'Zurück',
['6'] = 'UUID',
['7'] = 'BenutzerBild',
['8'] = 'Benutzername Vergangenheit',
['9'] = 'Bitte wähle eine Option:',
['10'] = 'Bitte gebe den Benutzernamen des Minecraft Spielers an, für welchen du Informationen sehen möchtest (d.h. wen du "Notch" sendest kannst du die Informationen von dem Spieler Notch einsehen).',
['11'] = 'Minecraft Benutzernamen sind zwischen 3 und 16 Zeichen lang.'
},
['mute'] = {
['1'] = 'Welchen Benutzer soll ich stumm schalten? Du kannst den Benutzer mit dem @Benutzername oder mit der Indetifikationsnummer angeben.',
['2'] = 'Ich kann den Benutzer nich stumm schalten, weil der Benutzer in dieser Unterhaltung schon stumm geschaltet ist.',
['3'] = 'Ich kann den Benutzer nich stumm schalten, weil der Benutzer in dieser Unterhaltung Moderator oder Administrator ist.',
['4'] = 'Ich kann den Benutzer nich stumm schalten, weil der Benutzer diese Unterhaltung schon verlassen hat oder rausgeworfen wurde.',
['5'] = 'Zum stumm schalten des Benutzers muss ich Administrationsrechte haben. Bitte ändere meine Rechte und versuche es noch einmal.'
},
['myspotify'] = {
['1'] = 'Profil',
['2'] = 'Folgende',
['3'] = 'Vor kurzem gespielt',
['4'] = 'Derzeit spielen',
['5'] = 'Top Lieder',
['6'] = 'Top Künstler',
['7'] = 'Es sieht nicht so aus, als würdest du einem Künstler folgen!',
['8'] = 'Dein Top Künstler',
['9'] = 'Es sieht so aus, als würdest du keine Lieder in deiner Sammlung haben!',
['10'] = 'Deine Top Lieder',
['11'] = 'Es sieht nicht so aus, als würdest du einem Künstler folgen!',
['12'] = 'Künstler denen du folgst',
['13'] = 'Es sieht nicht so aus als hättest du vor kurzem irgendwelche lieder gespielt!',
['14'] = '<b>Vor kurzem gespielt</b>\n%s %s\n%s %s\n%s Gehört um %s:%s am %s/%s/%s.',
['15'] = 'Deine Anfrage wurde akzeptiert aber die Bearbeitung wurde noch nicht beendet.',
['16'] = 'Es sieht nicht so aus als würdest du dir im moment etwas anhören!',
['17'] = 'Derzeit spielen',
['18'] = 'Beim erneuten Autorisieren deines Spotify Accounts ist ein Fehler aufgetreten!',
['19'] = 'Dein Spotify Account wurde erneut erfolgreich Autorisiert! Deine orginal Anfrage wird bearbeitet...',
['20'] = 'Erneutes Autorisieren deines Spotify Accounts, bitte warten...',
['21'] = 'Zum verbinden deines Spotify Accounts musst du mattata autorisieren. Klick [hier](https://accounts.spotify.com/en/authorize?client_id=%s&response_type=code&redirect_uri=%s&scope=user-library-read,playlist-read-private,playlist-read-collaborative,user-read-private,user-read-email,user-follow-read,user-top-read,user-read-playback-state,user-read-recently-played,user-read-currently-playing,user-modify-playback-state) and press the green "OKAY" button to link mattata to your Spotify account. After you\'ve done that, send the link you were redirected to (it should begin with "%s", followed by a unique code) in reply to this message.',
['22'] = 'Wiedergabeliste',
['23'] = 'Benutze Inline Mode',
['24'] = 'Lyrics',
['25'] = 'Keine Geräte gefunden.',
['26'] = 'Es sieht so aus, als wenn du keine Wiedergabeliste hast.',
['27'] = 'Deine Wiedergabeliste',
['28'] = '%s %s [%s Lieder]',
['29'] = '%s %s [%s]\nSpotify %s Benutzer\n\n<b>Gerät:</b>\n%s',
['30'] = 'Spiele vorheriges Lied...',
['31'] = 'Du bist kein Premium Benutzer!',
['32'] = 'Ich kann keine Geräte finden.',
['33'] = 'Spiele nächstes Lied...',
['34'] = 'Lied wird fortgesetzt...',
['35'] = 'Dein Gerät ist im moment nicht erreichbar...',
['36'] = 'Keine Geräte gefunden!',
['37'] = 'Pause Lied...',
['38'] = 'Jetzt spielen',
['39'] = 'Mixe deine Musik...',
['40'] = 'Das ist keine gültig Lautstärke. Gebe bitte eine Nummer zwischen 0 und 100 an.',
['41'] = 'Die Lautstärke wurde auf %s%% eingestellt!',
['42'] = 'Dies Nachricht benutzt ein altes Plugin, zum anfragen eines neues bitte sende /myspotify!'
},
['name'] = {
['1'] = 'Der Name auf den ich im moment antworte ist "%s" - zum ändern, benutze /name <text> ( <text> ist der Name auf den du willst, dass ich andworte).',
['2'] = 'Mein neuer Name muss zwischen 2 und 32 Buchstaben lang sein!',
['3'] = 'Mein Name kann nur aus Buchstaben bestehen!',
['4'] = 'Ich antworten nun auf "%s", und nicht mehr auf "%s" - zum ändern, benutze /name <text> ( <text> ist der Name auf den du willst, dass ich andworte).'
},
['netflix'] = {
['1'] = 'Mehr lesen.'
},
['news'] = {
['1'] = '"<code>%s</code>" ist kein gültiges Lua Muster.',
['2'] = 'Ich konnte keine Quellenliste bekommen.',
['3'] = '<b>Nachrichtenquelle gefunden zu</b> "<code>%s</code>":\n\n%s',
['4'] = '<b>Hier sind die aktuellen verfügbaren Nachrichtenquellen, welche du mit</b> /news<b> benutzen kannst. Benutze</b> /nsources &lt;query&gt; <b>zum durchsuchen der Liste von Nachrichtenquellen für ein besseres Ergebnis. Die suche wird abgestimmt mit den Lua Mustern</b>\n\n%s',
['5'] = 'Du hast keine bevorzugte Nachrichtenquelle. Benutze /setnews <Quelle>. Zum ansehen einer Quellenliste benutze /nsources, oder beschränke das Ergebnis mit /nsources <Abfrage>.',
['6'] = 'Deine derzeit bevorzugte Nachrichtenquelle ist %s. Zum ändern benutze /setnews <Quelle>.Zum ansehen einer Quellenliste benutze /nsources, oder beschränke das Ergebnis mit /nsources <Abfrage>.',
['7'] = 'Deine derzeit bevorzugte Nachrichtenquelle ist %s! Zum ansehen der derzeiting Top Story benutze /news.',
['8'] = 'Dies ist keine gültige Nachrichtenquelle. Zum ansehen einer Quellenliste benutze /nsources, oder beschränke das Ergebnis mit /nsources <Abfrage>.',
['9'] = 'Deine bevorzugte Nachrichtenquelle wurde zu %s aktualisiert! Zum ansehen der derzeiting Top Story benutze /news.',
['10'] = 'Dies ist keine gültige Nachrichtenquelle. Zum ansehen einer Quellenliste benutze /nsources. Wenn du eine bevorzugte Nachrichtenquelle hast benutze /setnews <Quelle> und do bekommst automatisch von dieser Quelle Nachrichten geschickt wenn du /news sendest.',
['11'] = 'Mehr lesen.'
},
['nick'] = {
['1'] = 'Dein Spitzname is vergessen!',
['2'] = 'Dein Spitzname wurde geändert zu "%s"!'
},
['optout'] = {
['1'] = 'Du bist opted-in(beigetreten), dass die Daten, welche du sendest, gesammelt werden! Benutze /optout zum opt-out(austreten).',
['2'] = 'Du bist opted-out(ausgetreten), dass die Daten, welche du sendest, gesammelt werden! Benutze /optin zum opt-in(beitreten).'
},
['paste'] = {
['1'] = 'Bitte suche einen Service aus zum hochladen und einfügen deines Textes:'
},
['pay'] = {
['1'] = 'Du hast im Moment %s mattacoins. Verdiene mehr wenn du das Spiel Tic-Tac-Toe gewinnst. Benutze /game - Du gewinnst 100 mattacoins für jedes gewonnene Spiel und du verlierst 50 für jedes verlorene Spiel.',
['2'] = 'Du musst diesen Befehl benutzen als Antwort zu dem Benutzer dem du mattacoins senden willst.',
['3'] = 'Bitte gebe die Menge der mattacoins an, welche du zu %s senden möchtest.',
['4'] = 'Die Menge sollte in einer Zahl angegeben sein, welche nicht kleiner als 0 sein kann.',
['5'] = 'Du kannst kein Geld zu dir selbst schicken!',
['6'] = 'Du hast nicht genug Guthaben zum durchführen der Transaktion!',
['7'] = '%s mattacoins wurden gesendet zu %s. Dein neues Guthaben ist %s mattacoins.'
},
['pin'] = {
['1'] = 'Du hast noch keinen pin gesetzt. Benutze /pin <dein Text> um deinen Text zu pinnen. Markdown formatierung ist verfügbar.',
['2'] = 'Hier ist die letzte nachricht die mit /pin generiert wurde',
['3'] = 'Ich habe einen bereits existierenden pin in meiner Datenbank gefunden, aber die nachricht, die ich bereits gesendet habe, aber sie wurde gelöscht, und ich finde sie nicht mehr. Benutze /pin <dein Text> um deinen Text zu pinnen. Markdown formatierung ist verfügbar.',
['4'] = 'Es ist ein fehler bei der aktualisierung deines pins aufgetreten. Vielleicht hat dein Text eine ungültige Markdown formatierung, oder sie wurde gelöscht. Ich versuche dir einen neuen pin zu senden, welchen du unten findest - falls du es ändern möchtest, wenn die nachricht noch existiert, benutze /pin <dein text>.',
['5'] = 'Ich kann den text nicht senden weil er eine ungültige Markdown formatierung hat.',
['6'] = 'Klick hier um den pin zu sehen, aktualisiert mit dem Text den du mir gegeben hast.'
},
['pokedex'] = {
['1'] = 'Name: %s\nID: %s\nArt: %s\nBeschreibung: %s'
},
['prime'] = {
['1'] = 'Bitte gebe eine Zahl zwischen 1 und 99999 ein.',
['2'] = '%s ist eine Primzahl!',
['3'] = '%s ist KEINE Primzahl...'
},
['promote'] = {
['1'] = 'Ich kann diesen Benutzer nicht beförderen, weil er/sie Moderator oder Administrator in dieser Gruppe ist.',
['2'] = 'Ich kann diesen Benutzer nicht beförderen, weil er/sie hat die Gruppe schon verlassen hat.',
['3'] = 'Ich kann diesen Benutzer nicht beförderen, weil er/sie schon von der Gruppe entfernt wurde.'
},
['quote'] = {
['1'] = 'Dieser Benutzer ist opted out(ausgetreten) von der Datensammlung funktionalität.',
['2'] = 'Da sind keine Zitate von %s%s! Du kannst Zitate speichern wenn du /save als Antwort zu dem gesendeten text(welchen du als Zitat speichern willst).'
},
['randomsite'] = {
['1'] = 'Generiere nochmal'
},
['randomword'] = {
['1'] = 'Generiere nochmal',
['2'] = 'Dein zufälliges Wort ist <b>%s</b>!'
},
['report'] = {
['1'] = 'Bitte Antworte zu der Nachricht die du einem GruppenAdminsitrator melden möchtest.',
['2'] = 'Du kannst deine eigenen Nachrichten nicht melden, machst du vielleicht Witze?',
['3'] = '<b>%s braucht Hilfe in %s!</b>',
['4'] = 'Klicke hier zum ansehen der gemeldeten Nachricht.',
['5'] = 'Ich habe die Nachricht erfolgreich gemeldet zu %s admin(s)!'
},
['rms'] = {
['1'] = 'Heiliges GNU!'
},
['save'] = {
['1'] = 'Dieser Benutzer ist opted out(ausgetreten) von der Datensammlung funktionalität.',
['2'] = 'Dieser Text ist gespeichert in meiner Datei und wird zu der List möglicher Antworten hinzugefügt, wenn /quote benutzt wird als Antwort zu %s%s!'
},
['sed'] = {
['1'] = '%s\n\n<i>%s wollte das nicht sagen!</i>',
['2'] = '%s\n\n<i>%s hat zugegeben verloren zu haben.</i>',
['3'] = '%s\n\n<i>%s ist sich nicht sicher obe er/sie missverstanden ist...</i>',
['4'] = 'Ach halt die Klappe, <i>wann habe ich jemals nicht recht?</i>',
['5'] = '"<code>%s</code>" ist kein gültiges Lua Muster.',
- ['6'] = '<b>Hallo, %s, meintest du:</b>\n<i>%s</i>',
+ ['6'] = 'Hey %s, %s seems to think you meant:\n<i>%s</i>',
['7'] = 'Ja',
['8'] = 'Nein',
- ['9'] = 'Bin nicht sicher'
+ ['9'] = 'Bin nicht sicher',
+ ['10'] = 'Just edit your message, idiot.'
},
['setgrouplang'] = {
['1'] = 'Die Sprache in dieser Gruppe wurde eingstellet zu %s!',
['2'] = 'Die Sprache in dieser Gruppe ist im moment %s.\nBitte nehme zur Kenntnis, dass vielleicht noch nicht alles vollständig Übersetzt ist. Wenn du die Sprache ändern möchtest, wähle unten auf der Tastatur eine aus:',
['3'] = 'Die Möglichkeit, dass alle Benutzer in dieser Gruppe die selbe Sprache benutzent müssen, ist im moment ausgeschaltet. Diese Einstellung sollte von /administration eingestellet werden, damit es einfacher ist für dich, habe ich unten Knöpfe zum einstellen hinzugefügt.',
['4'] = 'Einschalten',
['5'] = 'Ausschalten'
},
['setlang'] = {
['1'] = 'Deine Sprache wurde eingestellt zu %s!',
['2'] = 'Deine Sprache ist im Moment eingestellt zu %s.\nBitte beachte, dass manche Wörter oder Sätze noch nicht übersetzet sind. Wenn du deine Sprache ändern möchtest, suche dir eine aus in der Tastatur unten:'
},
['setlink'] = {
['1'] = 'Das ist keine gültige URL.',
['2'] = 'Link erfolgreich gesetzt!'
},
['setrules'] = {
['1'] = 'Ungültige Markdown-Formatierung.',
['2'] = 'Neue Regeln erfolgreich eingestellt!'
},
['setwelcome'] = {
['1'] = 'Was möchtest als Willkommens Text haben? Den angegebenen Text wird formatiert und jedesmal gesendet, wenn ein Benutzer der Gruppe beitritt (Der Willkommens Text kann ausgeschaltet werden im Administrations Menue, erreichbar mit /administration). Du kannst Platzhalter benutzen für einen individuellen Willkommens Text für jeden Benutzer. Benutze $user_id zum einfügen des Benutzers Identifikationsnummer, $chat_id zum einfügen der Gruppen Identifikationsnummer, $name zum einfügen des Benutzers name, $title zum einfügen des Gruppennamen und $username zum einfügen des Benutzers Benutzername (wenn der Benutzer keinen @Benutzernamen hat, wird deren Name benutzt, also ist es das beste, dieses zu vermeiden mit der Benutzung von $name).',
['2'] = 'Da ist ein Fehler mit dem Format deines Textes aufgetreten. Bitte Überprüfe die Syntax und versuche es noch einmal.',
['3'] = 'Der Willkommens Text für %s wurde erfolgreich aktualisiert!'
},
['share'] = {
['1'] = 'Teilen'
},
['shorten'] = {
['1'] = 'Bitte wähle einen URL Verkürzer aus mit den Buttons unten:'
},
['shsh'] = {
['1'] = 'Für den ECID konnte ich keine SHSH blobs holen. Bitte mache sicher, dass sie gültig sind und das to sie gespeichert hast auf https://tsssaver.1conan.com.',
['2'] = 'SHSH blobs sind verfügbar für das Gerät mit der folgenden Version von iOS:\n',
['3'] = 'Download .zip'
},
['statistics'] = {
['1'] = 'Es wurden keine Nachrichten in dieser Unterhaltung gesendet!',
['2'] = '<b>Statistiken für:</b> %s\n\n%s\n<b>Summe der gesendeten Nachrichten:</b> %s',
['3'] = 'Die Statistiken für diese Unterhaltung wurde gelöscht!',
['4'] = 'Ich konnte die Statistiken für dies Unterhaltung nicht löschen. Vielleicht wurde sie schon gelöscht?'
},
['steam'] = {
['1'] = 'Dein Steam Benutzername wurde gespeichert mit "%s".',
['2'] = '"%s" ist kein gültiger Steam Benutzername.',
['3'] = '%s ist ein Steam Benutzer seit %s, in %s. Er/Sie hat sich das letzte mal ausgelogt am %s, in %s. Klick <a href="%s">here</a> zum ansehen von deren Steam Profil.',
['4'] = '%s, alias "%s",'
},
['synonym'] = {
['1'] = 'Du könntest das Wort <b>%s</b> benutzen, wäre besser als %s.'
},
['thoughts'] = {
['1'] = '%s\n\nPositive: <code>%s%% [%s]</code>\nNegative: <code>%s%% [%s]</code>\nGleichgültige: <code>%s%% [%s]</code>\nSumme Gedanken: <code>%s</code>'
},
['tobinary'] = {
['1'] = 'Bitte gebe ein Wort oder Satz ein, welchen du umwandeln willst zu Binary.'
},
['trust'] = {
['1'] = 'Ich kann den Benutzer nicht zu trust(vertrauen) einstellen, weil er Moderator oder Administrator in dieser Gruppe ist.',
['2'] = 'Ich kann den Benutzer nicht zu trust(vertrauen) einstellen, weil er die Gruppe schon verlassen hat.',
['3'] = 'Ich kann den Benutzer nicht zu trust(vertrauen) einstellen, weil er von dieser Gruppe entfernt wurde.'
},
['unmute'] = {
['1'] = 'Welchen Benutzer soll ich zu Stören einstellen? Gebe den Benutzer mit dem @Benutzername oder der Identifikationsnummer an.',
['2'] = 'Ich kann den Benutzer nicht zu Stören einstellen, weil er im moment nicht stumm geschalted ist..',
['3'] = 'Ich kann den Benutzer nicht zu Stören einstellen, weil er Moderator oder Administrator dieser Gruppe ist.',
['4'] = 'Ich kann den Benutzer nicht zu Stören einstellen, weil er die Gruppe schon verlassen hat oder von der Gruppe entfernt wurde.'
},
['untrust'] = {
['1'] = 'Welchen Benutzer soll ich zu untrust(nicht vertrauen) einstellen? Gebe den Benutzer mit dem @Benutzername oder der Identifikationsnummer an.',
['2'] = 'Ich kann den Benutzer nicht zu untrust(nicht vertrauen) einstellen, weil er Moderator oder Administrator in dieser Gruppe ist.',
['3'] = 'Ich kann den Benutzer nicht zu untrust(nicht vertrauen) einstellen, weil er die Gruppe schon verlassen hat.',
['4'] = 'Ich kann den Benutzer nicht zu untrust(nicht vertrauen) einstellen, weil er von dieser Gruppe entfernt wurde.'
},
['upload'] = {
['1'] = 'Bitte antworte zu der Datei, welche du hochlanden willst zum Server. Sie muss <= 20 MB sein.',
['2'] = 'Die Datei ist zu groß. Sie muss <= 20 MB sein.',
['3'] = 'Ich konnte die Datei nicht bekommen, wahrscheinlich ist sie zu alt.',
['4'] = 'Es ist ein Fehler aufgetreten beim abrufen der Datei.',
['5'] = 'Die Datei wurde erfolgreich hochgelanden zum Server - sie kan gefunden werden mit <code>%s</code>!'
},
['version'] = {
['1'] = '@%s alias %s `[%s]` läuft mit mattata %s, kreiert von [Matthew Hesketh](https://t.me/wrxck). Der Quellcode ist auf [GitHub](https://github.com/wrxck/mattata) zu bekommen.'
},
['voteban'] = {
['1'] = 'Für welchen Benutzer möchtest einen vote-ban(Wahl zur Sperre) eröffnen? Gebe den Benutzer mit dem @Benutzername oder der Identifikationsnummer an.',
['2'] = 'Ich kann keinen vote-ban(Wahl zur Sperre) für diesen Benutzer aufsetzen, weil er Moderator oder Administrator in dieser Gruppe ist.',
['3'] = 'Ich kann keinen vote-ban(Wahl zur Sperre) für diesen Benutzer aufsetzen, weil er die Gruppe schon verlassen hat oder von der Gruppe entfernt wurde.',
['4'] = 'Soll %s [%s] gesperrt werden von %s? %s dafür(Yes) werden gebraucht für eine sofortige Sperre und %s dagegen(No) werden gebraucht zum sofortigen schliessen der Wahl.',
['5'] = 'Ja [%s]',
['6'] = 'Nein [%s]',
['7'] = 'Die Leute haben gesprochen. Ich have %s [%s] von %s gesperrt, weil %s Leute dafür gewählt haben.',
['8'] = 'Der erfordliche Anzahl dafür wurde erreicht, aber es war mir nicht möglich %s zu sperren - vielleicht hat er/sie die Gruppe schon verlassen oder wurde befördert seit die Wahl eröffnet wurde? Es ist entweder das, oder ich habe keine Administrationsrechte mehr.',
['9'] = 'Die Leute haben gesprochen. Ich habe %s [%s] nicht von %s gesperrt, weil %s Leute dagegen gewählt haben.',
['10'] = 'Du hast dafür gewählt %s [%s] zu sperren!',
['11'] = 'Deine Wahl wurde zurückgezogen,zum eingeben einer neuen Wahl benutze die Knöpfe nocheinmal.',
['12'] = 'Du hast dagegen gewählt %s [%s] zu sperren!',
['13'] = 'Eine Wahl zum bannen des Benutzers wurde schon eröffnet!'
},
['weather'] = {
['1'] = 'Du hast keinen Standort ausgewählt. Zum auswählen benutze /setloc <Standort>.',
['2'] = 'Im Moment ist es %s (fühlt sich an wie %s) in %s. %s'
},
['welcome'] = {
['1'] = 'Group Rules'
},
['allowlist'] = {
['1'] = 'Welchen Benutzer soll ich auf die Weiße Liste setzen? Gebe den Benutzer mit dem @Benutzername oder der Identifikationsnummer an.',
['2'] = 'Ich kann den Benutzer nicht auf die Weiße Liste setzen, weil er Moderator oder Administrator in dieser Gruppe ist.',
['3'] = 'Ich kann den Benutzer nicht auf die Weiße Liste setzen, weil er die Gruppe schon verlassen hat.',
['4'] = 'Ich kann den Benutzer nicht auf die Weiße Liste setzen, weil er von der Gruppe entfernt wurde.'
},
['wikipedia'] = {
['1'] = 'Mehr lesen.'
},
['youtube'] = {
['1'] = 'Vorherige',
['2'] = 'Nächste',
['3'] = 'Du bist auf Seite %s von %s!'
}
}
\ No newline at end of file
diff --git a/languages/en_us.lua b/languages/en_us.lua
index 97a85f9..85c5346 100644
--- a/languages/en_us.lua
+++ b/languages/en_us.lua
@@ -1,813 +1,814 @@
-- This is a language file for mattata
-- Language: en-us
-- Author: wrxck
-- DO NOT CHANGE ANYTHING THAT BEGINS OR ENDS WITH A %
-- THESE ARE PLACEHOLDERS!
-- DO NOT CHANGE ANY MARKDOWN/HTML FORMATTING!
-- IF YOU ARE UNSURE, ASK ON TELEGRAM (t.me/mattataDev)
return {
['errors'] = {
['connection'] = 'Connection error.',
['results'] = 'I couldn\'t find any results for that.',
['supergroup'] = 'This command can only be used in supergroups.',
['admin'] = 'You need to be a moderator or an administrator in this chat in order to use this command.',
['unknown'] = 'I don\'t recognize that user. If you would like to teach me who they are, forward a message from them to any chat that I\'m in.',
['generic'] = 'An error occured!',
['use'] = 'You are not allowed to use this!',
['private'] = 'You can only use this command in private chat!'
},
['addcommand'] = {
['1'] = 'Please specify the command in the format <code>/command - description</code>',
['2'] = 'I couldn\'t retrieve my commands!',
['3'] = 'The command description can\'t be longer than 256 characters!',
['4'] = 'An unknown error occurred! I couldn\'t add your command!',
['5'] = 'Success! Command added.'
},
['addrule'] = {
['1'] = 'Please specify the rule you would like to add!',
['2'] = 'You don\'t have any rules to add to! Please set group rules using /setrules!',
['3'] = 'I couldn\'t add that rule, as it would make the length of the rules longer than Telegram\'s 4096 character limit!',
['4'] = 'I couldn\'t add that rule, it appears it contains invalid Markdown formatting!',
['5'] = 'Successfully updated the rules!'
},
['addslap'] = {
['1'] = 'You can only use this command in groups!',
['2'] = 'The slap cannot contain curly braces apart from placeholders!',
['3'] = 'The slap cannot be any longer than 256 characters in length!',
['4'] = 'I\'ve successfully added that slap as a possibility for /slap in this group!',
['5'] = 'You must include placeholders in your slap. Use {ME} for the person executing and {THEM} for the victim.'
},
['administration'] = {
['1'] = 'Enable Administration',
['2'] = 'Disable Administration',
['3'] = 'Anti-Spam Settings',
['4'] = 'Warning Settings',
['5'] = 'Vote-Ban Settings',
['6'] = 'Welcome New Users?',
['7'] = 'Send Rules On Join?',
['8'] = 'Send Rules In Group?',
['9'] = 'Back',
['10'] = 'Next',
['11'] = 'Word Filter',
['12'] = 'Anti-Bot',
['13'] = 'Anti-Link',
['14'] = 'Log Actions?',
['15'] = 'Anti-RTL',
['16'] = 'Anti-Spam Action',
['17'] = 'Ban',
['18'] = 'Kick',
['19'] = 'Delete Commands?',
['20'] = 'Force Group Language?',
['21'] = 'Send Settings In Group?',
['22'] = 'Delete Reply On Action?',
['23'] = 'Require Captcha?',
['24'] = 'Use Inline Captcha?',
['25'] = 'Ban SpamWatch-flagged users?',
['26'] = 'Number of warnings until %s:',
['27'] = 'Upvotes needed to ban:',
['28'] = 'Downvotes needed to dismiss:',
['29'] = 'Deleted %s, and its matching link from the database!',
['30'] = 'There were no entries found in the database matching "%s"!',
['31'] = 'You\'re not an administrator in that chat!',
['32'] = 'The minimum number of upvotes required for a vote-ban is %s.',
['33'] = 'The maximum number of upvotes required for a vote-ban is %s.',
['34'] = 'The minimum number of downvotes required for a vote-ban is %s.',
['35'] = 'The maximum number of downvotes required for a vote-ban is %s.',
['36'] = 'The maximum number of warnings is %s.',
['37'] = 'The minimum number of warnings is %s.',
['38'] = 'You can add one or more words to the word filter by using /filter <word(s)>',
['39'] = 'You will no longer be reminded that the administration plugin is disabled. To enable it, use /administration.',
['40'] = 'That\'s not a valid chat!',
['41'] = 'You don\'t appear to be an administrator in that chat!',
['42'] = 'My administrative functionality can only be used in groups/channels! If you\'re looking for help with using my administrative functionality, check out the "Administration" section of /help! Alternatively, if you wish to manage the settings for a group you administrate, you can do so here by using the syntax /administration <chat>.',
['43'] = 'Use the keyboard below to adjust the administration settings for <b>%s</b>:',
['44'] = 'Please send me a [private message](https://t.me/%s), so that I can send you this information.',
['45'] = 'I have sent you the information you requested via private chat.',
['46'] = 'Remove Channel Pins?',
['47'] = 'Remove Other Pins?',
['48'] = 'Remove Pasted Code?',
['49'] = 'Prevent Inline Bots?',
['50'] = 'Kick Media On Join?',
['51'] = 'Enable Plugins For Admins?',
['52'] = 'Kick URLs On Join?'
},
['afk'] = {
['1'] = 'Sorry, I\'m afraid this feature is only available to users with a public @username!',
['2'] = '%s has returned after being AFK for %s!',
['3'] = 'Note',
['4'] = '%s is now AFK.%s'
},
['antispam'] = {
['1'] = 'Disable',
['2'] = 'Enable',
['3'] = 'Disable limit',
['4'] = 'Enable limits on %s',
['5'] = 'All Administration Settings',
['6'] = '%s [%s] has kicked %s [%s] from %s [%s] for hitting the configured anti-spam limit for [%s] media.',
['7'] = 'Kicked %s for hitting the configured antispam limit for [%s] media.',
['8'] = 'The maximum limit is 100.',
['9'] = 'The minimum limit is 1.',
['10'] = 'Modify the anti-spam settings for %s below:',
['11'] = 'Hey %s, if you\'re going to send code that is longer than %s characters in length, please do so using /paste in <a href="https://t.me/%s">private chat with me</a>!',
['12'] = '%s <code>[%s]</code> has %s %s <code>[%s]</code> from %s <code>[%s]</code> for sending Telegram invite link(s).\n#chat%s #user%s',
['13'] = '%s %s for sending Telegram invite link(s).',
['14'] = 'Hey, I noticed you\'ve got anti-link enabled and you\'re currently not allowing your users to mention a chat you\'ve just mentioned, if you\'d like to allowlist it, use /allowlink <links>.',
['15'] = 'Kicked %s <code>[%s]</code> from %s <code>[%s]</code> for sending media within their first few messages.\n#chat%s #user%s',
['16'] = 'Kicked %s <code>[%s]</code> from %s <code>[%s]</code> for sending a URL within their first few messages.\n#chat%s #user%s',
['17'] = 'Action',
['18'] = 'Kick',
['19'] = 'Ban',
['20'] = 'Mute'
},
['appstore'] = {
['1'] = 'View on iTunes',
['2'] = 'rating',
['3'] = 'ratings'
},
['authspotify'] = {
['1'] = 'You are already authorised using that account.',
['2'] = 'Authorising, please wait...',
['3'] = 'A connection error occured. Are you sure you replied with the correct link? It should look like',
['4'] = 'Successfully authorised your Spotify account!'
},
['avatar'] = {
['1'] = 'I couldn\'t retrieve the profile photos for that user, please ensure you specified a valid username or numerical ID.',
['2'] = 'That user doesn\'t have any profile photos.',
['3'] = 'That user doesn\'t have that many profile photos!',
['4'] = 'That user has opted-out of data-collecting functionality, therefore I am not able to show you any of their profile photos.',
['5'] = 'User: %s\nPhoto: %s/%s\nSend /avatar %s [offset] to @%s to view a specific photo of this user',
['6'] = 'User: %s\nPhoto: %s/%s\nUse /avatar %s [offset] to view a specific photo of this user'
},
['ban'] = {
['1'] = 'Which user would you like me to ban? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot ban this user because they are a moderator or an administrator in this chat.',
['3'] = 'I cannot ban this user because they have already left this chat.',
['4'] = 'I cannot ban this user because they have already been banned from this chat.',
['5'] = 'I need to have administrative permissions in order to ban this user. Please amend this issue, and try again.',
['6'] = '%s <code>[%s]</code> has banned %s <code>[%s]</code> from %s <code>[%s]</code>%s.\n%s %s',
['7'] = '%s has banned %s%s.'
},
['bash'] = {
['1'] = 'Please specify a command to run!',
['2'] = 'Success!'
},
['blocklist'] = {
['1'] = 'Which user would you like me to blocklist? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot blocklist this user because they are a moderator or an administrator in this chat.',
['3'] = 'I cannot blocklist this user because they have already left this chat.',
['4'] = 'I cannot blocklist this user because they have already been banned from this chat.',
['5'] = '%s <code>[%s]</code> has blocklisted %s <code>[%s]</code> from using %s <code>[%s]</code> in %s <code>[%s]</code>%s.\n%s %s',
['6'] = '%s has blocklisted %s from using %s%s.'
},
['blocklistchat'] = {
['1'] = '%s has now been blocklisted, and I will leave whenever I am added there!',
['2'] = '%s is a user, this command is only for blocklisting chats such as groups and channels!',
['3'] = '%s doesn\'t appear to be a valid chat!'
},
['bugreport'] = {
['1'] = 'Success! Your bug report has been sent. The ID of this report is #%s.',
['2'] = 'There was a problem whilst reporting that bug! Ha, the irony!'
},
['calc'] = {
['1'] = 'Click to send the result.',
['2'] = '"%s" was an unexpected word!',
['3'] = 'You cannot have a unit before a number!'
},
['captionbotai'] = {
['1'] = 'I really cannot describe that picture!'
},
['cats'] = {
['1'] = 'Meow!'
},
['channel'] = {
['1'] = 'You are not allowed to use this!',
['2'] = 'You don\'t appear to be an administrator in that chat anymore!',
['3'] = 'I couldn\'t send your message, are you sure I still have permission to send messages in that chat?',
['4'] = 'Your message has been sent!',
['5'] = 'I was unable to retrieve a list of administrators for that chat!',
['6'] = 'You don\'t appear to be an administrator in that chat!',
['7'] = 'Please specify the message to send, using the syntax /channel <channel> <message>.',
['8'] = 'Are you sure you want to send this message? This is how it will look:',
['9'] = 'Yes, I\'m sure!',
['10'] = 'That message contains invalid Markdown formatting! Please correct your syntax and try again.'
},
['chatroulette'] = {
['1'] = 'Hey! Please don\'t send messages longer than %s characters. We don\'t want to annoy the other user!',
['2'] = '*Anonymous said:*\n```\n%s\n```\nTo end your session, send /endchat.',
['3'] = 'I\'m afraid I lost connection from the other user! To begin a new chat, please send /chatroulette!',
['4'] = 'The other person you were chatting with has ended the session. To start a new one, send /chatroulette.',
['5'] = 'Successfully ended your session. To start a new one, send /chatroulette.',
['6'] = 'I have successfully removed you from the list of available users.',
['7'] = 'You don\'t have a session set up at the moment. To start one, send /chatroulette.',
['8'] = 'Finding you a session, please wait...',
['9'] = 'I\'m afraid there aren\'t any available users right now, but I have added you to the list of available users! To stop this completely, please send /endchat.',
['10'] = 'I have successfully paired you with another user to chat to! Please remember to be kind to them! To end the chat, send /endchat.',
['11'] = 'I\'m afraid the user who I tried to pair you with has since blocked me. Please try and send /chatroulette again to try and connect to me!',
['12'] = 'I have successfully paired you with another user to chat to! Please remember to be kind to them! To end the chat, send /endchat.'
},
['commandstats'] = {
['1'] = 'No commands have been sent in this chat!',
['2'] = '<b>Command statistics for:</b> %s\n\n%s\n<b>Total commands sent:</b> %s',
['3'] = 'The command statistics for this chat have been reset!',
['4'] = 'I could not reset the command statistics for this chat. Perhaps they have already been reset?'
},
['control'] = {
['1'] = 'Pfft, you wish!',
['2'] = '%s is reloading...'
},
['copypasta'] = {
['1'] = 'The replied-to text musn\'t be any longer than %s characters!'
},
['coronavirus'] = {
['1'] = [[*COVID-19 Statistics for:* %s
*New confirmed cases:* %s
*Total confirmed cases:* %s
*New deaths:* %s
*Total deaths:* %s
*New recovered cases:* %s
*Total recovered cases:* %s]]
},
['counter'] = {
['1'] = 'I couldn\'t add a counter to that message!'
},
['custom'] = {
['1'] = 'Success! That message will now be sent every time somebody uses %s!',
['2'] = 'The trigger "%s" does not exist!',
['3'] = 'The trigger "%s" has been deleted!',
['4'] = 'You don\'t have any custom triggers set!',
['5'] = 'Custom commands for %s:\n',
['6'] = 'To create a new, custom command, use the following syntax:\n/custom new #trigger <value>. To list all current triggers, use /custom list. To delete a trigger, use /custom del #trigger.'
},
['delete'] = {
['1'] = 'I could not delete that message. Perhaps the message is too old or non-existent?'
},
['demote'] = {
['1'] = 'Which user would you like me to demote? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot demote this user because they are not a moderator or an administrator in this chat.',
['3'] = 'I cannot demote this user because they have already left this chat.',
['4'] = 'I cannot demote this user because they have already been kicked from this chat.'
},
['dice'] = {
['1'] = 'The minimum range is %s.',
['2'] = 'The maximum range and count are both %s.',
['3'] = 'The maximum range is %s, and the maximum count is %s.',
['4'] = '%s rolls with a range of %s:\n'
},
['doge'] = {
['1'] = 'Please enter the text you want to Doge-ify. Each sentence should be separated using slashes or new lines.'
},
['donate'] = {
['1'] = '<b>Hello, %s!</b>\n\nIf you\'re feeling generous, you can contribute to the mattata project by making a monetary donation of any amount. This will go towards server costs and any time and resources used to develop mattata. This is an optional act, however it is greatly appreciated and your name will also be listed publically on mattata\'s GitHub page.\n\nIf you\'re still interested, you can donate <a href="https://paypal.me/wrxck">here</a>. Thank you for your continued support!'
},
['duckduckgo'] = {
['1'] = 'I\'m not sure what that is!'
},
['eightball'] = {
['1'] = 'Yes.',
['2'] = 'No.',
['3'] = 'It is likely so.',
['4'] = 'Well, uh... I\'d ask again later, if I were you.'
},
['exec'] = {
['1'] = 'Please select the language you would like to execute your code in:',
['2'] = 'An error occured! The connection timed-out. Were you trying to make me lag?',
['3'] = 'You have selected "%s" – are you sure?',
['4'] = 'Back',
['5'] = 'I\'m sure',
['6'] = 'Please enter a snippet of code that you would like to run. You don\'t need to specify the language, we will do that afterwards!',
['7'] = 'Please select the language you would like to execute your code in:'
},
['facebook'] = {
['1'] = 'An error occured!',
['2'] = 'Please enter the name of the Facebook user you would like to get the profile picture of.',
['3'] = 'View @%s on Facebook'
},
['fact'] = {
['1'] = 'Generate Another'
},
['fban'] = {
['1'] = 'Which user would you like me to Fed-ban? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot Fed-ban this user because they are a moderator or an administrator in this chat.'
},
['flickr'] = {
['1'] = 'You searched for:',
['2'] = 'Please enter a search query (that is, what you want me to search Flickr for, i.e. "Big Ben" will return a photograph of Big Ben in London).',
['3'] = 'More Results'
},
['fortune'] = {
['1'] = 'Click to send your fortune!'
},
['frombinary'] = {
['1'] = 'Please enter the binary value you would like to convert to a string.',
['2'] = 'Malformed binary!'
},
['game'] = {
['1'] = 'Total wins: %s\nTotal losses: %s\nBalance: %s mattacoins',
['2'] = 'Join Game',
['3'] = 'This game has already ended!',
['4'] = 'It\'s not your turn!',
['5'] = 'You are not part of this game!',
['6'] = 'You cannot go here!',
['7'] = 'You are already part of this game!',
['8'] = 'This game has already started!',
['9'] = '%s [%s] is playing against %s [%s]\nIt is currently %s\'s turn!',
['10'] = '%s won the game against %s!',
['11'] = '%s drew the game against %s!',
['12'] = 'Waiting for opponent...',
['13'] = 'Tic-Tac-Toe',
['14'] = 'Click to send the game to your chat!',
['15'] = 'Statistics for %s:\n',
['16'] = 'Play Tic-Tac-Toe!'
},
['gblocklist'] = {
['1'] = 'Please reply-to the user you\'d like to globally blocklist, or specify them by username/ID.',
['2'] = 'I couldn\'t get information about "%s", please check it\'s a valid username/ID and try again.',
['3'] = 'That\'s a %s, not a user!'
},
['gif'] = {
['1'] = 'Please enter a search query (that is, what you want me to search GIPHY for, i.e. "cat" will return a GIF of a cat).'
},
['godwords'] = {
['1'] = 'Please enter a numerical value, between 1 and 64!',
['2'] = 'That number is too small, please specify one between 1 and 64!',
['3'] = 'That number is too large, please specify one between 1 and 64!'
},
['gallowlist'] = {
['1'] = 'Please reply-to the user you\'d like to globally allowlist, or specify them by username/ID.',
['2'] = 'I couldn\'t get information about "%s", please check it\'s a valid username/ID and try again.',
['3'] = 'That\'s a %s, not a user!'
},
['hackernews'] = {
['1'] = 'Top Stories from Hacker News:'
},
['help'] = {
['1'] = 'No results found!',
['2'] = 'There were no features found matching "%s", please try and be more specific!',
['3'] = '\n\nArguments: <required> [optional]\n\nSearch for a feature or get help with a command by using my inline search functionality - just mention me in any chat using the syntax @%s <search query>.',
['4'] = 'Previous',
['5'] = 'Next',
['6'] = 'Back',
['7'] = 'Search',
['8'] = 'You are on page %s of %s!',
['9'] = [[
I can perform many administrative actions in your groups, just add me as an administrator and send /administration to adjust the settings for your group.
Here are some administrative commands and a brief comment regarding what they do:
• /pin <text> - Send a Markdown-formatted message which can be edited by using the same command with different text, to save you from having to re-pin a message if you can't edit it (which happens if the message is older than 48 hours)
• /ban - Ban a user by replying to one of their messages, or by specifying them by username/ID
• /kick - Kick (ban and then unban) a user by replying to one of their messages, or by specifying them by username/ID
• /unban - Unban a user by replying to one of their messages, or by specifying them by username/ID
• /setrules <text> - Set the given Markdown-formatted text as the group rules, which will be sent whenever somebody uses /rules
]],
['10'] = [[
• /setwelcome - Set the given Markdown-formatted text as a welcome message that will be sent every time a user joins your group (the welcome message can be disabled in the administration menu, accessible via /administration). You can use placeholders to automatically customise the welcome message for each user. Use $user\_id to insert the user's numerical ID, $chat\_id to insert the chat's numerical ID, $name to insert the user's name, $title to insert the chat title and $username to insert the user's username (if the user doesn't have an @username, their name will be used instead, so it is best to avoid using this with $name)
• /warn - Warn a user, and ban them when they hit the maximum number of warnings
• /mod - Promote the replied-to user, giving them access to administrative commands such as /ban, /kick, /warn etc. (this is useful when you don't want somebody to have the ability to delete messages!)
• /demod - Demote the replied-to user, stripping them from their moderation status and revoking their ability to use administrative commands
• /staff - View the group's creator, administrators, and moderators in a neatly-formatted list
]],
['11'] = [[
• /report - Forwards the replied-to message to all administrators and alerts them of the current situation
• /setlink <URL> - Set the group's link to the given URL, which will be sent whenever somebody uses /link
• /links <text> - Allowlists all of the Telegram links found in the given text (includes @username links)
]],
['12'] = 'Below are some links you might find useful:',
['13'] = 'Development',
['14'] = 'Channel',
['15'] = 'Support',
['16'] = 'FAQ',
['17'] = 'Source',
['18'] = 'Donate',
['19'] = 'Rate',
['20'] = 'Administration Log',
['21'] = 'Admin Settings',
['22'] = 'Plugins',
['23'] = [[
<b>Hi %s! My name's %s, it's a pleasure to meet you</b> %s
I understand many commands, which you can learn more about by pressing the "Commands" button using the attached keyboard.
%s <b>Tip:</b> Use the "Settings" button to change how I work%s!
%s <b>Find me useful, or just want to help?</b> Donations are very much appreciated, use /donate for more information!
]],
['24'] = 'in'
},
['id'] = {
['1'] = 'I\'m sorry, but I don\'t recognize that user. To teach me who they are, forward a message from them to me or get them to send me a message.',
['2'] = 'Queried Chat:',
['3'] = 'This Chat:',
['4'] = 'Click to send the result!'
},
['imdb'] = {
['1'] = 'Previous',
['2'] = 'Next',
['3'] = 'You are on page %s of %s!'
},
['import'] = {
['1'] = 'I don\'t recognize that chat!',
['2'] = 'That\'s not a supergroup, therefore I cannot import any settings from it!',
['3'] = 'Successfully imported administrative settings & toggled plugins from %s to %s!'
},
['info'] = {
['1'] = [[
```
Redis:
%s Config File: %s
%s Mode: %s
%s TCP Port: %s
%s Version: %s
%s Uptime: %s days
%s Process ID: %s
%s Expired Keys: %s
%s User Count: %s
%s Group Count: %s
System:
%s OS: %s
```
]]
},
['instagram'] = {
['1'] = '@%s on Instagram'
},
['ipsw'] = {
['1'] = '<b>%s</b> iOS %s\n\n<code>MD5 sum: %s\nSHA1 sum: %s\nFile size: %s GB</code>\n\n<i>%s %s</i>',
['2'] = 'This firmware is no longer being signed!',
['3'] = 'This firmware is still being signed!',
['4'] = 'Please select your model:',
['5'] = 'Please select your firmware version:',
['6'] = 'Please select your device type:',
['7'] = 'iPod Touch',
['8'] = 'iPhone',
['9'] = 'iPad',
['10'] = 'Apple TV'
},
['ispwned'] = {
['1'] = 'That account was found in the following leaks:'
},
['isup'] = {
['1'] = 'This website appears to be up, maybe it\'s just you?',
['2'] = 'That doesn\'t appear to be a valid site!',
['3'] = 'It\'s not just you, this website looks down from here.'
},
['itunes'] = {
['1'] = 'Name:',
['2'] = 'Artist:',
['3'] = 'Album:',
['4'] = 'Track:',
['5'] = 'Disc:',
['6'] = 'The original query could not be found, you\'ve probably deleted the original message.',
['7'] = 'The artwork can be found below:',
['8'] = 'Please enter a search query (that is, what you want me to search iTunes for, i.e. "Green Day American Idiot" will return information about the first result for American Idiot by Green Day).',
['9'] = 'Get Album Artwork'
},
['kick'] = {
['1'] = 'Which user would you like me to kick? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot kick this user because they are a moderator or an administrator in this chat.',
['3'] = 'I cannot kick this user because they have already left this chat.',
['4'] = 'I cannot kick this user because they have already been kicked from this chat.',
['5'] = 'I need to have administrative permissions in order to kick this user. Please amend this issue, and try again.'
},
['lastfm'] = {
['1'] = '%s\'s last.fm username has been set to "%s".',
['2'] = 'Your last.fm username has been forgotten!',
['3'] = 'You don\'t currently have a last.fm username set!',
['4'] = 'Please specify your last.fm username or set it with /fmset.',
['5'] = 'No history was found for this user.',
['6'] = '%s is currently listening to:\n',
['7'] = '%s last listened to:\n',
['8'] = 'Unknown',
['9'] = 'Click to send the result.'
},
['lmgtfy'] = {
['1'] = 'Let me Google that for you!'
},
['location'] = {
['1'] = 'You don\'t have a location set. What would you like your new location to be?'
},
['logchat'] = {
['1'] = 'Please enter the username or numerical ID of the chat you wish to log all administrative actions into.',
['2'] = 'Checking to see whether that chat is valid...',
['3'] = 'I\'m sorry, it appears you\'ve either specified an invalid chat, or you\'ve specified a chat I haven\'t been added to yet. Please rectify this and try again.',
['4'] = 'You can\'t set a user as your log chat!',
['5'] = 'You don\'t appear to be an administrator in that chat!',
['6'] = 'It seems I\'m already logging administrative actions into that chat! Use /logchat to specify a new one.',
['7'] = 'That chat is valid, I\'m now going to try and send a test message to it, just to ensure I have permission to post!',
['8'] = 'Hello, World - this is a test message to check my posting permissions - if you\'re reading this, then everything went OK!',
['9'] = 'All done! From now on, any administrative actions in this chat will be logged into %s - to change the chat you want me to log administrative actions into, just send /logchat.'
},
['lua'] = {
['1'] = 'Please enter a string of Lua to execute!'
},
['lyrics'] = {
['1'] = 'Spotify',
['2'] = 'Show Lyrics',
['3'] = 'Please enter a search query (that is, what song/artist/lyrics you want me to get lyrics for, i.e. "Green Day Basket Case" will return the lyrics for the song Basket Case by Green Day).'
},
['minecraft'] = {
['1'] = '<b>%s has changed his/her username %s time</b>',
['2'] = '<b>%s has changed his/her username %s times</b>',
['3'] = 'Previous',
['4'] = 'Next',
['5'] = 'Back',
['6'] = 'UUID',
['7'] = 'Avatar',
['8'] = 'Username History',
['9'] = 'Please select an option:',
['10'] = 'Please enter the username of the Minecraft player you would like to view information about (i.e. sending "Notch" will view information about the player Notch).',
['11'] = 'Minecraft usernames are between 3 and 16 characters long.'
},
['msglink'] = {
['1'] = 'You can only use this command in supergroups and channels.',
['2'] = 'This %s must be public, with a @username.',
['3'] = 'Please reply to the message you\'d like to get a link for.'
},
['mute'] = {
['1'] = 'Which user would you like me to mute? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot mute this user because they are already muted in this chat.',
['3'] = 'I cannot mute this user because they are a moderator or an administrator in this chat.',
['4'] = 'I cannot mute this user because they have already left (or been kicked from) this chat.',
['5'] = 'I need to have administrative permissions in order to mute this user. Please amend this issue, and try again.'
},
['myspotify'] = {
['1'] = 'Profile',
['2'] = 'Following',
['3'] = 'Recently Played',
['4'] = 'Currently Playing',
['5'] = 'Top Tracks',
['6'] = 'Top Artists',
['7'] = 'You don\'t appear to be following any artists!',
['8'] = 'Your Top Artists',
['9'] = 'You don\'t appear to have any tracks in your library!',
['10'] = 'Your Top Tracks',
['11'] = 'You don\'t appear to be following any artists!',
['12'] = 'Artists You Follow',
['13'] = 'You don\'t appear to have recently played any tracks!',
['14'] = '<b>Recently Played</b>\n%s %s\n%s %s\n%s Listened to at %s:%s on %s/%s/%s.',
['15'] = 'The request has been accepted for processing, but the processing has not been completed.',
['16'] = 'You don\'t appear to be listening to anything right now!',
['17'] = 'Currently Playing',
['18'] = 'An error occured whilst re-authorising your Spotify account!',
['19'] = 'Successfully re-authorised your Spotify account! Processing your original request...',
['20'] = 'Re-authorising your Spotify account, please wait...',
['21'] = 'You need to authorise mattata in order to connect your Spotify account. Click [here](https://accounts.spotify.com/en/authorize?client_id=%s&response_type=code&redirect_uri=%s&scope=user-library-read,playlist-read-private,playlist-read-collaborative,user-read-private,user-read-email,user-follow-read,user-top-read,user-read-playback-state,user-read-recently-played,user-read-currently-playing,user-modify-playback-state) and press the green "OKAY" button to link mattata to your Spotify account. After you\'ve done that, send the link you were redirected to (it should begin with "%s", followed by a unique code) in reply to this message.',
['22'] = 'Playlists',
['23'] = 'Use Inline Mode',
['24'] = 'Lyrics',
['25'] = 'No devices were found.',
['26'] = 'You don\'t appear to have any playlists.',
['27'] = 'Your Playlists',
['28'] = '%s %s [%s tracks]',
['29'] = '%s %s [%s]\nSpotify %s user\n\n<b>Devices:</b>\n%s',
['30'] = 'Playing previous track...',
['31'] = 'You are not a premium user!',
['32'] = 'I could not find any devices.',
['33'] = 'Playing next track...',
['34'] = 'Resuming track...',
['35'] = 'Your device is temporarily unavailable...',
['36'] = 'No devices were found!',
['37'] = 'Pausing track...',
['38'] = 'Now playing',
['39'] = 'Shuffling your music...',
['40'] = 'That\'s not a valid volume. Please specify a number between 0 and 100.',
['41'] = 'The volume has been set to %s%%!',
['42'] = 'This message is using an old version of this plugin, please request a new one by sending /myspotify!'
},
['name'] = {
['1'] = 'The name I currently respond to is "%s" - to change this, use /name <text> (where <text> is what you want me to respond to).',
['2'] = 'My new name needs to be between 2 and 32 characters long!',
['3'] = 'My name may only contain alphanumeric characters!',
['4'] = 'I will now respond to "%s", instead of "%s" - to change this, use /name <text> (where <text> is what you want me to respond to).'
},
['netflix'] = {
['1'] = 'Read more.'
},
['news'] = {
['1'] = '"<code>%s</code>" isn\'t a valid Lua pattern.',
['2'] = 'I couldn\'t retrieve a list of sources.',
['3'] = '<b>News sources found matching</b> "<code>%s</code>":\n\n%s',
['4'] = '<b>Here are the current available news sources you can use with</b> /news<b>. Use</b> /nsources &lt;query&gt; <b>to search the list of news sources for a more specific set of results. Searches are matched using Lua patterns</b>\n\n%s',
['5'] = 'You don\'t have a preferred news source. Use /setnews <source> to set one. View a list of sources using /nsources, or narrow down the results by using /nsources <query>.',
['6'] = 'Your current preferred news source is %s. Use /setnews <source> to change it. View a list of sources using /nsources, or narrow down the results by using /nsources <query>.',
['7'] = 'Your preferred source is already set to %s! Use /news to view the current top story.',
['8'] = 'That\'s not a valid news source. View a list of sources using /nsources, or narrow down the results by using /nsources <query>.',
['9'] = 'Your preferred news source has been updated to %s! Use /news to view the current top story.',
['10'] = 'That\'s not a valid source, use /nsources to view a list of available sources. If you have a preferred source, use /setnews <source> to automatically have news from that source sent when you send /news, without any arguments needed.',
['11'] = 'Read more.'
},
['nick'] = {
['1'] = 'Your nickname has now been forgotten!',
['2'] = 'Your nickname has been set to "%s"!'
},
['ninegag'] = {
['1'] = 'Read More'
},
['optout'] = {
['1'] = 'You have opted-in to having data you send collected! Use /optout to opt-out.',
['2'] = 'You have opted-out of having data you send collected! Use /optin to opt-in.'
},
['paste'] = {
['1'] = 'Please select a service to upload your paste to:'
},
['pay'] = {
['1'] = 'You currently have %s mattacoins. Earn more by winning games of Tic-Tac-Toe, using /game - You will win 100 mattacoins for every game you win, and you will lose 50 for every game you lose.',
['2'] = 'You must use this command in reply to the user you\'d like to send mattacoins to.',
['3'] = 'Please specify the amount of mattacoins you\'d like to give %s.',
['4'] = 'The amount specified should be a numerical value, of which can be no less than 0.',
['5'] = 'You can\'t send money to yourself!',
['6'] = 'You don\'t have enough funds to complete that transaction!',
['7'] = '%s mattacoins have been sent to %s. Your new balance is %s mattacoins.'
},
['pin'] = {
['1'] = 'You haven\'t set a pin before. Use /pin <text> to set one. Markdown formatting is supported.',
['2'] = 'Here is the last message generated using /pin.',
['3'] = 'I found an existing pin in the database, but the message I sent it in seems to have been deleted, and I can\'t find it anymore. You can set a new one with /pin <text>. Markdown formatting is supported.',
['4'] = 'There was an error whilst updating your pin. Either the text you entered contained invalid Markdown syntax, or the pin has been deleted. I\'m now going to try and send you a new pin, which you\'ll be able to find below - if you need to modify it then, after ensuring the message still exists, use /pin <text>.',
['5'] = 'I couldn\'t send that text because it contains invalid Markdown syntax.',
['6'] = 'Click here to see the pin, updated to contain the text you gave me.'
},
['pokedex'] = {
['1'] = 'Name: %s\nID: %s\nType: %s\nDescription: %s'
},
['prime'] = {
['1'] = 'Please enter a number between 1 and 99999.',
['2'] = '%s is a prime number!',
['3'] = '%s is NOT a prime number...'
},
['promote'] = {
['1'] = 'I cannot promote this user because they are a moderator or an administrator of this chat.',
['2'] = 'I cannot promote this user because they have already left this chat.',
['3'] = 'I cannot promote this user because they have already been kicked from this chat.'
},
['quote'] = {
['1'] = 'This user has opted out of data-storing functionality.',
['2'] = 'There are no saved quotes for %s! You can save one by using /save in reply to a message they send.'
},
['randomsite'] = {
['1'] = 'Generate Another'
},
['randomword'] = {
['1'] = 'Generate Another',
['2'] = 'Your random word is <b>%s</b>!'
},
['report'] = {
['1'] = 'Please reply to the message you would like to report to the group\'s administrators.',
['2'] = 'You can\'t report your own messages, are you just trying to be funny?',
['3'] = '<b>%s needs help in %s!</b>',
['4'] = 'Click here to view the reported message.',
['5'] = 'I\'ve successfully reported that message to %s admin(s)!'
},
['rms'] = {
['1'] = 'Holy GNU!'
},
['save'] = {
['1'] = 'This user has opted out of data-storing functionality.',
['2'] = 'That message has been saved in my database, and added to the list of possible responses for when /quote is used in reply to %s!'
},
['sed'] = {
['1'] = '%s\n\n<i>%s didn\'t mean to say this!</i>',
['2'] = '%s\n\n<i>%s has admitted defeat.</i>',
['3'] = '%s\n\n<i>%s isn\'t sure if they were mistaken...</i>',
['4'] = 'Screw you, <i>when am I ever wrong?</i>',
['5'] = '"<code>%s</code>" isn\'t a valid Lua pattern.',
- ['6'] = '<b>Hi, %s, did you mean:</b>\n<i>%s</i>',
+ ['6'] = 'Hey %s, %s seems to think you meant:\n<i>%s</i>',
['7'] = 'Yes',
['8'] = 'No',
- ['9'] = 'Not sure'
+ ['9'] = 'Not sure',
+ ['10'] = 'Just edit your message, idiot.'
},
['setgrouplang'] = {
['1'] = 'This group\'s language has been set to %s!',
['2'] = 'This group\'s language is currently %s.\nPlease note that some strings may not be translated as of yet. If you\'d like to change your language, select one using the keyboard below:',
['3'] = 'The option to force users to use the same language in this group is currently disabled. This setting should be toggled from /administration but, to make things easier for you, I\'ve included a button below.',
['4'] = 'Enable',
['5'] = 'Disable'
},
['setlang'] = {
['1'] = 'Your language has been set to %s!',
['2'] = 'Your language is currently %s.\nPlease note that some strings may not be translated as of yet. If you\'d like to change your language, select one using the keyboard below:'
},
['setlink'] = {
['1'] = 'That\'s not a valid URL.',
['2'] = 'Link set successfully!'
},
['setrules'] = {
['1'] = 'Invalid Markdown formatting.',
['2'] = 'Successfully set the new rules!'
},
['setwelcome'] = {
['1'] = 'What would you like the welcome message to be? The text you specify will be Markdown-formatted and sent every time a user joins the chat (the welcome message can be disabled in the administration menu, accessible via /administration). You can use placeholders to automatically customise the welcome message for each user. Use $user_id to insert the user\'s numerical ID, $chat_id to insert the chat\'s numerical ID, $name to insert the user\'s name, $title to insert the chat\'s title and $username to insert the user\'s username (if the user doesn\'t have an @username, their name will be used instead, so it is best to avoid using this in conjunction with $name).',
['2'] = 'There was an error formatting your message, please check your Markdown syntax and try again.',
['3'] = 'The welcome message for %s has successfully been updated!'
},
['share'] = {
['1'] = 'Share'
},
['shorten'] = {
['1'] = 'Please select a URL shortener using the buttons below:'
},
['shsh'] = {
['1'] = 'I couldn\'t fetch any SHSH blobs for that ECID, please ensure it\'s valid and you have saved them using https://tsssaver.1conan.com.',
['2'] = 'SHSH blobs for that device are available for the following versions of iOS:\n',
['3'] = 'Download .zip'
},
['statistics'] = {
['1'] = 'No messages have been sent in this chat!',
['2'] = '<b>Statistics for:</b> %s\n\n%s\n<b>Total messages sent:</b> %s',
['3'] = 'The statistics for this chat have been reset!',
['4'] = 'I could not reset the statistics for this chat. Perhaps they have already been reset?'
},
['steam'] = {
['1'] = 'Your Steam username has been set to "%s".',
['2'] = '"%s" isn\'t a valid Steam username.',
['3'] = '%s has been a user on Steam since %s, on %s. They last logged off at %s, on %s. Click <a href="%s">here</a> to view their Steam profile.',
['4'] = '%s, AKA "%s",'
},
['synonym'] = {
['1'] = 'You could use the word <b>%s</b>, instead of %s.'
},
['thoughts'] = {
['1'] = '%s\n\nPositive: <code>%s%% [%s]</code>\nNegative: <code>%s%% [%s]</code>\nIndifferent: <code>%s%% [%s]</code>\nTotal thoughts: <code>%s</code>'
},
['tobinary'] = {
['1'] = 'Please enter the string you would like to convert to binary.'
},
['trust'] = {
['1'] = 'I cannot trust this user because they are a moderator or an administrator of this chat.',
['2'] = 'I cannot trust this user because they have already left this chat.',
['3'] = 'I cannot trust this user because they have already been kicked from this chat.'
},
['unmute'] = {
['1'] = 'Which user would you like me to unmute? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot unmute this user because they are not currently muted in this chat.',
['3'] = 'I cannot unmute this user because they are a moderator or an administrator in this chat.',
['4'] = 'I cannot unmute this user because they have already left (or been kicked from) this chat.'
},
['untrust'] = {
['1'] = 'Which user would you like me to untrust? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot untrust this user because they are a moderator or an administrator in this chat.',
['3'] = 'I cannot untrust this user because they have already left this chat.',
['4'] = 'I cannot untrust this user because they have already been kicked from this chat.'
},
['upload'] = {
['1'] = 'Please reply to the file you\'d like to download to the server. It must be <= 20 MB.',
['2'] = 'That file is too large. It must be <= 20 MB.',
['3'] = 'I couldn\'t get this file, it\'s probably too old.',
['4'] = 'There was an error whilst retrieving this file.',
['5'] = 'Successfully downloaded the file to the server - it can be found at <code>%s</code>!'
},
['version'] = {
['1'] = '@%s AKA %s `[%s]` is running mattata %s, created by [Matthew Hesketh](https://t.me/wrxck). The source code is available on [GitHub](https://github.com/wrxck/mattata).'
},
['voteban'] = {
['1'] = 'Which user would you like to open up a vote-ban for? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot setup a vote-ban for this user because they are a moderator or an administrator in this chat.',
['3'] = 'I cannot setup a vote-ban for this user because they have already left (or been kicked from) this chat.',
['4'] = 'Should %s [%s] be banned from %s? %s upvotes are required for an immediate ban, and %s downvotes are required for this vote to be closed.',
['5'] = 'Yes [%s]',
['6'] = 'No [%s]',
['7'] = 'The people have spoken. I have banned %s [%s] from %s because %s people voted for me to do so.',
['8'] = 'The required upvote amount was reached, however, I was unable to ban %s - perhaps they\'ve left the group or been promoted since we opened the vote to ban them? It\'s either that, or I no longer have the administrative privileges required in order to perform this action!',
['9'] = 'The people have spoken. I haven\'t banned %s [%s] from %s because the required %s people downvoted the decision to ban them.',
['10'] = 'You upvoted the decision to ban %s [%s]!',
['11'] = 'Your current vote has been retracted, use the buttons again to re-submit your vote.',
['12'] = 'You downvoted the decision to ban %s [%s]!',
['13'] = 'A vote-ban has already been opened for this user!'
},
['weather'] = {
['1'] = 'You don\'t have a location set. Use /setloc <location> to set one.',
['2'] = 'It\'s currently %s (feels like %s) in %s. %s'
},
['welcome'] = {
['1'] = 'Group Rules'
},
['allowlist'] = {
['1'] = 'Which user would you like me to allowlist? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot allowlist this user because they are a moderator or an administrator in this chat.',
['3'] = 'I cannot allowlist this user because they have already left this chat.',
['4'] = 'I cannot allowlist this user because they have already been banned from this chat.'
},
['wikipedia'] = {
['1'] = 'Read more.'
},
['youtube'] = {
['1'] = 'Previous',
['2'] = 'Next',
['3'] = 'You are on page %s of %s!'
}
}
\ No newline at end of file
diff --git a/languages/pl_pl.lua b/languages/pl_pl.lua
index 5cb1766..7e4b502 100644
--- a/languages/pl_pl.lua
+++ b/languages/pl_pl.lua
@@ -1,813 +1,811 @@
-- This is a language file for mattata
-- Language: pl-pl
-- Author: GingerPlusPlus
-- DO NOT CHANGE ANYTHING THAT BEGINS OR ENDS WITH A %
-- THESE ARE PLACEHOLDERS!
-- DO NOT CHANGE ANY MARKDOWN/HTML FORMATTING!
-- IF YOU ARE UNSURE, ASK ON TELEGRAM (t.me/mattataDev)
return {
['errors'] = {
['connection'] = 'Błąd połączenia.',
['results'] = 'Brak pasujących wyników.',
['supergroup'] = 'Ta komenda może być używana tylko w supergrupach.',
['admin'] = 'Aby użyć tej komendy, musisz być moderatorem lub administratorem w tej grupie.',
['unknown'] = 'Nieznany użytkownik. Aby pokazać mi kto to, przekaż wiadomość od niego do dowolnego czatu w którym jestem.',
['generic'] = 'Wystąpił błąd!',
['use'] = 'You are not allowed to use this!',
['private'] = 'You can only use this command in private chat!'
},
['addcommand'] = {
['1'] = 'Please specify the command in the format <code>/command - description</code>',
['2'] = 'I couldn\'t retrieve my commands!',
['3'] = 'The command description can\'t be longer than 256 characters!',
['4'] = 'An unknown error occurred! I couldn\'t add your command!',
['5'] = 'Success! Command added.'
},
['addrule'] = {
['1'] = 'Please specify the rule you would like to add!',
['2'] = 'You don\'t have any rules to add to! Please set group rules using /setrules!',
['3'] = 'I couldn\'t add that rule, as it would make the length of the rules longer than Telegram\'s 4096 character limit!',
['4'] = 'I couldn\'t add that rule, it appears it contains invalid Markdown formatting!',
['5'] = 'Successfully updated the rules!'
},
['addslap'] = {
['1'] = 'You can only use this command in groups!',
['2'] = 'The slap cannot contain curly braces apart from placeholders!',
['3'] = 'The slap cannot be any longer than 256 characters in length!',
['4'] = 'I\'ve successfully added that slap as a possibility for /slap in this group!',
['5'] = 'You must include placeholders in your slap. Use {ME} for the person executing and {THEM} for the victim.'
},
['administration'] = {
['1'] = 'Enable Administration',
['2'] = 'Disable Administration',
['3'] = 'Anti-Spam Settings',
['4'] = 'Warning Settings',
['5'] = 'Vote-Ban Settings',
['6'] = 'Welcome New Users?',
['7'] = 'Send Rules On Join?',
['8'] = 'Send Rules In Group?',
['9'] = 'Back',
['10'] = 'Next',
['11'] = 'Word Filter',
['12'] = 'Anti-Bot',
['13'] = 'Anti-Link',
['14'] = 'Log Actions?',
['15'] = 'Anti-RTL',
['16'] = 'Anti-Spam Action',
['17'] = 'Ban',
['18'] = 'Kick',
['19'] = 'Delete Commands?',
['20'] = 'Force Group Language?',
['21'] = 'Send Settings In Group?',
['22'] = 'Delete Reply On Action?',
['23'] = 'Require Captcha?',
['24'] = 'Use Inline Captcha?',
['25'] = 'Ban SpamWatch-flagged users?',
['26'] = 'Number of warnings until %s:',
['27'] = 'Upvotes needed to ban:',
['28'] = 'Downvotes needed to dismiss:',
['29'] = 'Deleted %s, and its matching link from the database!',
['30'] = 'There were no entries found in the database matching "%s"!',
['31'] = 'You\'re not an administrator in that chat!',
['32'] = 'The minimum number of upvotes required for a vote-ban is %s.',
['33'] = 'The maximum number of upvotes required for a vote-ban is %s.',
['34'] = 'The minimum number of downvotes required for a vote-ban is %s.',
['35'] = 'The maximum number of downvotes required for a vote-ban is %s.',
['36'] = 'The maximum number of warnings is %s.',
['37'] = 'The minimum number of warnings is %s.',
['38'] = 'You can add one or more words to the word filter by using /filter <word(s)>',
['39'] = 'You will no longer be reminded that the administration plugin is disabled. To enable it, use /administration.',
['40'] = 'That\'s not a valid chat!',
['41'] = 'You don\'t appear to be an administrator in that chat!',
['42'] = 'My administrative functionality can only be used in groups/channels! If you\'re looking for help with using my administrative functionality, check out the "Administration" section of /help! Alternatively, if you wish to manage the settings for a group you administrate, you can do so here by using the syntax /administration <chat>.',
['43'] = 'Use the keyboard below to adjust the administration settings for <b>%s</b>:',
['44'] = 'Please send me a [private message](https://t.me/%s), so that I can send you this information.',
['45'] = 'I have sent you the information you requested via private chat.',
['46'] = 'Remove Channel Pins?',
['47'] = 'Remove Other Pins?',
['48'] = 'Remove Pasted Code?',
['49'] = 'Prevent Inline Bots?',
['50'] = 'Kick Media On Join?',
['51'] = 'Enable Plugins For Admins?',
['52'] = 'Kick URLs On Join?'
},
['afk'] = {
['1'] = 'Ta funkcja jest dostępna tylko dla użytkowników posiadających @username.',
['2'] = '%s powrócił(a) po nieobecności trwającej %s!',
['3'] = 'Komentarz',
['4'] = '%s jest teraz AFK.%s'
},
['antispam'] = {
['1'] = 'Disable',
['2'] = 'Enable',
['3'] = 'Disable limit',
['4'] = 'Enable limits on %s',
['5'] = 'All Administration Settings',
['6'] = '%s [%s] has kicked %s [%s] from %s [%s] for hitting the configured anti-spam limit for [%s] media.',
['7'] = 'Kicked %s for hitting the configured antispam limit for [%s] media.',
['8'] = 'The maximum limit is 100.',
['9'] = 'The minimum limit is 1.',
['10'] = 'Modify the anti-spam settings for %s below:',
['11'] = 'Hey %s, if you\'re going to send code that is longer than %s characters in length, please do so using /paste in <a href="https://t.me/%s">private chat with me</a>!',
['12'] = '%s <code>[%s]</code> has %s %s <code>[%s]</code> from %s <code>[%s]</code> for sending Telegram invite link(s).\n#chat%s #user%s',
['13'] = '%s %s for sending Telegram invite link(s).',
['14'] = 'Hey, I noticed you\'ve got anti-link enabled and you\'re currently not allowing your users to mention a chat you\'ve just mentioned, if you\'d like to allowlist it, use /allowlink <links>.',
['15'] = 'Kicked %s <code>[%s]</code> from %s <code>[%s]</code> for sending media within their first few messages.\n#chat%s #user%s',
['16'] = 'Kicked %s <code>[%s]</code> from %s <code>[%s]</code> for sending a URL within their first few messages.\n#chat%s #user%s',
['17'] = 'Action',
['18'] = 'Kick',
['19'] = 'Ban',
['20'] = 'Mute'
},
['appstore'] = {
['1'] = 'Zobacz na iTunes',
['2'] = 'rating',
['3'] = 'ratings'
},
['authspotify'] = {
['1'] = 'You are already authorised using that account.',
['2'] = 'Authorising, please wait...',
['3'] = 'A connection error occured. Are you sure you replied with the correct link? It should look like',
['4'] = 'Successfully authorised your Spotify account!'
},
['avatar'] = {
['1'] = 'Nie mogę dostać zdjęć profilowych tego użytkownika, upewnij się że podano poprawne @username lub ID.',
['2'] = 'Ten użytkownik nie ma żadnych zdjęć profilowych.',
['3'] = 'Ten użytkownik nie ma aż tylu zdjęć profilowych!',
['4'] = 'Ten użytkownik zrezygnował ze zbierania danych na jego temat, toteż nie mogę pokazać Ci jego zdjęć profilowych.',
['5'] = 'User: %s\nPhoto: %s/%s\nSend /avatar %s [offset] to @%s to view a specific photo of this user',
['6'] = 'User: %s\nPhoto: %s/%s\nUse /avatar %s [offset] to view a specific photo of this user'
},
['ban'] = {
['1'] = 'Kogo mam zbanować? Podaj @username lub ID.',
['2'] = 'Nie mogę zbanować tego użytkownika, ponieważ jest to moderator lub administrator tej grupy.',
['3'] = 'Nie mogę zbanować tego użytkownika, ponieważ opuścił on tę grupę.',
['4'] = 'Nie mogę zbanować tego użytkownika, ponieważ został on zbanowany już wcześniej.',
['5'] = 'Potrzebuję uprawnień administratora aby móc banować.',
['6'] = '%s <code>[%s]</code> has banned %s <code>[%s]</code> from %s <code>[%s]</code>%s.\n%s %s',
['7'] = '%s has banned %s%s.'
},
['bash'] = {
['1'] = 'Podaj komendę to uruchomienia.',
['2'] = 'Sukces!'
},
['blocklist'] = {
['1'] = 'Kogo mam ignorować? Podaj @username lub ID.',
['2'] = 'Nie mogę ignorować tego użytkownika, ponieważ jest to moderator lub administrator tej grupy.',
['3'] = 'Nie mogę ignorować tego użytkownika, ponieważ opuścił on tę grupę.',
['4'] = 'Nie mogę ignorować tego użytkownika, ponieważ został on zbanowany.',
['5'] = '%s <code>[%s]</code> has blocklisted %s <code>[%s]</code> from using %s <code>[%s]</code> in %s <code>[%s]</code>%s.\n%s %s',
['6'] = '%s has blocklisted %s from using %s%s.'
},
['blocklistchat'] = {
['1'] = '%s został dodany do czarnej listy, nie pozwolę się tam dodać!',
['2'] = '%s jest użytkownikiem, ta komenda służy do blokowanie grup i kanałów!',
['3'] = '%s wydaje się nie istnieć!'
},
['bugreport'] = {
['1'] = 'Twój raport o błędzie został wysłany; ID Twojego raportu to #%s.',
['2'] = 'Wystąpił problem podczas raportowania błędu...'
},
['calc'] = {
['1'] = 'Klinknij aby wysłać.',
['2'] = '"%s" was an unexpected word!',
['3'] = 'You cannot have a unit before a number!'
},
['captionbotai'] = {
['1'] = 'Nie potrafię opisać tego obrazka.'
},
['cats'] = {
['1'] = 'Miau!'
},
['channel'] = {
['1'] = 'Nie masz wymaganych uprawnień.',
['2'] = 'Wygląda na to że już nie administrujesz tamtą grupą.',
['3'] = 'Twoja wiadomość nie mogła zostać wysłana, upewnij się że mam uprawnienia administratora w tamtym kanale.',
['4'] = 'Twoja wiadomość została wysłana.',
['5'] = 'Nie mogę pobrać listy admistratorów tamtej grupy.',
['6'] = 'Wygląda na to że nie jesteś administratorem w tamtej grupie.',
['7'] = 'Podaj wiadomość do wysłania, używając /channel <kanał> <wiadomość>.',
['8'] = 'Czy jesteś pewien że chcesz wysłać tą wiadomość? Będzie ona wyglądać tak:',
['9'] = 'Potwierdź',
['10'] = 'Wiadmość zawiera niepoprawny Markdown! Popraw składnię i spróbuj ponownie.'
},
['chatroulette'] = {
['1'] = 'Hey! Please don\'t send messages longer than %s characters. We don\'t want to annoy the other user!',
['2'] = '*Anonymous said:*\n```\n%s\n```\nTo end your session, send /endchat.',
['3'] = 'I\'m afraid I lost connection from the other user! To begin a new chat, please send /chatroulette!',
['4'] = 'The other person you were chatting with has ended the session. To start a new one, send /chatroulette.',
['5'] = 'Successfully ended your session. To start a new one, send /chatroulette.',
['6'] = 'I have successfully removed you from the list of available users.',
['7'] = 'You don\'t have a session set up at the moment. To start one, send /chatroulette.',
['8'] = 'Finding you a session, please wait...',
['9'] = 'I\'m afraid there aren\'t any available users right now, but I have added you to the list of available users! To stop this completely, please send /endchat.',
['10'] = 'I have successfully paired you with another user to chat to! Please remember to be kind to them! To end the chat, send /endchat.',
['11'] = 'I\'m afraid the user who I tried to pair you with has since blocked me. Please try and send /chatroulette again to try and connect to me!',
['12'] = 'I have successfully paired you with another user to chat to! Please remember to be kind to them! To end the chat, send /endchat.'
},
['commandstats'] = {
['1'] = 'Nie wysłano jeszcze żadnych komend w tej grupie!',
['2'] = '<b>Statystyki komend w:</b> %s\n\n%s\n<b>Liczba wszystkich komend:</b> %s',
['3'] = 'Zresetowano statystyki komend w tej grupie!',
['4'] = 'Błąd podczas resetowania statystyk, może zostały one zresetowane już wcześniej?'
},
['control'] = {
['1'] = 'Heh, chciałbyś!',
['2'] = '%s restartuje się...'
},
['copypasta'] = {
['1'] = 'Wiadomość na którą odpowiadasz tą komendą nie może być dłuższa niż %s znaków!'
},
['coronavirus'] = {
['1'] = [[*COVID-19 Statistics for:* %s
*New confirmed cases:* %s
*Total confirmed cases:* %s
*New deaths:* %s
*Total deaths:* %s
*New recovered cases:* %s
*Total recovered cases:* %s]]
},
['counter'] = {
['1'] = 'Dodawanie licznika do wiadomości nie powiodło się!'
},
['custom'] = {
['1'] = 'Sukces! Ta wiadomość zostanie wysłana za każdym razem gdy ktoś napisze %s!',
['2'] = 'Wyzwalacz "%s" nie istnieje!',
['3'] = 'Wyzwalacz "%s" został usunięty!',
['4'] = 'Nie utworzono żadnych wyzwalaczy',
['5'] = 'Wyzwalacze w %s:\n',
['6'] = 'Aby utworzyć nowy wyzwalacz, napisz:\n/custom new #wyzwalacz <wartość>.\nAby zobaczyć listę wyzwalaczy, napisz /custom list. Aby usunąć wyzwalacz, napisz, use /custom del #wyzwalacz.'
},
['delete'] = {
['1'] = 'Nie mogę usunąć tej wiadomości. Może jest za stara, albo nie istnieje?'
},
['demote'] = {
['1'] = 'Kogo mam zdegradować? Podaj @username lub ID.',
['2'] = 'Nie mogę zdegradować tego użytkownika, ponieważ nie jest to moderator tej grupy.',
['3'] = 'Nie mogę zdegradować tego użytkownika, ponieważ opuścił on tę grupę.',
['4'] = 'Nie mogę zdegradować tego użytkownika, ponieważ został on wyrzucony z tej grupy.',
},
['dice'] = {
['1'] = 'Najmniejsza dopuszczalna liczba ścian to %s.',
['2'] = '%s to limit liczby ścian, i liczby rzutów.',
['3'] = 'Limit liczby ścian to %s, a limit liczby rzutów to %s.',
['4'] = '%s rzutów %s-ścienną kostką:\n'
},
['doge'] = {
['1'] = 'Podaj tekst do umieszczenia na obrazku z Piesełem. Rozdziel wypowiedzi ukośnikiem lub nową linią.'
},
['duckduckgo'] = {
['1'] = 'Nie wiem co to jest!'
},
['donate'] = {
['1'] = '<b>Hello, %s!</b>\n\nIf you\'re feeling generous, you can contribute to the mattata project by making a monetary donation of any amount. This will go towards server costs and any time and resources used to develop mattata. This is an optional act, however it is greatly appreciated and your name will also be listed publically on mattata\'s GitHub page.\n\nIf you\'re still interested, you can donate <a href="https://paypal.me/wrxck">here</a>. Thank you for your continued support!'
},
['eightball'] = {
['1'] = 'Tak.',
['2'] = 'Nie.',
['3'] = 'Prawdopodobnie.',
['4'] = 'Uh... spytaj ponownie później.'
},
['exec'] = {
['1'] = 'Wybierz język:',
['2'] = 'To trwało zbyt długo... Czy próbowałeś mnie zawiesić?',
['3'] = 'Wybrano %s – jesteś pewien?',
['4'] = 'Powrót',
['5'] = 'Potwierdź',
['6'] = 'Podaj fragment kodu który chcesz uruchomić, o język zapytam za chwilę.',
['7'] = 'Wybierz język:'
},
['facebook'] = {
['1'] = 'Wystąpił błąd!',
['2'] = 'Podaj Facebookową nazwę użytkownika.',
['3'] = 'Zobacz %s na Facebooku'
},
['fact'] = {
['1'] = 'Wygeneruj inny'
},
['fban'] = {
['1'] = 'Which user would you like me to Fed-ban? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot Fed-ban this user because they are a moderator or an administrator in this chat.'
},
['flickr'] = {
['1'] = 'Szukano:',
['2'] = 'Czego chcesz szukać na Flickr?',
['3'] = 'Więcej wyników'
},
['fortune'] = {
['1'] = 'Kliknij aby wysłać.'
},
['frombinary'] = {
['1'] = 'Wprowadź liczbę binarną którą chcesz przeliczyć na tekst.',
['2'] = 'Nie jest to poprawna liczba binarna!'
},
['game'] = {
['1'] = 'Zwycięstwa: %s\nPorażki: %s\nSaldo: %s mattamonet',
['2'] = 'Dołącz',
['3'] = 'Gra się już skończyła!',
['4'] = 'Nie Twój ruch!',
['5'] = 'Nie jesteś w tej grze!',
['6'] = 'To pole jest już zajęte, wybierz inne!',
['7'] = 'Już jesteś w grze!',
['8'] = 'Gra została rozpoczęta już wcześniej!',
['9'] = '%s [%s] gra przeciwko %s [%s]\nKolej na ruch gracza %s!',
['10'] = '%s wygrał(a) z %s!',
['11'] = '%s zremisował(a) z %s!',
['12'] = 'Czekanie na przeciwnika...',
['13'] = 'Kółko i krzyżyk',
['14'] = 'Klinkij aby rozpocząć grę w tej grupie!',
['15'] = 'Statystyki dla %s:\n',
['16'] = 'Zagraj w kółko i krzyżyk!'
},
['gblocklist'] = {
['1'] = 'Odpowiedz do użytkownika którego mam wszędzie ignorować, bądź podaj jego @username lub ID.',
['2'] = 'Nie mogę dostać informacji o "%s", upewnij się że jest to poprawny @username lub ID.',
['3'] = 'To %s, a nie użytkownik!'
},
['gif'] = {
['1'] = 'Co mam wyszukać na Giphy?'
},
['godwords'] = {
['1'] = 'Podaj liczbę naturalną pomiędzy 1 a 64!',
['2'] = 'Liczba zbyt mała, musi należeć do przedziału od 1 do 64!',
['3'] = 'Liczba zbyt duża, musi należeć do przedziału od 1 do 64!'
},
['gallowlist'] = {
['1'] = 'Odpowiedz do użytkownika któremu mam znowu odpowiedać, bądź podaj jego @username lub ID.',
['2'] = 'Nie mogę dostać informacji o "%s", upewnij się że jest to poprawny @username lub ID.',
['3'] = 'To %s, a nie użytkownik!'
},
['hackernews'] = {
['1'] = 'Najlepsze historie z Hacker News:'
},
['help'] = {
['1'] = 'Brak pasujących wyników!',
['2'] = 'Brak funkcji których nazwa pasuje do "%s"!',
['3'] = '\n\nArgumenty: <wymagane> [opcjonalne]\n\nSzukaj funkcji lub przeczytaj pomoc do komendy używając wyszukiwania inline - w dowolnym czacie, napisz @%s <czego szukasz>.',
['4'] = 'Poprzednia',
['5'] = 'Następna',
['6'] = 'Powrót',
['7'] = 'Szukaj',
['8'] = 'Strona %s z %s',
['9'] = [[
Mogę wykonywać wiele akcji administracyjnych w Twoich grupach, dodaj mnie do grupy jako administrator i wyślij /administration żeby dostosować ustawienia dla swojej grupy.
Niektóre polecenia administracyjne i ich krótki opis:
• /pin <tekst> - Tworzy wiadomość do przypięcia (używane jest formatowanie Markdown). Użyj ponownie aby zedytować przypiętą wiadomość bez konieczności przypinania nowej wiadomości.
• /ban - Zbanuj użytkownika, odpowiadając tą komendą na jego wiadomość, bądź podając jego ID lub @username jako argument
• /kick - Wyrzuć (ban, następnie unban) użytkownika, odpowiadając tą komendą na jego wiadomość, bądź podając jego ID lub @username jako argument
• /unban - Anuluj bana użytkownika, odpowiadając tą komendą na jego wiadomość, bądź podając jego ID lub @username jako argument
• /setrules <tekst> - Ustaw tekst (sformatowany Markdownem) jako zasady grupy, które można przeczytać pisząc /rules
]],
['10'] = [[
• /setwelcome <tekst> - Co chcesz powiedzieć każdemu nowemu członkowi? Możesz używać Markdown do formatowania. (Wiadomość powitalną można wyłączyć w menu administracyjnym, pisząc /administration). Użyj $user\_id aby wstawić ID dołączającego użytkownika, $chat\_id aby wstawić ID grupy, $name aby wstawić the imię użytkownika, $title aby wstawić nazwę grupy i $username aby wstawić @username użytkownika (jeśli użytkownik nie ma @username, zostanie wstawione jego imię, więc najlepiej nie używać $name i $username koło siebie)
• /warn - Ostrzeż użytkownika. Użytkownik zostanie zbanowany jeśli osiągnie limit ostrzeżeń
• /mod - Awansuj użytkownika na moderatora, pozwalając im używać poleceń administracyjnych, takich jak /ban, /kick, /warn itp.
• /demod - Zdegraduj moderatora do zwykłego użytkownika, odbierając im możliwość używania poleceń administracyjnych
• /staff - Wyświetl twórcę grupy, administratorów i moderatorów
]],
['11'] = [[
• /report - Przekazuje wiadomość na którą odpowiadasz administratorom, ostrzegając ich o zaistniałej sytuacji
• /setlink <URL> - Ustaw link do grupy, który można zobaczyć poleceniem /link
• /links <tekst> - Pozwól na wysyłanie linków znalezionych w tekście (także linki zapisane jako @username)
]],
['12'] = 'Poniżej jest parę linków które mogą Ci się przydać:',
['13'] = 'Development',
['14'] = 'Kanał',
['15'] = 'Wsparcie',
['16'] = 'Częste pytania',
['17'] = 'Kod źródłowy',
['18'] = 'Wspomóż finansowo',
['19'] = 'Oceń',
['20'] = 'Log administracyjny',
['21'] = 'Ustawienia administracyjne',
['22'] = 'Plugins', --!
['23'] = [[
<b>Cześć %s! Mam na imię %s, miło Cię poznać</b> %s
Rozumiem wiele poleceń, które możesz poznać klikając przycisk "Commands".
%s <b>Wskazówka:</b> Użyj przycisku "Settings" poniżej aby dostosować moje zachowanie%s!
%s <b>Find me useful, or just want to help?</b> Donations are very much appreciated, use /donate for more information!
]],
['24'] = 'w'
},
['id'] = {
['1'] = 'Nieznany użytkownik. Aby pokazać mi kto to, przekaż wiadomość od niego do dowolnego czatu w którym jestem.',
['2'] = 'Czat o który pytano:',
['3'] = 'Ten czat:',
['4'] = 'Kliknij aby wysłać.'
},
['imdb'] = {
['1'] = 'Poprzednia',
['2'] = 'Następna',
['3'] = 'Strona %s z %s'
},
['import'] = {
['1'] = 'Nie rozpoznaję tamtego czatu!',
['2'] = 'To nie jest supergrupa, więc nie mogę zaimportować z niej żadnych ustawień!',
['3'] = 'Pomyślnie zaimportowano ustawienia administracyjne i stan pluginów z %s do %s!'
},
['info'] = {
['1'] = [[
```
Redis:
%s plik konfiguracyjny: %s
%s tryb: %s
%s port TCP: %s
%s wersja: %s
%s czas pracy: %s days
%s ID procesu: %s
%s Przeterminowane wpisy: %s
%s liczba użytkowników: %s
%s liczba grup: %s
System:
%s OS: %s
```
]]
},
['instagram'] = {
['1'] = '@%s na Instagramie'
},
['ipsw'] = {
['1'] = '<b>%s</b> iOS %s\n\n<code>Suma kontrolna MD5: %s\nSuma kontrolna SHA1: %s\nRozmiar pliku: %s GB</code>\n\n<i>%s %s</i>',
['2'] = 'To firmware nie jest już podpisywane!',
['3'] = 'To firmware jest wciąż podpisywane!',
['4'] = 'Wybierz swój model:',
['5'] = 'Wybierz swoją wersję firmware:',
['6'] = 'Wybierz swój typ urządzenia:',
['7'] = 'iPod Touch',
['8'] = 'iPhone',
['9'] = 'iPad',
['10'] = 'Apple TV'
},
['ispwned'] = {
['1'] = 'To konto zostało znalezione w następujących wyciekach:'
},
['isup'] = {
['1'] = 'Ta strona internetowa wydaje się działać, może tylko u Ciebie nie działa?',
['2'] = 'Nie wygląda mi to na poprawny adres strony internetowej...',
['3'] = 'Nie tylko u Ciebie, tutaj też ta strona internetowa wydaje się nie działać.'
},
['itunes'] = {
['1'] = 'Nazwa:',
['2'] = 'Artysta:',
['3'] = 'Album:',
['4'] = 'Utwór:',
['5'] = 'Płyta:',
['6'] = 'Wiadomość zawierająca polecenie została usunięta.',
['7'] = 'Okładka poniżej:',
['8'] = 'Co mam wyszukać na iTunes?',
['9'] = 'Okładka albumu'
},
['kick'] = {
['1'] = 'Kogo mam wyrzucić? Podaj @username lub ID.',
['2'] = 'Nie mogę wyrzucić tego użytkownika, ponieważ jest to moderator lub administrator tej grupy.',
['3'] = 'Nie mogę wyrzucić tego użytkownika, ponieważ opuścił on tę grupę.',
['4'] = 'Nie mogę wyrzucić tego użytkownika, ponieważ został on wyrzucony już wcześniej.',
['5'] = 'Potrzebuję uprawnień administratora aby móc wyrzucać.'
},
['lastfm'] = {
['1'] = 'Nazwa użytkownika last.fm użytkownika %s została ustawiona na "%s".',
['2'] = 'Twoja nazwa użytkownika last.fm została zapomniana!',
['3'] = 'Nie masz ustawionej nazwy użytkownika last.fm!',
['4'] = 'Proszę podaj swoją nazwę użytkownika last.fm bądź ustaw ją używając /fmset.',
['5'] = 'Nie znaleziono historii tego użytkownika.',
['6'] = '%s słucha w tej chwili:\n',
['7'] = '%s ostatnio słuchał(a):\n',
['8'] = 'Nieznany',
['9'] = 'Kliknij aby wysłać.'
},
['lmgtfy'] = {
['1'] = 'Wygoogluję to za Ciebie!'
},
['location'] = {
['1'] = 'Nie masz ustawionej lokalizacji. Co mam ustawić jako Twoją nową lokalizację?'
},
['logchat'] = {
['1'] = 'Podaj @username bądź ID grupy w której mam rejestrować akcje administracyjnych.',
['2'] = 'Sprawdzam czy tamta grupa jest ok...',
['3'] = 'Przepraszam, wygląda na to, że grupa nie istnieje, bądź nie jestem jej członkiem. Napraw to i spróbuj ponownie.',
['4'] = 'Nie możesz ustawić użytkownika jako dziennik akcji administracyjnych!',
['5'] = 'Nie jesteś administratorem w tamtej grupie!',
['6'] = 'Wygląda na to że już rejestruję akcje administracyjne w tamtej grupie! Użyj /logchat by wybrać inną.',
['7'] = 'Jak na razie wszystko w porządku, spróbuję wysłać tam testową wiadomość żeby upawnić się że mogę wywyłać tam wiadomości...',
['8'] = 'Witaj świecie - to wiadomość testowa, żeby sprawdzić czy mogę tu pisać - jeśli to czytasz, wszystko poszło zgodnie z planem!',
['9'] = 'Wszystko ok! Od teraz, każda akcja administracyjna w tej grupie będzie rejestrowana w %s - aby wybrać inne miejsce, napisz /logchat.'
},
['lua'] = {
['1'] = 'Podaj proszę fragment kodu Lua do uruchomienia:'
},
['lyrics'] = {
['1'] = 'Spotify',
['2'] = 'Pokaż tekst',
['3'] = 'Podaj tytuł piosenki/artystę/fragment tekstu.'
},
['minecraft'] = {
['1'] = '<b>%s zmienił(a) nazwę użytkownika %s raz</b>',
['2'] = '<b>%s zmienił(a) nazwę użytkownika %s razy</b>',
['3'] = 'Poprzednia',
['4'] = 'Następna',
['5'] = 'Powrót',
['6'] = 'UUID',
['7'] = 'Avatar',
['8'] = 'Historia nazwy użytkownika',
['9'] = 'Wybierz:',
['10'] = 'Podaj nazwę użytkownika gracza Minecraft.',
['11'] = 'Nazwy użytkownika w Minecraft mają długość od 3 do 16 znaków.'
},
['msglink'] = {
['1'] = 'Ta komenda może być używana tylko w supergrupach i kanałach.',
['2'] = 'Ta %s musi być publiczna, musi mieć @username.',
['3'] = 'Odpisz tą komendą na wiadomość aby otrzymać linka do wiadomości.'
},
['mute'] = {
['1'] = 'Kogo mam wyciszyć? Podaj @username lub ID.',
['2'] = 'Nie mogę wyciszyć tego użytkownika, ponieważ został on wyciszony już wcześniej.',
['3'] = 'Nie mogę wyciszyć tego użytkownika, ponieważ jest to moderator lub administrator tej grupy.',
['4'] = 'Nie mogę wyciszyć tego użytkownika, ponieważ opuścił on tę grupę lub został z niej wyrzucony.',
['5'] = 'Potrzebuję uprawnień administratora aby móc wyciszać.'
},
['myspotify'] = {
['1'] = 'Profil',
['2'] = 'Śledzący',
['3'] = 'Niedawno odtwarzane',
['4'] = 'Aktualnie odtwarzane',
['5'] = 'Najczęściej odtwarzane utwory',
['6'] = 'Top Artists', --!
['7'] = 'Wygląda na to, że nie śledzisz żadnych artystów!',
['8'] = 'Your Top Artists',
['9'] = 'Wygląda na to, że nie masz żadnych utworów w bibliotece!',
['10'] = 'Utwory najczęściej odtwarzane przez Ciebie',
['11'] = 'Wygląda na to, że nie śledzisz żadnych artystów!',
['12'] = 'Artyści których śledzisz',
['13'] = 'Nie odtwarzano ostatnie żadnych utworów!',
['14'] = '<b>Niedawno odtwarzane</b>\n%s %s\n%s %s\n%s Słuchano o %d:%d dnia %d/%d/%d.',
['15'] = 'Zaakceptowano żądanie, trwa przetwarzanie.',
['16'] = 'Wygląda na to, że niczego teraz nie słuchasz!',
['17'] = 'Aktualnie odtwarzane',
['18'] = 'Wystąpił błąd podczas ponownej autoryzacji Twojego konta Spotify!',
['19'] = 'Ponowna autoryzacja Twojego konta Spotify powiodła się! Przetwarzanie Twojego oryginalnego żądania...',
['20'] = 'Trwa ponowna autoryzacja Twojego konta Spotify, proszę czekać...',
['21'] = 'Potrzebujesz autoryzować Mattatę aby połączyć się ze swoim kontem Spotify. Kliknij [tutaj](https://accounts.spotify.com/en/authorize?client_id=%s&response_type=code&redirect_uri=%s&scope=user-library-read%%20playlist-read-private%%20playlist-read-collaborative%%20user-read-private%%20user-read-birthdate%%20user-read-email%%20user-follow-read%%20user-top-read%%20user-read-playback-state%%20user-read-recently-played%%20user-read-currently-playing) i kliknij zielony przycisk "OKAY" aby połączyć Mattatę do Twojego konta Spotify. Następnie wyślij link do którego Cię przekierowano (powinien się zaczynać od "%s", a następnie zawierać unikatowy kod) w odpowiedzi na tę wiadomość.',
['22'] = 'Listy odtwarzania',
['23'] = 'Użyj trybu inline',
['24'] = 'Tekst piosenki',
['25'] = 'Nie znaleziono żadnych urządzeń.',
['26'] = 'Wygląda na to, że nie masz żadnych list odtwarzania.',
['27'] = 'Twoje listy odtwarzania',
['28'] = '%s %s [%s utworów]',
['29'] = '%s %s [%s]\nSpotify %s user\n\n<b>Urządzenia:</b>\n%s', --!
['30'] = 'Włączam poprzedni utwor...',
['31'] = 'Nie masz konta premium!',
['32'] = 'Nie znaleziono żadnych urządzeń.',
['33'] = 'Włączam następny utwór...',
['34'] = 'Wznawiam odtwarzanie...',
['35'] = 'Twoje urządzenie jest tymczasowo niedostępne...',
['36'] = 'Nie znaleziono żadnych urządzeń!',
['37'] = 'Wstrzymuję odtwarzanie...',
['38'] = 'Trwa odtwarzanie',
['39'] = 'Losuję kolejność odtwarzania...',
['40'] = 'To nie jest poprawny poziom głośności. Podaj liczbę między 0 a 100.',
['41'] = 'Głośność została ustawiona na %s%%!',
['42'] = 'Ta wiadomość została wysłana przez wcześniejszą wersję pluginu, poproś o nową wysyłając /myspotify!'
},
['name'] = {
['1'] = 'Aktualnie reaguję na imię "%s" - aby to zmienić, użyj /name <imię>.',
['2'] = 'Moje nowe imię musi mieć długość od 2 do 32 znaków!',
['3'] = 'Moje nowe imię musi się składać tylko z liter i cyfr!',
['4'] = 'Będę od teraz reagować na "%s", zamiast "%s" - aby to zmienić, użyj /name <imię>.'
},
['netflix'] = {
['1'] = 'Czytaj więcej'
},
['news'] = {
['1'] = '"<code>%s</code>" isn\'t a valid Lua pattern.', --!
['2'] = 'Nie mogę pobrać listy źródeł.',
['3'] = '<b>Źródła newsów pasujących do wzorca</b> "<code>%s</code>":\n\n%s',
['4'] = '<b>Aktualnie dostępne źródła newsów których możesz używać w </b> /news<b>. Użyj</b> /nsources &lt;Lua_pattern&gt; <b>aby przeszukać tę listę pod kątem bardziej specyficznych rezultatów.</b>\n\n%s',
['5'] = 'Nie masz preferowanego źródła newsów. Użyj /setnews <źródło> aby ustawić. Przejrzyj listę źródeł używając /nsources, lub zawęź wyniki używając /nsources <Lua_pattern>.',
['6'] = 'Twoje aktualne preferowane źródło newsów to %s. Użyj /setnews <źródło> aby to zmienić. Przejrzyj listę źródeł używając /nsources, lub zawęź wyniki używając /nsources <Lua_pattern>.',
['7'] = 'Twoje preferowane źródło informacji jest już ustawione na %s! Użyj /news aby zobaczyć aktualną najlepszą historię.',
['8'] = 'Nieznane źródło newsów. Przejrzyj listę źródeł używając /nsources, lub zawęź wyniki używając /nsources <Lua_pattern>.',
['9'] = 'Twoje preferowane źródło newsów zostało zmienione na %s! Użyj /news aby zobaczyć aktualną najlepszą historię.',
['10'] = 'Nieznane źródło newsów. Przejrzyj listę źródeł używając /nsources. Jeśli masz ulubione źródło, użyj /setnews <źródło> żeby pobierać zeń newsy kiedy użyjesz /news bez argumentów.',
['11'] = 'Czytaj więcej'
},
['nick'] = {
['1'] = 'Twoja ksywka została zapomniana!',
['2'] = 'Twoja ksywka została ustawiona na "%s"!'
},
['ninegag'] = {
['1'] = 'Czytaj więcej'
},
['optout'] = {
['1'] = 'Pozwoliłeś na zbieranie danych które wysyłasz! Użyj /optout aby zrezygnować.',
['2'] = 'Zrezygnowałeś ze zbieranie danych które wysyłasz! Użyj /optin aby pozwolić na zbieranie danych.'
},
['paste'] = {
['1'] = 'Wybierz serwis do którego mam wysłać Twój tekst:'
},
['pay'] = {
['1'] = 'Masz aktualnie %s mattamonet. Zdobądź więcej wygrywając w kółko i krzyżyk, używając /game - wygrasz 100 mattamonet za każdą wygraną, i stracisz 50 za każdą przegraną.',
['2'] = 'Musisz użyć tej komendy w odpowiedzi do użytkownika któremu chcesz przelać mattamonety',
['3'] = 'Ile mettamonet chcesz przelać do %s?',
['4'] = 'Podana ilość musi być liczbą nieujemną.',
['5'] = 'Nie możesz przelać mattamonet do siebie!',
['6'] = 'Nie masz tylu mattamonet!',
['7'] = '%s mattamonet zostało przelanych do to %s. Masz teraz %s mattamonet.'
},
['pokedex'] = {
['1'] = 'Nazwa: %s\nID: %s\nTyp: %s\nOpis: %s'
},
['pin'] = {
['1'] = 'Nie utworzono wcześniej żadnej wiadomości do przypięcia. Użyj /pin <tekst> aby utworzyć. Użyj Markdown do formatowania.',
['2'] = 'Oto ostatnia wiadomość utworzona przez /pin.',
['3'] = 'Znaleziono wiadomość do przypięcia w bazie danych, ale wygląda na to że została ona usunięta z grupy. Utwórz nową używając /pin <tekst>. Użyj Markdown do formatowania.',
['4'] = 'Wystąpił błąd podczas aktualizowania wiadomości do przypięcia. Wprowadzony tekst mógł zawierać nieprawidłowy Markdown, bądź wiadomość do przypięcia została usunięta. Spróbuję wysłać nową wiadomość do przypięcia, znajdziesz ją poniżej - jeśli potrzebujesz ją zmodyfikować, po upewnieniu się że istnieje, użyj /pin <tekst>.',
['5'] = 'Tekst zawiera nieprawidłowy Markdown.',
['6'] = 'Kliknij tutaj aby zobaczyć zaktualizowaną przypiętą wiadomość.'
},
['prime'] = {
['1'] = 'Podaj liczbę między 1 a 99999.',
['2'] = '%s jest liczbą piewszą!',
['3'] = '%s NIE jest liczbą pierwszą...'
},
['promote'] = {
['1'] = 'Nie mogę awansować tego użytkownika na moderatora, ponieważ jest to moderator lub administrator tej grupy.',
['2'] = 'Nie mogę awansować tego użytkownika na moderatora, ponieważ opuścił on tę grupę.',
['3'] = 'Nie mogę awansować tego użytkownika na moderatora, ponieważ został on wyrzucony z tej grupy.'
},
['quote'] = {
['1'] = 'Ten użytkownik zrezygnował ze zbierania danych na jego temat',
['2'] = 'Brak zapisanych cytatów użytkownika %s! Odpisz na wiadomość poleceniem /save aby zapisać.'
},
['randomsite'] = {
['1'] = 'Wygeneruj inną'
},
['randomword'] = {
['1'] = 'Wygeneruj inne',
['2'] = 'Twoje losowe słowo to <b>%s</b>!'
},
['report'] = {
['1'] = 'Please reply to the message you would like to report to the group\'s administrators.',
['2'] = 'You can\'t report your own messages, are you just trying to be funny?',
['3'] = '<b>%s needs help in %s!</b>',
['4'] = 'Click here to view the reported message.',
['5'] = 'I\'ve successfully reported that message to %s admin(s)!'
},
- ['rms'] = {
- ['1'] = 'Holy GNU!' --!
- },
['save'] = {
['1'] = 'Ten użytkownik zrezygnował ze zbierania danych na jego temat',
['2'] = 'Wiadomość zapisana w bazie danych i dodana do listy możliwych odpowiedzi gdy /quote jest użyte w odpowiedzi do %s!'
},
['sed'] = {
['1'] = '%s\n\n<i>%s nie miał(a) tego na myśli!</i>',
['2'] = '%s\n\n<i>%s przyznał(a) się do porażki.</i>',
['3'] = '%s\n\n<i>%s nie ma pewności czy się nie pomylił(a)...</i>',
['4'] = 'Odczep się, ja <i>nigdy</i> się nie mylę!',
['5'] = '"<code>%s</code>" isn\'t a valid Lua pattern.', --!
- ['6'] = '<b>Hej, %s, miałeś na myśli:</b>\n<i>%s</i>',
+ ['6'] = 'Hey %s, %s seems to think you meant:\n<i>%s</i>',
['7'] = 'Tak',
['8'] = 'Nie',
- ['9'] = 'Nie wiem'
+ ['9'] = 'Nie wiem',
+ ['10'] = 'Just edit your message, idiot.'
},
['setgrouplang'] = {
['1'] = 'Język tej grupy został ustawiony na %s!',
['2'] = 'Aktualnu język tej grupy to %s.\nPamiętaj że tłumaczenie może nie być kompletne. Aby zmienić język, użyj klawiatury poniżej:',
['3'] = 'Wspólny język dla tej grupy jest wyłączony. Aby to zmienić, użyj przycisku poniżej lub menu /administration.',
['4'] = 'Włącz',
['5'] = 'Wyłącz'
},
['setlang'] = {
['1'] = 'Twój język został ustawiony na %s!',
['2'] = 'Aktualnie wybrany język %s.\nPamiętaj że tłumaczenie może nie być kompletne. Jeśli chcesz zmienić język, użyj klawiatury poniżej:'
},
['setlink'] = {
['1'] = 'To nie jest poprawny URL.',
['2'] = 'Link został ustawiony!'
},
['setrules'] = {
['1'] = 'Niepoprawny Markdown.',
['2'] = 'Ustawienie zasad powiodło się!'
},
['setwelcome'] = {
['1'] = 'Co chcesz powiedzieć każdemu nowemu członkowi? Możesz używać Markdown do formatowania. (Wiadomość powitalną można wyłączyć w menu administracyjnym, pisząc /administration). Użyj $user_id aby wstawić ID dołączającego użytkownika, $chat_id aby wstawić ID grupy, $name aby wstawić the imię użytkownika, $title aby wstawić nazwę grupy i $username aby wstawić @username użytkownika (jeśli użytkownik nie ma @username, zostanie wstawione jego imię, więc najlepiej nie używać $name i $username koło siebie).',
['2'] = 'Twoja wiadomość jest niepoprawnie sformatowana, sprawdź swój Markdown i spróbuj ponownie.',
['3'] = 'Zapisano wiadomość powitalną dla %s!'
},
['share'] = {
['1'] = 'Udostępnij'
},
['shorten'] = {
['1'] = 'Wybierz skracacz linków używając przycisków poniżej:'
},
['shsh'] = {
['1'] = 'Nie mogę pobrać żadnych SHSH blobs dla tego ECID, upewnij się że jest poprawny i zapisałeś go używając https://tsssaver.1conan.com.',
['2'] = 'SHSH blobs dla tego urządzenia są dostępne dla następujących wersji iOS:\n',
['3'] = 'Pobierz .zip'
},
['statistics'] = {
['1'] = 'W tej grupie nie wysłano jeszcze żadnej wiadomości!',
['2'] = '<b>Statystyki w:</b> %s\n\n%s\n<b>Liczba wszystkich wiadomości:</b> %s',
['3'] = 'Zresetowano statystyki w tej grupie!',
['4'] = 'Błąd podczas resetowania statystyk, może zostały one zresetowane już wcześniej?'
},
['steam'] = {
['1'] = 'Twoja nazwa użytkownika na Steamie została ustawiona na "%s".',
['2'] = '"%s" nie jest poprawną nazwą użytkownika na Steamie.',
['3'] = '%s jest użytkownikiem Steama od %s, %s.\nData ostatniego wylogowania: %s, %s.\n<a href="%s">Profil na Steamie</a>',
['4'] = '%s, AKA "%s",'
},
['synonym'] = {
['1'] = 'Możesz użyć słowa <b>%s</b> zamiast %s.'
},
['thoughts'] = {
['1'] = '%s\n\nPozytywnie: <code>%s%% [%s]</code>\nNegatywnie: <code>%s%% [%s]</code>\nObojętnie: <code>%s%% [%s]</code>\nWszystkich przemyśleń: <code>%s</code>'
},
['tobinary'] = {
['1'] = 'Podaj ciąg znaków który chcesz skonwertować do liczby binarnej.'
},
['trust'] = {
['1'] = 'Nie mogę zaufać temu użytkownikowi, ponieważ jest to moderator lub administrator tej grupy.',
['2'] = 'Nie mogę zaufać temu użytkownikowi, ponieważ opuścił on tę grupę.',
['3'] = 'Nie mogę zaufać temu użytkownikowi, ponieważ został on wyrzucony już wcześniej.',
},
['unmute'] = {
['1'] = 'Komu mam pozwolić mówić? Podaj @username lub ID.',
['2'] = 'Nie mogę pozwolić mówić temu użytkownikowi, ponieważ nie został on wyciszony.',
['3'] = 'Nie mogę pozwolić mówić temu użytkownikowi, ponieważ jest to moderator lub administrator tej grupy.',
['4'] = 'Nie mogę pozwolić mówić temu użytkownikowi, ponieważ opuścił on tę grupę lub został z niej wyrzucony.',
},
['untrust'] = {
['1'] = 'Komu mam przestać ufać? Podaj @username lub ID.',
['2'] = 'Nie mogę przestać ufać temu użytkownikowi, ponieważ jest to moderator lub administrator tej grupy.',
['3'] = 'Nie mogę przestać ufać temu użytkownikowi, ponieważ opuścił on tę grupę.',
['4'] = 'Nie mogę przestać ufać temu użytkownikowi, ponieważ został on wyrzucony z tej grupy.',
},
['upload'] = {
['1'] = 'Odpowiedz na plik który chcesz ściągnąć na serwer. Plik musi ważyć <= 20 MB.',
['2'] = 'Plik zbyt duży, limit to 20 MB.',
['3'] = 'Nie można pobrać pliku, prawdopodobnie jest zbyt stary.',
['4'] = 'Wystąpił błąd podczas pobierania pliku.',
['5'] = 'Pobrano plik na serwer, ścieżka: <code>%s</code>.'
},
['version'] = {
['1'] = '@%s AKA %s `[%s]` działa pod kontrolą mattata %s, stworzona przez [Matthew Hesketh](https://t.me/wrxck). Kod źródłowy jest dostępny na [GitHubie](https://github.com/wrxck/mattata).'
},
['voteban'] = {
['1'] = 'Dla kogo mam otworzyć głosowanie nad banem? Podaj @username lub ID.',
['2'] = 'Nie mogę otworzyć głosowania nad banem tego użytkownika, ponieważ jest to moderator lub administrator tej grupy.',
['3'] = 'Nie mogę otworzyć głosowania nad banem tego użytkownika, ponieważ opuścił on tę grupę lub został z niej wyrzucony.',
['4'] = 'Czy %s [%s] powinien zostać zbanowany z %s? %s głosów za jest wymaganych aby zbanować, a %s głosów przeciw jest wymaganych aby zamknąć to głosowanie bez banowania.',
['5'] = 'Tak [%s]',
['6'] = 'Nie [%s]',
['7'] = 'Grupa zdecydowała. %s [%s] został zbanowany z %s ponieważ %s ludzi tak zagłosowało.',
['8'] = 'Osiągnięto wymaganą liczba głosów za banem, jednakże nie mogę zbanować %s - może opuścił(a) on(a) groupę, lub otrzymał(a) nominację na moderatora w międzyczasie, albo ja nie mam już uprawnień administratora.',
['9'] = 'Grupa zdecydowała. Nie banuję %s [%s] z %s ponieważ wymaganych %s ludzi zagłosowało przeciwko banowi.',
['10'] = 'Głosowałeś za banem dla %s [%s]!',
['11'] = 'Głos został cofnięty, możesz zagłosować ponownie.',
['12'] = 'Zagłosowałeś przeciwko banowi dla %s [%s]!',
['13'] = 'A vote-ban has already been opened for this user!'
},
['weather'] = {
['1'] = 'Nie masz ustawionej lokalizacji. Użyj /setloc <lokalizacja> aby ustawić.',
['2'] = 'Aktualna temperatura: %s (odczuwalna: %s) w %s. %s'
},
['welcome'] = {
['1'] = 'Przeczytaj zasady'
},
['allowlist'] = {
['1'] = 'Kogo mam przestać ignorować? Podaj @username lub ID.',
['2'] = 'Nie mogę przestać ignorować tego użytkownika, ponieważ jest to moderator lub administrator tej grupy.',
['3'] = 'Nie mogę przestać ignorować tego użytkownika, ponieważ opuścił on tę grupę.',
['4'] = 'Nie mogę przestać ignorować tego użytkownika, ponieważ został on zbanowany.',
},
['wikipedia'] = {
['1'] = 'Czytaj więcej'
},
['youtube'] = {
['1'] = 'Poprzedni',
['2'] = 'Następny',
['3'] = 'Strona %s z %s'
}
}
\ No newline at end of file
diff --git a/languages/pt_br.lua b/languages/pt_br.lua
index 7030a4c..ba38931 100644
--- a/languages/pt_br.lua
+++ b/languages/pt_br.lua
@@ -1,734 +1,735 @@
-- This is a language file for mattata
-- Language: pt-br
-- Author: American_Jesus
-- DO NOT CHANGE ANYTHING THAT BEGINS OR ENDS WITH A %
-- THESE ARE PLACEHOLDERS!
-- DO NOT CHANGE ANY MARKDOWN/HTML FORMATTING!
-- IF YOU ARE UNSURE, ASK ON TELEGRAM (t.me/mattataDev)
return {
['errors'] = {
['connection'] = 'Erro de conexão.',
['results'] = 'Eu não consegui encontrar nenhum resultado para isso.',
['supergroup'] = 'Este comando só pode ser usado em super grupos.',
['admin'] = 'Precisa ser moderador ou administrador neste grupo para usar este comando.',
['unknown'] = 'Eu não reconheço esse(s) utilizador(es). Se gostaria de me ensinar quem ele(s) são, encaminhe-me uma mensagem dele(s) para qualquer conversa que eu estou.',
['generic'] = 'Ocorreu um erro!',
['use'] = 'Você não tem permissão para usar isso!',
['private'] = 'You can only use this command in private chat!'
},
['addcommand'] = {
['1'] = 'Please specify the command in the format <code>/command - description</code>',
['2'] = 'I couldn\'t retrieve my commands!',
['3'] = 'The command description can\'t be longer than 256 characters!',
['4'] = 'An unknown error occurred! I couldn\'t add your command!',
['5'] = 'Success! Command added.'
},
['addrule'] = {
['1'] = 'Please specify the rule you would like to add!',
['2'] = 'You don\'t have any rules to add to! Please set group rules using /setrules!',
['3'] = 'I couldn\'t add that rule, as it would make the length of the rules longer than Telegram\'s 4096 character limit!',
['4'] = 'I couldn\'t add that rule, it appears it contains invalid Markdown formatting!',
['5'] = 'Successfully updated the rules!'
},
['addslap'] = {
['1'] = 'You can only use this command in groups!',
['2'] = 'The slap cannot contain curly braces apart from placeholders!',
['3'] = 'The slap cannot be any longer than 256 characters in length!',
['4'] = 'I\'ve successfully added that slap as a possibility for /slap in this group!',
['5'] = 'You must include placeholders in your slap. Use {ME} for the person executing and {THEM} for the victim.'
},
['administration'] = {
['1'] = 'Enable Administration',
['2'] = 'Disable Administration',
['3'] = 'Anti-Spam Settings',
['4'] = 'Warning Settings',
['5'] = 'Vote-Ban Settings',
['6'] = 'Welcome New Users?',
['7'] = 'Send Rules On Join?',
['8'] = 'Send Rules In Group?',
['9'] = 'Back',
['10'] = 'Next',
['11'] = 'Word Filter',
['12'] = 'Anti-Bot',
['13'] = 'Anti-Link',
['14'] = 'Log Actions?',
['15'] = 'Anti-RTL',
['16'] = 'Anti-Spam Action',
['17'] = 'Ban',
['18'] = 'Kick',
['19'] = 'Delete Commands?',
['20'] = 'Force Group Language?',
['21'] = 'Send Settings In Group?',
['22'] = 'Delete Reply On Action?',
['23'] = 'Require Captcha?',
['24'] = 'Use Inline Captcha?',
['25'] = 'Ban SpamWatch-flagged users?',
['26'] = 'Number of warnings until %s:',
['27'] = 'Upvotes needed to ban:',
['28'] = 'Downvotes needed to dismiss:',
['29'] = 'Deleted %s, and its matching link from the database!',
['30'] = 'There were no entries found in the database matching "%s"!',
['31'] = 'You\'re not an administrator in that chat!',
['32'] = 'The minimum number of upvotes required for a vote-ban is %s.',
['33'] = 'The maximum number of upvotes required for a vote-ban is %s.',
['34'] = 'The minimum number of downvotes required for a vote-ban is %s.',
['35'] = 'The maximum number of downvotes required for a vote-ban is %s.',
['36'] = 'The maximum number of warnings is %s.',
['37'] = 'The minimum number of warnings is %s.',
['38'] = 'You can add one or more words to the word filter by using /filter <word(s)>',
['39'] = 'You will no longer be reminded that the administration plugin is disabled. To enable it, use /administration.',
['40'] = 'That\'s not a valid chat!',
['41'] = 'You don\'t appear to be an administrator in that chat!',
['42'] = 'My administrative functionality can only be used in groups/channels! If you\'re looking for help with using my administrative functionality, check out the "Administration" section of /help! Alternatively, if you wish to manage the settings for a group you administrate, you can do so here by using the syntax /administration <chat>.',
['43'] = 'Use the keyboard below to adjust the administration settings for <b>%s</b>:',
['44'] = 'Please send me a [private message](https://t.me/%s), so that I can send you this information.',
['45'] = 'I have sent you the information you requested via private chat.',
['46'] = 'Remove Channel Pins?',
['47'] = 'Remove Other Pins?',
['48'] = 'Remove Pasted Code?',
['49'] = 'Prevent Inline Bots?',
['50'] = 'Kick Media On Join?',
['51'] = 'Enable Plugins For Admins?',
['52'] = 'Kick URLs On Join?'
},
['afk'] = {
['1'] = 'Desculpe, receio que este elemento esteja disponível somente para utilizadores com um @utilizador público!',
['2'] = '%s voltou depois de estar AFK por %s!',
['3'] = 'Nota',
['4'] = '%s está agora AFK.%s'
},
['antispam'] = {
['1'] = 'Desabilitar',
['2'] = 'Habilitar',
['3'] = 'Desabilitar limite',
['4'] = 'Habilitar limite para %s',
['5'] = 'Todas as Configurações de Administração',
['6'] = '%s [%s] has kicked %s [%s] from %s [%s] for hitting the configured anti-spam limit for [%s] media.',
['7'] = 'Kicked %s for hitting the configured antispam limit for [%s] media.',
['8'] = 'The maximum limit is 100.',
['9'] = 'The minimum limit is 1.',
['10'] = 'Modificar as configurações de anti-spam para %s abaixo:',
['11'] = 'Hey %s, if you\'re going to send code that is longer than %s characters in length, please do so using /paste in <a href="https://t.me/%s">private chat with me</a>!',
['12'] = '%s <code>[%s]</code> has %s %s <code>[%s]</code> from %s <code>[%s]</code> for sending Telegram invite link(s).\n#chat%s #user%s',
['13'] = '%s %s for sending Telegram invite link(s).',
['14'] = 'Hey, I noticed you\'ve got anti-link enabled and you\'re currently not allowing your users to mention a chat you\'ve just mentioned, if you\'d like to allowlist it, use /allowlink <links>.',
['15'] = 'Kicked %s <code>[%s]</code> from %s <code>[%s]</code> for sending media within their first few messages.\n#chat%s #user%s',
['16'] = 'Kicked %s <code>[%s]</code> from %s <code>[%s]</code> for sending a URL within their first few messages.\n#chat%s #user%s',
['17'] = 'Action',
['18'] = 'Kick',
['19'] = 'Ban',
['20'] = 'Mute'
},
['appstore'] = {
['1'] = 'Ver no iTunes',
['2'] = 'rating',
['3'] = 'ratings'
},
['authspotify'] = {
['1'] = 'You are already authorised using that account.',
['2'] = 'Authorising, please wait...',
['3'] = 'A connection error occured. Are you sure you replied with the correct link? It should look like',
['4'] = 'Successfully authorised your Spotify account!'
},
['avatar'] = {
['1'] = 'Não consegui obter fotos de perfil para esse utilizador, verifique se especificou um nome de utilizador ou ID numérico válido.',
['2'] = 'Esse utilizador não tem fotos de perfil.',
['3'] = 'Esse utilizador não tem assim tantas de perfil!',
['4'] = 'That user has opted-out of data-collecting functionality, therefore I am not able to show you any of their profile photos.',
['5'] = 'User: %s\nPhoto: %s/%s\nSend /avatar %s [offset] to @%s to view a specific photo of this user',
['6'] = 'User: %s\nPhoto: %s/%s\nUse /avatar %s [offset] to view a specific photo of this user'
},
['ban'] = {
['1'] = 'Qual utilizador gostaria que eu bane? Pode especificar esse utilizador pelo seu @username ou ID numérico.',
['2'] = 'Não consigo banir esse utilizador porque ele é um moderador ou um administrador neste grupo.',
['3'] = 'Não consigo banir este utilizador porque ele saiu deste grupo.',
['4'] = 'Não consigo banir este utilizador porque ele já foi banido deste grupo.',
['5'] = 'Eu preciso ter permissões administrativas para banir esse utilizador. Corrija este problema e tente novamente.',
['6'] = '%s <code>[%s]</code> has banned %s <code>[%s]</code> from %s <code>[%s]</code>%s.\n%s %s',
['7'] = '%s has banned %s%s.'
},
['bash'] = {
['1'] = 'Especifique um comando para executar!',
['2'] = 'Sucesso!'
},
['blocklist'] = {
['1'] = 'Qual utilizador gostaria de adicionar a lista negra? Pode especificar este utilizador pelo seu @username ou ID numérico.',
['2'] = 'Não consigo adicionar a lista negra esse utilizador porque ele é um moderador ou um administrador neste grupo.',
['3'] = 'Não consigo adicionar a lista negra esse utilizador porque ele já deixou este grupo.',
['4'] = 'Não consigo adicionar a lista negra esse utilizador porque ele já foi banido neste grupo.',
['5'] = '%s <code>[%s]</code> has blocklisted %s <code>[%s]</code> from using %s <code>[%s]</code> in %s <code>[%s]</code>%s.\n%s %s',
['6'] = '%s has blocklisted %s from using %s%s.'
},
['blocklistchat'] = {
['1'] = '%s foi adicionado a lista negra, e vou deixar lá quem eu adicionar!',
['2'] = '%s é um utilizador, este comando é apenas para lista negras em conversas como grupos e canais!',
['3'] = '%s não parece ser uma conversa valida!'
},
['bugreport'] = {
['1'] = 'Sucesso! Seu relatório de bug foi enviado. O ID deste relatório é #%s.',
['2'] = 'Ocorreu um problema enquanto relatava esse bug! Ah, a ironia!'
},
['calc'] = {
['1'] = 'Clique para enviar o resultado.',
['2'] = '"%s" was an unexpected word!',
['3'] = 'You cannot have a unit before a number!'
},
['captionbotai'] = {
['1'] = 'Eu realmente não posso descrever essa imagem!'
},
['cats'] = {
['1'] = 'Meow!'
},
['channel'] = {
['1'] = 'Não tem permissão para usar isso!',
['2'] = 'Parece já não ser um administrador nesse grupo!',
['3'] = 'Não consegui enviar a sua mensagem, tem certeza de que ainda tenho permissão para enviar mensagens nesse grupo?',
['4'] = 'A sua mensagem foi enviada!',
['5'] = 'Não consegui recuperar uma lista de administradores para desse grupo!',
['6'] = 'Não parece ser um administrador desse grupo!',
['7'] = 'Especifique a mensagem a enviar, utilizando a sintaxe /channel <canal> <mensagem>.',
['8'] = 'Tem certeza de que deseja enviar esta mensagem? É assim que vai aparecer:',
['9'] = 'Sim, tenho a certeza!',
['10'] = 'Essa mensagem contém formatação Markdown inválida! Corrija a sintaxe e tente novamente.'
},
['chatroulette'] = {
['1'] = 'Hey! Please don\'t send messages longer than %s characters. We don\'t want to annoy the other user!',
['2'] = '*Anonymous said:*\n```\n%s\n```\nTo end your session, send /endchat.',
['3'] = 'I\'m afraid I lost connection from the other user! To begin a new chat, please send /chatroulette!',
['4'] = 'The other person you were chatting with has ended the session. To start a new one, send /chatroulette.',
['5'] = 'Successfully ended your session. To start a new one, send /chatroulette.',
['6'] = 'I have successfully removed you from the list of available users.',
['7'] = 'You don\'t have a session set up at the moment. To start one, send /chatroulette.',
['8'] = 'Finding you a session, please wait...',
['9'] = 'I\'m afraid there aren\'t any available users right now, but I have added you to the list of available users! To stop this completely, please send /endchat.',
['10'] = 'I have successfully paired you with another user to chat to! Please remember to be kind to them! To end the chat, send /endchat.',
['11'] = 'I\'m afraid the user who I tried to pair you with has since blocked me. Please try and send /chatroulette again to try and connect to me!',
['12'] = 'I have successfully paired you with another user to chat to! Please remember to be kind to them! To end the chat, send /endchat.'
},
['commandstats'] = {
['1'] = 'Nenhum comando foi enviado neste chat!',
['2'] = '<b>Estatísticas de comandos para:</b> %s\n\n%s\n<b>Total de comandos enviados:</b> %s',
['3'] = 'As estatísticas de comandos para este chat foram resetadas!',
['4'] = 'Não consegui resetar as estatísticas de comandos para este chat. Talvez eu já as tenha resetado?'
},
['control'] = {
['1'] = 'Pfft, querias!',
['2'] = '%s está recarregando...'
},
['copypasta'] = {
['1'] = 'O texto respondido não deverá exceder %s caracteres!'
},
['coronavirus'] = {
['1'] = [[*COVID-19 Statistics for:* %s
*New confirmed cases:* %s
*Total confirmed cases:* %s
*New deaths:* %s
*Total deaths:* %s
*New recovered cases:* %s
*Total recovered cases:* %s]]
},
['counter'] = {
['1'] = 'Eu não pude adicionar um contador a essa mensagem!'
},
['custom'] = {
['1'] = 'Sucesso! Essa mensagem será enviada toda vez que alguém usar %s!',
['2'] = 'O trigger "%s" não existe!',
['3'] = 'O trigger "%s" foi apagado!',
['4'] = 'Ainda não tem triggers personalizado definidos!',
['5'] = 'Comandos personalizados para %s:\n',
['6'] = 'Para criar um novo comando personalizado, use a seguinte sintaxe:\n/custom new #trigger <valor>. Para listar todos os triggers atuais, use /custom list. Para apagar um trigger, use /custom del #trigger.'
},
['delete'] = {
['1'] = 'Não consegui apagar essa mensagem. Talvez a mensagem seja muito antiga ou inexistente?'
},
['demote'] = {
['1'] = 'Qual utilizador gostaria que eu despromovesse? Pode especificar este utilizador pelo seu @username ou ID numérico.',
['2'] = 'Eu não posso despromover esse utilizador porque ele não é um moderador ou um administrador neste grupo.',
['3'] = 'Eu não posso despromover esse utilizador porque ele já deixou este grupo.',
['4'] = 'Não consigo despromover esse utilizador porque ele já foi expulso deste grupo.'
},
['doge'] = {
['1'] = 'Por favor, escreva o texto que deseja para Doge-ify. Cada sentença deve ser separada usando barras (/) ou novas linhas.'
},
['donate'] = {
['1'] = '<b>Hello, %s!</b>\n\nIf you\'re feeling generous, you can contribute to the mattata project by making a monetary donation of any amount. This will go towards server costs and any time and resources used to develop mattata. This is an optional act, however it is greatly appreciated and your name will also be listed publically on mattata\'s GitHub page.\n\nIf you\'re still interested, you can donate <a href="https://paypal.me/wrxck">here</a>. Thank you for your continued support!'
},
['exec'] = {
['1'] = 'Selecione a linguagem em que gostaria de executar o seu código:',
['2'] = 'Ocorreu um erro! Tempo de ligação expirou. Está tentando me engasgar?',
['3'] = 'Selecionou "%s" – tem a certeza?',
['4'] = 'Voltar',
['5'] = 'Tenho certeza',
['6'] = 'Introduza um fragmento de código que pretende executar. Não precisa especificar a linguagem, faremos isso depois!',
['7'] = 'Selecione a linguagem em que gostaria de executar o seu código:'
},
['facebook'] = {
['1'] = 'Ocorreu um erro!',
['2'] = 'Escreva o nome de utilizador do Facebook do qual gostaria de obter a foto do perfil.',
['3'] = 'Visitas @%s no Facebook'
},
['fact'] = {
['1'] = 'Gerar Outro'
},
['fban'] = {
['1'] = 'Which user would you like me to Fed-ban? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot Fed-ban this user because they are a moderator or an administrator in this chat.'
},
['flickr'] = {
['1'] = 'Pesquisou por:',
['2'] = 'Introduza uma consulta de pesquisa (Ou seja, o que quer que eu procure no Flickr, i.e. "Big Ben" mostrara uma fotografia do Big Ben em Londres).',
['3'] = 'Mais Resultados'
},
['game'] = {
['1'] = 'Total de vitórias: %s\nTotal de derrotas: %s\nBalanço: %s mattacoins',
['2'] = 'Entrar no Jogo',
['3'] = 'Este jogo já acabou!',
['4'] = 'Não é a sua vez!',
['5'] = 'Não faz parte deste jogo!',
['6'] = 'Não pode ser ai!',
['7'] = 'Já faz parte deste jogo!',
['8'] = 'Este jogo já começou!',
['9'] = '%s [%s] está a jogar contra %s [%s]\nE é a vez de %s\'s a jogar!',
['10'] = '%s ganhou o jogo contra %s!',
['11'] = '%s criou um jogo contra %s!',
['12'] = 'A espera pelo oponente...',
['13'] = 'Jogo do Galo',
['14'] = 'Clique para enviar o jogo para o seu grupo!',
['15'] = 'Estatísticas %s:\n',
['16'] = 'Jogar ao Jogo do Galo!'
},
['gblocklist'] = {
['1'] = 'Responda ao utilizador que deseja incluir na lista negra global ou especifique-o por nome de utilizador/ID.',
['2'] = 'Não conseguir obter informações sobre "%s", verifique se é um nome de utilizador/ID válido e tente novamente.',
['3'] = 'Isso é um %s, não um utilizador!'
},
['gif'] = {
['1'] = 'Introduza uma consulta de pesquisa (Que é, o que quer que eu procure no GIPHY, ex: "cat" irá mostrar um GIF de um gato).'
},
['gallowlist'] = {
['1'] = 'Responda ao utilizador que deseja incluir na lista branca global ou especifique-o por nome de utilizador/ID.',
['2'] = 'Não conseguir obter informações sobre "%s", verifique se é um nome de utilizador/ID válido e tente novamente.',
['3'] = 'Isso é um %s, não um utilizador!'
},
['hackernews'] = {
['1'] = 'Histórias principais de Hacker News:'
},
['help'] = {
['1'] = 'Nenhum resultado encontrado!',
['2'] = 'Não foram encontrados elementos que correspondam a "%s", Por favor, tente ser mais específico!',
['3'] = '\n\nArgumentos: <requer> [opcional]\n\nProcurar um elemento ou obter ajuda com um comando usando minha funcionalidade de pesquisa inline - apenas me mencione em qualquer grupo usando a sintaxe @%s <texto de procura>.',
['4'] = 'Anterior',
['5'] = 'Seguinte',
['6'] = 'Voltar',
['7'] = 'Procurar',
['8'] = 'Está na pagina %s de %s!',
['9'] = [[
Posso executar muitas ações administrativas nos seus grupos, basta adicionar-me como administrador e envie /administration para ajustar as configurações do seu grupo.
Aqui estão alguns comandos administrativos e um breve comentário sobre o que eles fazem:
• /pin <texto> - Envie uma mensagem formatada em Markdown que pode ser editada usando o mesmo comando com texto diferente, para evitar de ter que afixar novamente uma mensagem se não poder edita-la (o que acontece se a mensagem tiver mais de 48 horas)
• /ban - Banir um utilizador respondendo a uma de suas mensagens ou especificando com o nome de utilizador/ID
• /kick - Expulsar (banir e depois remover ban) um utilizador respondendo a uma de suas mensagens ou especificando com o nome de utilizador/ID
• /unban - Remover ban a um utilizador respondendo a uma de suas mensagens ou especificando com o nome de utilizador/ID
• /setrules <texto> - Defina o texto formatado como Markdown como as regras de grupo, que serão enviadas sempre que alguém usar /rules
]],
['10'] = [[
• /setwelcome - Defina o texto formatado como Markdown como uma mensagem de boas-vindas que será enviada sempre que um utilizador se juntar ao seu grupo (A mensagem de boas-vindas pode ser desativada no menu de administração, acessível via /administration). Pode usar espaços reservados para personalizar automaticamente a mensagem de boas-vindas para cada utilizador. Use $user_id para inserir o ID numérico do utilizador, $chat_id para inserir o ID numérico do grupo, $name para inserir o nome do utilizador, $title para inserir o título do grupo e $username para inserir o nome de utilizador do utilizador (Se o utilizador não tiver um @utilizador, o seu nome será usado em vez disso, para evitar é melhor usar isso com $name)
• /warn - Avisa um utilizador, e bane-o quando atingirem o número máximo de avisos
• /mod - Promove um utilizador respondendo a, dando acesso a comandos administrativos como /ban, /kick, /warn etc. (isto é útil quando não quer que alguém tenha a capacidade de apagar mensagens!)
• /demod - Despromove um utilizador respondendo a, removendo do seu estatuto de moderação e revogando sua capacidade de usar comandos administrativos
• /staff - Mostrar o criador, administradores e moderadores do grupo numa lista bem formatada
]],
['11'] = [[
• /report - Encaminha a mensagem de resposta para todos os administradores e os alerta da situação atual
• /setlink <URL> - Define o endereço do grupo para o URL fornecido, que será enviado sempre que alguém usar /link
• /links <texto> - Listas brancas todos os endereços Telegram encontrados no texto fornecido (inclui endereços de @utilizador)
]],
['12'] = 'Abaixo estão alguns links que pode achar úteis:',
['13'] = 'Desenvolvimento',
['14'] = 'Canal',
['15'] = 'Suporte',
['16'] = 'FAQ',
['17'] = 'Código Fonte',
['18'] = 'Doar',
['19'] = 'Rate',
['20'] = 'Registo de Administração',
['21'] = 'Definições de administrador',
['22'] = 'Plugins',
['23'] = [[
<b>Olá %s! O meu nome é %s, é um prazer conhece-lo</b> %s
Eu entendo muitos comandos, que você pode aprender mais sobre pressionando o botão "Comandos" usando o teclado acoplado.
%s <b>Dica:</b> Use o botão "Definições" para alterar o modo como eu trabalho%s!
%s <b>Find me useful, or just want to help?</b> Donations are very much appreciated, use /donate for more information!
]],
['24'] = 'em'
},
['id'] = {
['1'] = 'Desculpe, mas eu não reconheço esse utilizador. Ensine-me quem ele é, encaminhando uma mensagem dele a mim ou faça com que ele me enviem uma mensagem.',
['2'] = 'Grupo consultado:',
['3'] = 'Este grupo:',
['4'] = 'Clique para enviar o resultado!'
},
['imdb'] = {
['1'] = 'Anterior',
['2'] = 'Seguinte',
['3'] = 'Está na pagina %s de %s!'
},
['import'] = {
['1'] = 'Eu não reconheço esse grupo!',
['2'] = 'Isso não é um super grupo, portanto não consigo importar nenhuma configuração dele!',
['3'] = 'Configurações administrativas importadas e plugins alternados com sucesso de %s para %s!'
},
['info'] = {
['1'] = [[
```
Redis:
%s Ficheiro de Configuração: %s
%s Modo: %s
%s Porta TCP: %s
%s Versão: %s
%s Tempo de atividade: %s days
%s ID do Processo: %s
%s Keys Expiradas: %s
%s Contagem de Utilizadores: %s
%s Contagem de Grupos: %s
Sistema:
%s OS: %s
```
]]
},
['instagram'] = {
['1'] = '@%s no Instagram'
},
['ipsw'] = {
['1'] = '<b>%s</b> iOS %s\n\n<code>MD5 sum: %s\nSHA1 sum: %s\nTamanho do ficheiro: %s GB</code>\n\n<i>%s %s</i>',
['2'] = 'Este firmware não está mais sendo assinado!',
['3'] = 'Este firmware ainda está sendo assinado!',
['4'] = 'Selecione o seu modelo:',
['5'] = 'Selecione a versão do firmware:',
['6'] = 'Selecione seu tipo de dispositivo:',
['7'] = 'iPod Touch',
['8'] = 'iPhone',
['9'] = 'iPad',
['10'] = 'Apple TV'
},
['ispwned'] = {
['1'] = 'Essa conta foi encontrada nos seguintes fugas de informação:'
},
['itunes'] = {
['1'] = 'Nome:',
['2'] = 'Artista:',
['3'] = 'Álbum:',
['4'] = 'Faixa:',
['5'] = 'Disco:',
['6'] = 'A consulta original não pôde ser encontrada, provavelmente apagou a mensagem original.',
['7'] = 'A capa pode ser encontrada abaixo:',
['8'] = 'Introduza uma consulta de pesquisa (Ou seja, o que quer que eu procure no iTunes, Ex: "Green Day American Idiot" ira mostrar informações sobre o primeiro resultado para American Idiot dos Green Day).',
['9'] = 'Obter Capa do Álbum'
},
['kick'] = {
['1'] = 'Qual utilizador gostaria que eu expulsasse? Pode especificar este utilizador por seu @utilizador ou ID numérico.',
['2'] = 'Eu não consigo expulsar esse utilizador porque ele é um moderador ou administrador neste grupo.',
['3'] = 'Eu não consigo expulsar esse utilizador porque ele já deixou este grupo.',
['4'] = 'Não consigo expulsar esse utilizador porque ele já foi expulso deste grupo.',
['5'] = 'Eu preciso ter permissões administrativas para expulsar esse utilizador. Corrija este problema e tente novamente.'
},
['lastfm'] = {
['1'] = '%s\'s utilizador de last.fm foi definido para "%s".',
['2'] = 'O seu utilizador last.fm foi esquecido!',
['3'] = 'Não tem atualmente um utilizado do last.fm definido!',
['4'] = 'Especifique o utilizador do last.fm ou defina com /fmset.',
['5'] = 'Nenhum histórico foi encontrado para este utilizador.',
['6'] = '%s está atualmente a ouvir:\n',
['7'] = '%s ouviu ultimamente:\n',
['8'] = 'Desconhecido',
['9'] = 'Clique para enviar o resultado.'
},
['location'] = {
['1'] = 'Não tem uma localização definida. O que nova localização gostaria que fosse?'
},
['logchat'] = {
['1'] = 'Escreva o nome de utilizador ou ID numérico do grupo no qual deseja registar todas as ações administrativas.',
['2'] = 'A verificar se o grupo é válido...',
['3'] = 'Desculpe, parece que especificou um grupo inválido, ou especificou um grupo que eu ainda não adicionado. Corrija e tente novamente.',
['4'] = 'Não pode definir um utilizador como o seu grupo de registo!',
['5'] = 'Não parece ser administrador nesse grupo!',
['6'] = 'Parece que eu já estou registar ações administrativas nesse grupo! Use /logchat para especificar um novo.',
['7'] = 'Esse grupo é válido, vou tentar e enviar uma mensagem de teste para ele, apenas para garantir que tenho permissão para falar!',
['8'] = 'Olá mundo - esta é uma mensagem de teste para verificar minhas permissões de escrita - se estiver a ler isto, então tudo correu bem!',
['9'] = 'Tudo feito! De agora em diante, Quaisquer ações administrativas neste grupo serão registadas em %s - para mudar o grupo que quer que eu registe ações administrativas, basta enviar /logchat.'
},
['lua'] = {
['1'] = 'Digite uma string de Lua para executar!'
},
['lyrics'] = {
['1'] = 'Spotify',
['2'] = 'Mostrar letra',
['3'] = 'Introduza uma consulta de pesquisa (isto é, que musica/artista/letra quer que eu obtenha letras, Ex: "Green Day Basket Case" irá mostrar a letra para Basket Case dos Green Day).'
},
['minecraft'] = {
['1'] = '<b>%s mudou o seu utilizador %s vez</b>',
['2'] = '<b>%s mudou o seu utilizador %s vezes</b>',
['3'] = 'Anterior',
['4'] = 'Seguinte',
['5'] = 'Voltar',
['6'] = 'UUID',
['7'] = 'Avatar',
['8'] = 'Histórico de Utilizador',
['9'] = 'Selecione uma opção:',
['10'] = 'Escreva o nome de utilizador do jogador do Minecraft que gostaria de ver informações (Ex: enviando "Notch" irá ver as informações sobre o jogador Notch).',
['11'] = 'Os nomes de utilizadores do Minecraft têm entre 3 e 16 caracteres.'
},
['mute'] = {
['1'] = 'Que utilizador gostaria que ficasse silenciar? Pode especificar este utilizador pelo seu @utilizador ou ID numérico.',
['2'] = 'Não consigo silenciar este utilizador porque já estão silenciados neste grupo.',
['3'] = 'Não consigo silenciar este utilizador porque ele é um moderador ou administrador neste grupo.',
['4'] = 'Não consigo silenciar este utilizador porque ele já deixou (ou foi expulso) deste grupo.',
['5'] = 'Eu preciso ter permissões administrativas para silenciar este utilizador. Corrija este problema e tente novamente.'
},
['myspotify'] = {
['1'] = 'Perfil',
['2'] = 'Seguindo',
['3'] = 'Recently Played',
['4'] = 'Currently Playing',
['5'] = 'Top Tracks',
['6'] = 'Top Artistas',
['7'] = 'You don\'t appear to be following any artists!',
['8'] = 'Seus Top Artistas',
['9'] = 'You don\'t appear to have any tracks in your library!',
['10'] = 'Your Top Tracks',
['11'] = 'You don\'t appear to be following any artists!',
['12'] = 'Artists You Follow',
['13'] = 'You don\'t appear to have recently played any tracks!',
['14'] = '<b>Recently Played</b>\n%s %s\n%s %s\n%s Listened to at %s:%s on %s/%s/%s.',
['15'] = 'The request has been accepted for processing, but the processing has not been completed.',
['16'] = 'You don\'t appear to be listening to anything right now!',
['17'] = 'Currently Playing',
['18'] = 'An error occured whilst re-authorising your Spotify account!',
['19'] = 'Successfully re-authorised your Spotify account! Processing your original request...',
['20'] = 'Re-authorising your Spotify account, please wait...',
['21'] = 'You need to authorise mattata in order to connect your Spotify account. Click [here](https://accounts.spotify.com/en/authorize?client_id=%s&response_type=code&redirect_uri=%s&scope=user-library-read,playlist-read-private,playlist-read-collaborative,user-read-private,user-read-email,user-follow-read,user-top-read,user-read-playback-state,user-read-recently-played,user-read-currently-playing,user-modify-playback-state) and press the green "OKAY" button to link mattata to your Spotify account. After you\'ve done that, send the link you were redirected to (it should begin with "%s", followed by a unique code) in reply to this message.',
['22'] = 'Playlists',
['23'] = 'Use Inline Mode',
['24'] = 'Lyrics',
['25'] = 'No devices were found.',
['26'] = 'You don\'t appear to have any playlists.',
['27'] = 'Your Playlists',
['28'] = '%s %s [%s tracks]',
['29'] = '%s %s [%s]\nSpotify %s user\n\n<b>Devices:</b>\n%s',
['30'] = 'Playing previous track...',
['31'] = 'You are not a premium user!',
['32'] = 'I could not find any devices.',
['33'] = 'Playing next track...',
['34'] = 'Resuming track...',
['35'] = 'Your device is temporarily unavailable...',
['36'] = 'No devices were found!',
['37'] = 'Pausing track...',
['38'] = 'Now playing',
['39'] = 'Shuffling your music...',
['40'] = 'That\'s not a valid volume. Please specify a number between 0 and 100.',
['41'] = 'The volume has been set to %s%%!',
['42'] = 'This message is using an old version of this plugin, please request a new one by sending /myspotify!'
},
['name'] = {
['1'] = 'O nome pelo qual respondo atualmente é "%s" - para alterar isso, use /name <texto> (onde <texto> é o nome pelo qual quer que eu responda).',
['2'] = 'Meu novo nome precisa ter entre 2 e 32 caracteres!',
['3'] = 'Meu nome só pode conter caracteres alfanuméricos!',
['4'] = 'Vou agora responder a "%s", em vez de "%s" - para alterar isso, use /name <texto> (onde <text> o nome a qual quer que eu responda).'
},
['netflix'] = {
['1'] = 'Ver mais.'
},
['news'] = {
['1'] = '"<code>%s</code>" não é um padrão Lua válido.',
['2'] = 'Eu não consegui obter uma lista de fontes.',
['3'] = '<b>Fontes de notícias encontradas correspondentes</b> "<code>%s</code>":\n\n%s',
['4'] = '<b>Aqui estão as fontes de notícias disponíveis que pode usar com</b> /news<b>. Use</b> /nsources &lt;pesquisa&gt; <b>para pesquisar a lista de fontes de notícias para um conjunto mais específico de resultados. As pesquisas são combinadas usando padrões Lua</b>\n\n%s',
['5'] = 'Não tem uma fonte de notícias preferida. Use /setnews <source> para definir uma. Veja a lista de fontes usando /nsources, ou restringir os resultados usando /nsources <pesquisa>.',
['6'] = 'A sua fonte de notícias preferida atual é %s. Use /setnews <source> para alterar isso. Veja a lista de fontes usando /nsources, ou restringir os resultados usando /nsources <pesquisa>.',
['7'] = 'A sua fonte preferida já está definida para %s! Use /news para ver a história principal atual.',
['8'] = 'Isso não é uma fonte de notícias válida. Exibir uma lista de fontes usando /nsources, ou restringir os resultados usando /nsources <pesquisa>.',
['9'] = 'A sua fonte de notícias preferida foi atualizada para %s! Use /news para ver a história principal atual.',
['10'] = 'Isso não é uma fonte válida, use /nsources para ver uma lista de fontes disponíveis. Se tem uma fonte preferida, use /setnews <fonte> Para receber automaticamente notícias daquela fonte enviada quando envie /news, sem quaisquer argumentos necessários.',
['11'] = 'Ver mais.'
},
['nick'] = {
['1'] = 'O seu nick foi esquecido!',
['2'] = 'O seu nick foi definido como "%s"!'
},
['optout'] = {
['1'] = 'Optou por enviar os seus dados! Use /optout para excluir.',
['2'] = 'Optou por não enviar os seus dados! Use /optin para enviar.'
},
['paste'] = {
['1'] = 'Selecione um serviço para enviar copia:'
},
['pin'] = {
['1'] = 'Não definiu ainda uma mensagem afixada. Use /pin <texto> para definir uma. A formatação Markdown é suportada.',
['2'] = 'Aqui está a última mensagem gerada usando /pin.',
['3'] = 'Eu encontrei uma mensagem afixada existente na base de dados, mas a mensagem que enviei parece ter sido apagada, e não consigo mais encontra-la. Pode definir uma nova usando /pin <texto>. A formatação Markdown é suportada.',
['4'] = 'Ocorreu um erro ao atualizar a mensagem afixada. Ou o texto inserido continha um sintaxe Markdown inválido, ou a mensagem afixada foi apagada. Eu estou agora tentar e enviar-lhe uma mensagem afixada nova, que será capaz de encontrar abaixo - se precisar modifica-lo, depois de garantir que a mensagem ainda existe, use /pin <texto>.',
['5'] = 'Eu não consegui enviar esse texto porque ele contém um sintaxe Markdown inválido.',
['6'] = 'Clique aqui para ver a mensagem afixada, atualizado para contendo o texto que me enviou.'
},
['pokedex'] = {
['1'] = 'Nome: %s\nID: %s\nTipo: %s\nDescrição: %s'
},
['promote'] = {
['1'] = 'Não consigo promover este utilizador porque é moderador ou administrador deste grupo.',
['2'] = 'Não consigo promover este utilizador porque já saiu deste grupo.',
['3'] = 'Não consigo promover esse utilizador porque ele já foi expulso deste grupo.'
},
['quote'] = {
['1'] = 'Este utilizador desativou a funcionalidade de armazenamento de dados.',
['2'] = 'Não há citações guardadas para %s! Pode guardar um usando /save em resposta a uma mensagem que enviam.'
},
['report'] = {
['1'] = 'Please reply to the message you would like to report to the group\'s administrators.',
['2'] = 'You can\'t report your own messages, are you just trying to be funny?',
['3'] = '<b>%s precisa de ajuda em %s!</b>',
['4'] = 'Click here to view the reported message.',
['5'] = 'I\'ve successfully reported that message to %s admin(s)!'
},
['save'] = {
['1'] = 'Este utilizador desativou a funcionalidade de armazenamento de dados.',
['2'] = 'Esta mensagem foi gravada na minha base de dados, e adicionado à lista de possíveis respostas para quando /quote è usado em resposta a %s!'
},
['sed'] = {
['1'] = '%s\n\n<i>%s não quis dizer isso!</i>',
['2'] = '%s\n\n<i>%s admitiu a sua derrota.</i>',
['3'] = '%s\n\n<i>%s não tem certeza se eles estavam errados...</i>',
['4'] = 'Vai-te lixar, <i>quando é que eu estou errado?</i>',
['5'] = '"<code>%s</code>" não é um modelo Lua válido.',
- ['6'] = '<b>%s quis dizer:</b>\n<i>%s</i>',
+ ['6'] = 'Hey %s, %s seems to think you meant:\n<i>%s</i>',
['7'] = 'Sim',
['8'] = 'Não',
- ['9'] = 'Não tenho certeza'
+ ['9'] = 'Não tenho certeza',
+ ['10'] = 'Just edit your message, idiot.'
},
['setgrouplang'] = {
['1'] = 'O idioma deste grupo foi alterado para %s!',
['2'] = 'This group\'s language is currently %s.\nPlease note that some strings may not be translated as of yet. If you\'d like to change your language, select one using the keyboard below:',
['3'] = 'The option to force users to use the same language in this group is currently disabled. This setting should be toggled from /administration but, to make things easier for you, I\'ve included a button below.',
['4'] = 'Habilitar',
['5'] = 'Desabilitar'
},
['setlang'] = {
['1'] = 'O seu idioma foi definido para %s!',
['2'] = 'O seu idioma é atualmente %s.\nTome nota que algumas sequencias de caracteres podem não estar traduzidas. Se quiser alterar seu idioma, selecione um usando o teclado abaixo:'
},
['setlink'] = {
['1'] = 'Não é um URL valido.',
['2'] = 'Endereço definido com sucesso!'
},
['setrules'] = {
['1'] = 'Formato Markdown invalido.',
['2'] = 'Regras definidas com sucesso!'
},
['setwelcome'] = {
['1'] = 'O que mensagem gostaria de boas-vindas que fosse? O texto que especificar será formato em Markdown e enviado toda vez que um utilizador se juntar ao grupo (A mensagem de boas-vindas pode ser desativada no menu de administração, acessível via /administration). Pode usar espaços reservados para personalizar automaticamente a mensagem de boas-vindas para cada utilizador. Use $user_id para inserir o ID numérico do utilizador, $chat_id para inserir o ID numérico do grupo, $name para inserir o nome do utilizador, $title para inserir o título do grupo e $username para inserir o nome de utilizador do utilizador (Se o utilizador não tiver um @utilizador, o seu nome será usado em vez disso, para evitar é melhor usar isso com $name).',
['2'] = 'Ocorreu um erro ao formatar a mensagem, verifique a sintaxe de Markdown e tente novamente.',
['3'] = 'A mensagem de boas-vindas para %s foi atualizada com sucesso!'
},
['share'] = {
['1'] = 'Partilhar'
},
['shorten'] = {
['1'] = 'Selecione um URL shortener usando os botões abaixo:'
},
['shsh'] = {
['1'] = 'Eu não consegui obter qualquer blobs SHSH para esse ECID, assegure-se de que é válido e os guardou usando https://tsssaver.1conan.com.',
['2'] = 'Os blobs SHSH para esse dispositivo estão disponíveis para as seguintes versões do iOS:\n',
['3'] = 'Transferir .zip'
},
['statistics'] = {
['1'] = 'No messages have been sent in this chat!',
['2'] = '<b>Statistics for:</b> %s\n\n%s\n<b>Total messages sent:</b> %s',
['3'] = 'The statistics for this chat have been reset!',
['4'] = 'I could not reset the statistics for this chat. Perhaps they have already been reset?'
},
['steam'] = {
['1'] = 'O seu nome de utilizador do Steam foi definido para "%s".',
['2'] = '"%s" não é um nome de utilizador Steam valido.',
['3'] = '%s é utilizador do Steam desde %s, em %s. Desligou a ultima vez %s, em %s. Clique <a href="%s">aqui</a> para ver o perfil no Steam.',
['4'] = '%s, AKA "%s",'
},
['trust'] = {
['1'] = 'I cannot trust this user because they are a moderator or an administrator of this chat.',
['2'] = 'I cannot trust this user because they have already left this chat.',
['3'] = 'I cannot trust this user because they have already been kicked from this chat.'
},
['unmute'] = {
['1'] = 'Que utilizador gostaria que removesse silenciar? Pode especificar este utilizador pelo seu @utilizador ou ID numérico.',
['2'] = 'Não consigo remover silenciar a este utilizador porque não está atualmente silenciado neste grupo.',
['3'] = 'Não consigo remover silenciar a este utilizador porque ele é um moderador ou administrador neste grupo.',
['4'] = 'Não consigo remover silenciar a este utilizador porque ele já deixou (ou foi expulso) deste grupo.',
},
['untrust'] = {
['1'] = 'Which user would you like me to untrust? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot untrust this user because they are a moderator or an administrator in this chat.',
['3'] = 'I cannot untrust this user because they have already left this chat.',
['4'] = 'I cannot untrust this user because they have already been kicked from this chat.'
},
['upload'] = {
['1'] = 'Responda a mensagem do ficheiro que pretende transferir para o servidor. Deve ser <= 20 MB.',
['2'] = 'Ficheiro é demasiado grande. Deve ser <= 20 MB.',
['3'] = 'Não consegui obter esse ficheiro, é provavelmente muito antigo.',
['4'] = 'Ocorreu um erro ao recuperar esse ficheiro.',
['5'] = 'Ficheiro transferido para o servidor com sucesso - pode ser encontrado em <code>%s</code>!'
},
['voteban'] = {
['1'] = 'Qual utilizador gostaria de abrir uma votação para banir? Pode especificar este utilizador pelo seu @utilizador ou ID numérico.',
['2'] = 'Não consigo criar uma votação para este utilizador porque ele é um moderador ou administrador neste grupo.',
['3'] = 'Não consigo criar uma votação para este utilizador porque ele já deixaram (ou foi expulso) deste grupo.',
['4'] = '%s [%s] deve ser banido por %s? %s voto a favor para banir imediatamente, e %s votos contra para fechar esta votação.',
['5'] = 'Sim [%s]',
['6'] = 'Não [%s]',
['7'] = 'O povo falou. E baniu %s [%s] por %s porque %s pessoas votaram a favor.',
['8'] = 'O montante de votos a favor necessários foi atingido, no entanto, não foi pode banir %s - talvez deixou o grupo ou foi promovido desde que abrimos a votação para banir? É isso ou não tenho mais os privilégios administrativos necessários para executar esta ação!',
['9'] = 'O povo falou. E não foi banido %s [%s] por %s porque %s pessoa decidiram votar contra.',
['10'] = 'Votou a favor na decisão de banir %s [%s]!',
['11'] = 'O seu voto atual foi retirado, use os botões novamente para reenviar o seu voto.',
['12'] = 'Votou contra na decisão de banir %s [%s]!',
['13'] = 'A vote-ban has already been opened for this user!'
},
['weather'] = {
['1'] = 'Ainda não tem uma localização definida. Use /setloc <localização> para definir uma.',
['2'] = 'Está atualmente %s (parece %s) em %s. %s'
},
['welcome'] = {
['1'] = 'Regras do Grupo'
},
['allowlist'] = {
['1'] = 'Qual utilizador gostaria de adicionar à white-list? Pode especificar este utilizador pelo seu @utilizador ou ID numérico.',
['2'] = 'Não consigo adicionar à white-list esse utilizador porque ele é um moderador ou administrador neste grupo.',
['3'] = 'Não consigo adicionar à white-list esse utilizador porque ele já deixou este grupo.',
['4'] = 'Não consigo adicionar à white-list esse utilizador porque ele já foi banido neste grupo.'
},
['wikipedia'] = {
['1'] = 'Ver mais.'
},
['youtube'] = {
['1'] = 'Anterior',
['2'] = 'Seguinte',
['3'] = 'Está na pagina %s de %s!'
}
}
\ No newline at end of file
diff --git a/languages/pt_pt.lua b/languages/pt_pt.lua
index 3114fbd..2229e7a 100644
--- a/languages/pt_pt.lua
+++ b/languages/pt_pt.lua
@@ -1,734 +1,735 @@
-- This is a language file for mattata
-- Language: pt-pt
-- Author: American_Jesus
-- DO NOT CHANGE ANYTHING THAT BEGINS OR ENDS WITH A %
-- THESE ARE PLACEHOLDERS!
-- DO NOT CHANGE ANY MARKDOWN/HTML FORMATTING!
-- IF YOU ARE UNSURE, ASK ON TELEGRAM (t.me/mattataDev)
return {
['errors'] = {
['connection'] = 'Erro de ligação.',
['results'] = 'Eu não consegui encontrar nenhum resultado para isso.',
['supergroup'] = 'Este comando só pode ser usado em super grupos.',
['admin'] = 'Precisa ser moderador ou administrador neste grupo para usar este comando.',
['unknown'] = 'Eu não reconheço esse(s) utilizador(es). Se gostaria de me ensinar quem ele(s) são, encaminhe-me uma mensagem dele(s) para qualquer conversa que eu estou.',
['generic'] = 'Ocorreu um erro!',
['use'] = 'You are not allowed to use this!',
['private'] = 'You can only use this command in private chat!'
},
['addcommand'] = {
['1'] = 'Please specify the command in the format <code>/command - description</code>',
['2'] = 'I couldn\'t retrieve my commands!',
['3'] = 'The command description can\'t be longer than 256 characters!',
['4'] = 'An unknown error occurred! I couldn\'t add your command!',
['5'] = 'Success! Command added.'
},
['addrule'] = {
['1'] = 'Please specify the rule you would like to add!',
['2'] = 'You don\'t have any rules to add to! Please set group rules using /setrules!',
['3'] = 'I couldn\'t add that rule, as it would make the length of the rules longer than Telegram\'s 4096 character limit!',
['4'] = 'I couldn\'t add that rule, it appears it contains invalid Markdown formatting!',
['5'] = 'Successfully updated the rules!'
},
['addslap'] = {
['1'] = 'You can only use this command in groups!',
['2'] = 'The slap cannot contain curly braces apart from placeholders!',
['3'] = 'The slap cannot be any longer than 256 characters in length!',
['4'] = 'I\'ve successfully added that slap as a possibility for /slap in this group!',
['5'] = 'You must include placeholders in your slap. Use {ME} for the person executing and {THEM} for the victim.'
},
['administration'] = {
['1'] = 'Enable Administration',
['2'] = 'Disable Administration',
['3'] = 'Anti-Spam Settings',
['4'] = 'Warning Settings',
['5'] = 'Vote-Ban Settings',
['6'] = 'Welcome New Users?',
['7'] = 'Send Rules On Join?',
['8'] = 'Send Rules In Group?',
['9'] = 'Back',
['10'] = 'Next',
['11'] = 'Word Filter',
['12'] = 'Anti-Bot',
['13'] = 'Anti-Link',
['14'] = 'Log Actions?',
['15'] = 'Anti-RTL',
['16'] = 'Anti-Spam Action',
['17'] = 'Ban',
['18'] = 'Kick',
['19'] = 'Delete Commands?',
['20'] = 'Force Group Language?',
['21'] = 'Send Settings In Group?',
['22'] = 'Delete Reply On Action?',
['23'] = 'Require Captcha?',
['24'] = 'Use Inline Captcha?',
['25'] = 'Ban SpamWatch-flagged users?',
['26'] = 'Number of warnings until %s:',
['27'] = 'Upvotes needed to ban:',
['28'] = 'Downvotes needed to dismiss:',
['29'] = 'Deleted %s, and its matching link from the database!',
['30'] = 'There were no entries found in the database matching "%s"!',
['31'] = 'You\'re not an administrator in that chat!',
['32'] = 'The minimum number of upvotes required for a vote-ban is %s.',
['33'] = 'The maximum number of upvotes required for a vote-ban is %s.',
['34'] = 'The minimum number of downvotes required for a vote-ban is %s.',
['35'] = 'The maximum number of downvotes required for a vote-ban is %s.',
['36'] = 'The maximum number of warnings is %s.',
['37'] = 'The minimum number of warnings is %s.',
['38'] = 'You can add one or more words to the word filter by using /filter <word(s)>',
['39'] = 'You will no longer be reminded that the administration plugin is disabled. To enable it, use /administration.',
['40'] = 'That\'s not a valid chat!',
['41'] = 'You don\'t appear to be an administrator in that chat!',
['42'] = 'My administrative functionality can only be used in groups/channels! If you\'re looking for help with using my administrative functionality, check out the "Administration" section of /help! Alternatively, if you wish to manage the settings for a group you administrate, you can do so here by using the syntax /administration <chat>.',
['43'] = 'Use the keyboard below to adjust the administration settings for <b>%s</b>:',
['44'] = 'Please send me a [private message](https://t.me/%s), so that I can send you this information.',
['45'] = 'I have sent you the information you requested via private chat.',
['46'] = 'Remove Channel Pins?',
['47'] = 'Remove Other Pins?',
['48'] = 'Remove Pasted Code?',
['49'] = 'Prevent Inline Bots?',
['50'] = 'Kick Media On Join?',
['51'] = 'Enable Plugins For Admins?',
['52'] = 'Kick URLs On Join?'
},
['afk'] = {
['1'] = 'Desculpe, receio que este elemento esteja disponível somente para utilizadores com um @utilizador público!',
['2'] = '%s voltou depois de estar AFK por %s!',
['3'] = 'Nota',
['4'] = '%s está agora AFK.%s'
},
['antispam'] = {
['1'] = 'Disable',
['2'] = 'Enable',
['3'] = 'Disable limit',
['4'] = 'Enable limits on %s',
['5'] = 'All Administration Settings',
['6'] = '%s [%s] has kicked %s [%s] from %s [%s] for hitting the configured anti-spam limit for [%s] media.',
['7'] = 'Kicked %s for hitting the configured antispam limit for [%s] media.',
['8'] = 'The maximum limit is 100.',
['9'] = 'The minimum limit is 1.',
['10'] = 'Modify the anti-spam settings for %s below:',
['11'] = 'Hey %s, if you\'re going to send code that is longer than %s characters in length, please do so using /paste in <a href="https://t.me/%s">private chat with me</a>!',
['12'] = '%s <code>[%s]</code> has %s %s <code>[%s]</code> from %s <code>[%s]</code> for sending Telegram invite link(s).\n#chat%s #user%s',
['13'] = '%s %s for sending Telegram invite link(s).',
['14'] = 'Hey, I noticed you\'ve got anti-link enabled and you\'re currently not allowing your users to mention a chat you\'ve just mentioned, if you\'d like to allowlist it, use /allowlink <links>.',
['15'] = 'Kicked %s <code>[%s]</code> from %s <code>[%s]</code> for sending media within their first few messages.\n#chat%s #user%s',
['16'] = 'Kicked %s <code>[%s]</code> from %s <code>[%s]</code> for sending a URL within their first few messages.\n#chat%s #user%s',
['17'] = 'Action',
['18'] = 'Kick',
['19'] = 'Ban',
['20'] = 'Mute'
},
['appstore'] = {
['1'] = 'Ver no iTunes',
['2'] = 'rating',
['3'] = 'ratings'
},
['authspotify'] = {
['1'] = 'You are already authorised using that account.',
['2'] = 'Authorising, please wait...',
['3'] = 'A connection error occured. Are you sure you replied with the correct link? It should look like',
['4'] = 'Successfully authorised your Spotify account!'
},
['avatar'] = {
['1'] = 'Não consegui obter fotos de perfil para esse utilizador, verifique se especificou um nome de utilizador ou ID numérico válido.',
['2'] = 'Esse utilizador não tem fotos de perfil.',
['3'] = 'Esse utilizador não tem assim tantas de perfil!',
['4'] = 'That user has opted-out of data-collecting functionality, therefore I am not able to show you any of their profile photos.',
['5'] = 'User: %s\nPhoto: %s/%s\nSend /avatar %s [offset] to @%s to view a specific photo of this user',
['6'] = 'User: %s\nPhoto: %s/%s\nUse /avatar %s [offset] to view a specific photo of this user'
},
['ban'] = {
['1'] = 'Qual utilizador gostaria que eu bane? Pode especificar esse utilizador pelo seu @username ou ID numérico.',
['2'] = 'Não consigo banir esse utilizador porque ele é um moderador ou um administrador neste grupo.',
['3'] = 'Não consigo banir este utilizador porque ele saiu deste grupo.',
['4'] = 'Não consigo banir este utilizador porque ele já foi banido deste grupo.',
['5'] = 'Eu preciso ter permissões administrativas para banir esse utilizador. Corrija este problema e tente novamente.',
['6'] = '%s <code>[%s]</code> has banned %s <code>[%s]</code> from %s <code>[%s]</code>%s.\n%s %s',
['7'] = '%s has banned %s%s.'
},
['bash'] = {
['1'] = 'Especifique um comando para executar!',
['2'] = 'Sucesso!'
},
['blocklist'] = {
['1'] = 'Qual utilizador gostaria de adicionar a lista negra? Pode especificar este utilizador pelo seu @username ou ID numérico.',
['2'] = 'Não consigo adicionar a lista negra esse utilizador porque ele é um moderador ou um administrador neste grupo.',
['3'] = 'Não consigo adicionar a lista negra esse utilizador porque ele já deixou este grupo.',
['4'] = 'Não consigo adicionar a lista negra esse utilizador porque ele já foi banido neste grupo.',
['5'] = '%s <code>[%s]</code> has blocklisted %s <code>[%s]</code> from using %s <code>[%s]</code> in %s <code>[%s]</code>%s.\n%s %s',
['6'] = '%s has blocklisted %s from using %s%s.'
},
['blocklistchat'] = {
['1'] = '%s foi adicionado a lista negra, e vou deixar lá quem eu adicionar!',
['2'] = '%s é um utilizador, este comando é apenas para lista negras em conversas como grupos e canais!',
['3'] = '%s não parece ser uma conversa valida!'
},
['bugreport'] = {
['1'] = 'Sucesso! Seu relatório de bug foi enviado. O ID deste relatório é #%s.',
['2'] = 'Ocorreu um problema enquanto relatava esse bug! Ah, a ironia!'
},
['calc'] = {
['1'] = 'Clique para enviar o resultado.',
['2'] = '"%s" was an unexpected word!',
['3'] = 'You cannot have a unit before a number!'
},
['captionbotai'] = {
['1'] = 'Eu realmente não posso descrever essa imagem!'
},
['cats'] = {
['1'] = 'Meow!'
},
['channel'] = {
['1'] = 'Não tem permissão para usar isso!',
['2'] = 'Parece já não ser um administrador nesse grupo!',
['3'] = 'Não consegui enviar a sua mensagem, tem certeza de que ainda tenho permissão para enviar mensagens nesse grupo?',
['4'] = 'A sua mensagem foi enviada!',
['5'] = 'Não consegui recuperar uma lista de administradores para desse grupo!',
['6'] = 'Não parece ser um administrador desse grupo!',
['7'] = 'Especifique a mensagem a enviar, utilizando a sintaxe /channel <canal> <mensagem>.',
['8'] = 'Tem certeza de que deseja enviar esta mensagem? É assim que vai aparecer:',
['9'] = 'Sim, Tenho a certeza!',
['10'] = 'Essa mensagem contém formatação Markdown inválido! Corrija a sintaxe e tente novamente.'
},
['chatroulette'] = {
['1'] = 'Hey! Please don\'t send messages longer than %s characters. We don\'t want to annoy the other user!',
['2'] = '*Anonymous said:*\n```\n%s\n```\nTo end your session, send /endchat.',
['3'] = 'I\'m afraid I lost connection from the other user! To begin a new chat, please send /chatroulette!',
['4'] = 'The other person you were chatting with has ended the session. To start a new one, send /chatroulette.',
['5'] = 'Successfully ended your session. To start a new one, send /chatroulette.',
['6'] = 'I have successfully removed you from the list of available users.',
['7'] = 'You don\'t have a session set up at the moment. To start one, send /chatroulette.',
['8'] = 'Finding you a session, please wait...',
['9'] = 'I\'m afraid there aren\'t any available users right now, but I have added you to the list of available users! To stop this completely, please send /endchat.',
['10'] = 'I have successfully paired you with another user to chat to! Please remember to be kind to them! To end the chat, send /endchat.',
['11'] = 'I\'m afraid the user who I tried to pair you with has since blocked me. Please try and send /chatroulette again to try and connect to me!',
['12'] = 'I have successfully paired you with another user to chat to! Please remember to be kind to them! To end the chat, send /endchat.'
},
['commandstats'] = {
['1'] = 'No commands have been sent in this chat!',
['2'] = '<b>Command statistics for:</b> %s\n\n%s\n<b>Total commands sent:</b> %s',
['3'] = 'The command statistics for this chat have been reset!',
['4'] = 'I could not reset the command statistics for this chat. Perhaps they have already been reset?'
},
['control'] = {
['1'] = 'Pfft, querias!',
['2'] = '%s está a recarregar...'
},
['copypasta'] = {
['1'] = 'O texto respondido não deverá exceder %s caracteres!'
},
['coronavirus'] = {
['1'] = [[*COVID-19 Statistics for:* %s
*New confirmed cases:* %s
*Total confirmed cases:* %s
*New deaths:* %s
*Total deaths:* %s
*New recovered cases:* %s
*Total recovered cases:* %s]]
},
['counter'] = {
['1'] = 'Eu não pude adicionar um contador a essa mensagem!'
},
['custom'] = {
['1'] = 'Sucesso! Essa mensagem será enviada toda vez que alguém usar %s!',
['2'] = 'O trigger "%s" não existe!',
['3'] = 'O trigger "%s" foi apagado!',
['4'] = 'Ainda não tem triggers personalizado definidos!',
['5'] = 'Comandos personalizados para %s:\n',
['6'] = 'Para criar um novo comando personalizado, use a seguinte sintaxe:\n/custom new #trigger <valor>. Para listar todos os triggers atuais, use /custom list. Para apagar um trigger, use /custom del #trigger.'
},
['delete'] = {
['1'] = 'Não consegui apagar essa mensagem. Talvez a mensagem seja muito antiga ou inexistente?'
},
['demote'] = {
['1'] = 'Qual utilizador gostaria que eu despromovesse? Pode especificar este utilizador pelo seu @username ou ID numérico.',
['2'] = 'Eu não posso despromover esse utilizador porque ele não é um moderador ou um administrador neste grupo.',
['3'] = 'Eu não posso despromover esse utilizador porque ele já deixou este grupo.',
['4'] = 'Não consigo despromover esse utilizador porque ele já foi expulso deste grupo.'
},
['doge'] = {
['1'] = 'Por favor, escreva o texto que deseja para Doge-ify. Cada sentença deve ser separada usando barras (/) ou novas linhas.'
},
['donate'] = {
['1'] = '<b>Hello, %s!</b>\n\nIf you\'re feeling generous, you can contribute to the mattata project by making a monetary donation of any amount. This will go towards server costs and any time and resources used to develop mattata. This is an optional act, however it is greatly appreciated and your name will also be listed publically on mattata\'s GitHub page.\n\nIf you\'re still interested, you can donate <a href="https://paypal.me/wrxck">here</a>. Thank you for your continued support!'
},
['exec'] = {
['1'] = 'Selecione a linguagem em que gostaria de executar o seu código:',
['2'] = 'Ocurreu um erro! Tempo de ligação expirou. Está a tentar fazer-me lag?',
['3'] = 'Selecionou "%s" – tem a certeza?',
['4'] = 'Voltar',
['5'] = 'Tenho a certeza',
['6'] = 'Introduza um fragmento de código que pretende executar. Não precisa especificar a linguagem, faremos isso depois!',
['7'] = 'Selecione a linguagem em que gostaria de executar o seu código:'
},
['facebook'] = {
['1'] = 'Ocorreu um erro!',
['2'] = 'Escreva o nome de utilizador do Facebook do qual gostaria de obter a foto do perfil.',
['3'] = 'Visitas @%s no Facebook'
},
['fact'] = {
['1'] = 'Gerar Outro'
},
['fban'] = {
['1'] = 'Which user would you like me to Fed-ban? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot Fed-ban this user because they are a moderator or an administrator in this chat.'
},
['flickr'] = {
['1'] = 'Pesquisou por:',
['2'] = 'Introduza uma consulta de pesquisa (Ou seja, o que quer que eu procure no Flickr, i.e. "Big Ben" mostrara uma fotografia do Big Ben em Londres).',
['3'] = 'Mais Resultados'
},
['game'] = {
['1'] = 'Total de vitórias: %s\nTotal de derrotas: %s\nBalanço: %s mattacoins',
['2'] = 'Entrar no Jogo',
['3'] = 'Este jogo já acabou!',
['4'] = 'Não é a sua vez!',
['5'] = 'Não faz parte deste jogo!',
['6'] = 'Não pode ser ai!',
['7'] = 'Já faz parte deste jogo!',
['8'] = 'Este jogo já começou!',
['9'] = '%s [%s] está a jogar contra %s [%s]\nE é a vez de %s\'s a jogar!',
['10'] = '%s ganhou o jogo contra %s!',
['11'] = '%s criou um jogo contra %s!',
['12'] = 'A espera pelo oponente...',
['13'] = 'Jogo do Galo',
['14'] = 'Clique para enviar o jogo para o seu grupo!',
['15'] = 'Estatísticas %s:\n',
['16'] = 'Jogar ao Jogo do Galo!'
},
['gblocklist'] = {
['1'] = 'Responda ao utilizador que deseja incluir na lista negra global ou especifique-o por nome de utilizador/ID.',
['2'] = 'Não conseguir obter informações sobre "%s", verifique se é um nome de utilizador/ID válido e tente novamente.',
['3'] = 'Isso é um %s, não um utilizador!'
},
['gif'] = {
['1'] = 'Introduza uma consulta de pesquisa (Que é, o que quer que eu procure no GIPHY, ex: "cat" irá mostrar um GIF de um gato).'
},
['gallowlist'] = {
['1'] = 'Responda ao utilizador que deseja incluir na lista branca global ou especifique-o por nome de utilizador/ID.',
['2'] = 'Não conseguir obter informações sobre "%s", verifique se é um nome de utilizador/ID válido e tente novamente.',
['3'] = 'Isso é um %s, não um utilizador!'
},
['hackernews'] = {
['1'] = 'Histórias principais de Hacker News:'
},
['help'] = {
['1'] = 'Nenhum resultado encontrado!',
['2'] = 'Não foram encontrados elementos que correspondam a "%s", Por favor, tente ser mais específico!',
['3'] = '\n\nArgumentos: <requer> [opcional]\n\nProcurar um elemento ou obter ajuda com um comando usando minha funcionalidade de pesquisa inline - apenas me mencione em qualquer grupo usando a sintaxe @%s <texto de procura>.',
['4'] = 'Anterior',
['5'] = 'Seguinte',
['6'] = 'Voltar',
['7'] = 'Procurar',
['8'] = 'Está na pagina %s de %s!',
['9'] = [[
Posso executar muitas ações administrativas nos seus grupos, basta adicionar-me como administrador e envie /administration para ajustar as configurações do seu grupo.
Aqui estão alguns comandos administrativos e um breve comentário sobre o que eles fazem:
• /pin <texto> - Envie uma mensagem formatada em Markdown que pode ser editada usando o mesmo comando com texto diferente, para evitar de ter que afixar novamente uma mensagem se não poder edita-la (o que acontece se a mensagem tiver mais de 48 horas)
• /ban - Banir um utilizador respondendo a uma de suas mensagens ou especificando com o nome de utilizador/ID
• /kick - Expulsar (banir e depois remover ban) um utilizador respondendo a uma de suas mensagens ou especificando com o nome de utilizador/ID
• /unban - Remover ban a um utilizador respondendo a uma de suas mensagens ou especificando com o nome de utilizador/ID
• /setrules <texto> - Defina o texto formatado como Markdown como as regras de grupo, que serão enviadas sempre que alguém usar /rules
]],
['10'] = [[
• /setwelcome - Defina o texto formatado como Markdown como uma mensagem de boas-vindas que será enviada sempre que um utilizador se juntar ao seu grupo (A mensagem de boas-vindas pode ser desativada no menu de administração, acessível via /administration). Pode usar espaços reservados para personalizar automaticamente a mensagem de boas-vindas para cada utilizador. Use $user_id para inserir o ID numérico do utilizador, $chat_id para inserir o ID numérico do grupo, $name para inserir o nome do utilizador, $title para inserir o título do grupo e $username para inserir o nome de utilizador do utilizador (Se o utilizador não tiver um @utilizador, o seu nome será usado em vez disso, para evitar é melhor usar isso com $name)
• /warn - Avisa um utilizador, e bane-o quando atingirem o número máximo de avisos
• /mod - Promove um utilizador respondendo a, dando acesso a comandos administrativos como /ban, /kick, /warn etc. (isto é útil quando não quer que alguém tenha a capacidade de apagar mensagens!)
• /demod - Despromove um utilizador respondendo a, removendo do seu estatuto de moderação e revogando sua capacidade de usar comandos administrativos
• /staff - Mostrar o criador, administradores e moderadores do grupo numa lista bem formatada
]],
['11'] = [[
• /report - Encaminha a mensagem de resposta para todos os administradores e os alerta da situação atual
• /setlink <URL> - Define o endereço do grupo para o URL fornecido, que será enviado sempre que alguém usar /link
• /links <texto> - Listas brancas todos os endereços Telegram encontrados no texto fornecido (inclui endereços de @utilizador)
]],
['12'] = 'Abaixo estão alguns links que pode achar úteis:',
['13'] = 'Desenvolvimento',
['14'] = 'Canal',
['15'] = 'Suporte',
['16'] = 'FAQ',
['17'] = 'Código Fonte',
['18'] = 'Doar',
['19'] = 'Rate',
['20'] = 'Registo de Administração',
['21'] = 'Definições de administrador',
['22'] = 'Plugins',
['23'] = [[
<b>Olá %s! O meu nome é %s, é um prazer conhece-lo</b> %s
Eu entendo muitos comandos, que você pode aprender mais sobre pressionando o botão "Comandos" usando o teclado acoplado.
%s <b>Dica:</b> Use o botão "Definições" para alterar o modo como eu trabalho%s!
%s <b>Find me useful, or just want to help?</b> Donations are very much appreciated, use /donate for more information!
]],
['24'] = 'em'
},
['id'] = {
['1'] = 'Desculpe, mas eu não reconheço esse utilizador. Ensine-me quem ele é, encaminhando uma mensagem dele a mim ou faça com que ele me enviem uma mensagem.',
['2'] = 'Grupo consultado:',
['3'] = 'Este grupo:',
['4'] = 'Clique para enviar o resultado!'
},
['imdb'] = {
['1'] = 'Anterior',
['2'] = 'Seguinte',
['3'] = 'Está na pagina %s de %s!'
},
['import'] = {
['1'] = 'Eu não reconheço esse grupo!',
['2'] = 'Isso não é um super grupo, portanto não consigo importar nenhuma configuração dele!',
['3'] = 'Configurações administrativas importadas e plugins alternados com sucesso de %s para %s!'
},
['info'] = {
['1'] = [[
```
Redis:
%s Ficheiro de Configuração: %s
%s Modo: %s
%s Porta TCP: %s
%s Versão: %s
%s Tempo de atividade: %s days
%s ID do Processo: %s
%s Keys Expiradas: %s
%s Contagem de Utilizadores: %s
%s Contagem de Grupos: %s
Sistema:
%s OS: %s
```
]]
},
['instagram'] = {
['1'] = '@%s no Instagram'
},
['ipsw'] = {
['1'] = '<b>%s</b> iOS %s\n\n<code>MD5 sum: %s\nSHA1 sum: %s\nTamanho do ficheiro: %s GB</code>\n\n<i>%s %s</i>',
['2'] = 'Este firmware não está mais sendo assinado!',
['3'] = 'Este firmware ainda está sendo assinado!',
['4'] = 'Selecione o seu modelo:',
['5'] = 'Selecione a versão do firmware:',
['6'] = 'Selecione seu tipo de dispositivo:',
['7'] = 'iPod Touch',
['8'] = 'iPhone',
['9'] = 'iPad',
['10'] = 'Apple TV'
},
['ispwned'] = {
['1'] = 'Essa conta foi encontrada nos seguintes fugas de informação:'
},
['itunes'] = {
['1'] = 'Nome:',
['2'] = 'Artista:',
['3'] = 'Álbum:',
['4'] = 'Faixa:',
['5'] = 'Disco:',
['6'] = 'A consulta original não pôde ser encontrada, provavelmente apagou a mensagem original.',
['7'] = 'A capa pode ser encontrada abaixo:',
['8'] = 'Introduza uma consulta de pesquisa (Ou seja, o que quer que eu procure no iTunes, Ex: "Green Day American Idiot" ira mostrar informações sobre o primeiro resultado para American Idiot dos Green Day).',
['9'] = 'Obter Capa do Álbum'
},
['kick'] = {
['1'] = 'Qual utilizador gostaria que eu expulsasse? Pode especificar este utilizador por seu @utilizador ou ID numérico.',
['2'] = 'Eu não consigo expulsar esse utilizador porque ele é um moderador ou administrador neste grupo.',
['3'] = 'Eu não consigo expulsar esse utilizador porque ele já deixou este grupo.',
['4'] = 'Não consigo expulsar esse utilizador porque ele já foi expulso deste grupo.',
['5'] = 'Eu preciso ter permissões administrativas para expulsar esse utilizador. Corrija este problema e tente novamente.'
},
['lastfm'] = {
['1'] = '%s\'s utilizador de last.fm foi definido para "%s".',
['2'] = 'O seu utilizador last.fm foi esquecido!',
['3'] = 'Não tem atualmente um utilizado do last.fm definido!',
['4'] = 'Especifique o utilizador do last.fm ou defina com /fmset.',
['5'] = 'Nenhum histórico foi encontrado para este utilizador.',
['6'] = '%s está atualmente a ouvir:\n',
['7'] = '%s ouviu ultimamente:\n',
['8'] = 'Desconhecido',
['9'] = 'Clique para enviar o resultado.'
},
['location'] = {
['1'] = 'Não tem uma localização definida. O que nova localização gostaria que fosse?'
},
['logchat'] = {
['1'] = 'Escreva o nome de utilizador ou ID numérico do grupo no qual deseja registar todas as ações administrativas.',
['2'] = 'A verificar se o grupo é válido...',
['3'] = 'Desculpe, parece que especificou um grupo inválido, ou especificou um grupo que eu ainda não adicionado. Corrija e tente novamente.',
['4'] = 'Não pode definir um utilizador como o seu grupo de registo!',
['5'] = 'Não parece ser administrador nesse grupo!',
['6'] = 'Parece que eu já estou registar ações administrativas nesse grupo! Use /logchat para especificar um novo.',
['7'] = 'Esse grupo é válido, vou tentar e enviar uma mensagem de teste para ele, apenas para garantir que tenho permissão para falar!',
['8'] = 'Olá mundo - esta é uma mensagem de teste para verificar minhas permissões de escrita - se estiver a ler isto, então tudo correu bem!',
['9'] = 'Tudo feito! De agora em diante, Quaisquer ações administrativas neste grupo serão registadas em %s - para mudar o grupo que quer que eu registe ações administrativas, basta enviar /logchat.'
},
['lua'] = {
['1'] = 'Digite uma string de Lua para executar!'
},
['lyrics'] = {
['1'] = 'Spotify',
['2'] = 'Mostrar letra',
['3'] = 'Introduza uma consulta de pesquisa (isto é, que musica/artista/letra quer que eu obtenha letras, Ex: "Green Day Basket Case" irá mostrar a letra para Basket Case dos Green Day).'
},
['minecraft'] = {
['1'] = '<b>%s mudou o seu utilizador %s vez</b>',
['2'] = '<b>%s mudou o seu utilizador %s vezes</b>',
['3'] = 'Anterior',
['4'] = 'Seguinte',
['5'] = 'Voltar',
['6'] = 'UUID',
['7'] = 'Avatar',
['8'] = 'Histórico de Utilizador',
['9'] = 'Selecione uma opção:',
['10'] = 'Escreva o nome de utilizador do jogador do Minecraft que gostaria de ver informações (Ex: enviando "Notch" irá ver as informações sobre o jogador Notch).',
['11'] = 'Os nomes de utilizadores do Minecraft têm entre 3 e 16 caracteres.'
},
['mute'] = {
['1'] = 'Que utilizador gostaria que ficasse silenciar? Pode especificar este utilizador pelo seu @utilizador ou ID numérico.',
['2'] = 'Não consigo silenciar este utilizador porque já estão silenciados neste grupo.',
['3'] = 'Não consigo silenciar este utilizador porque ele é um moderador ou administrador neste grupo.',
['4'] = 'Não consigo silenciar este utilizador porque ele já deixou (ou foi expulso) deste grupo.',
['5'] = 'Eu preciso ter permissões administrativas para silenciar este utilizador. Corrija este problema e tente novamente.'
},
['myspotify'] = {
['1'] = 'Profile',
['2'] = 'Following',
['3'] = 'Recently Played',
['4'] = 'Currently Playing',
['5'] = 'Top Tracks',
['6'] = 'Top Artists',
['7'] = 'You don\'t appear to be following any artists!',
['8'] = 'Your Top Artists',
['9'] = 'You don\'t appear to have any tracks in your library!',
['10'] = 'Your Top Tracks',
['11'] = 'You don\'t appear to be following any artists!',
['12'] = 'Artists You Follow',
['13'] = 'You don\'t appear to have recently played any tracks!',
['14'] = '<b>Recently Played</b>\n%s %s\n%s %s\n%s Listened to at %s:%s on %s/%s/%s.',
['15'] = 'The request has been accepted for processing, but the processing has not been completed.',
['16'] = 'You don\'t appear to be listening to anything right now!',
['17'] = 'Currently Playing',
['18'] = 'An error occured whilst re-authorising your Spotify account!',
['19'] = 'Successfully re-authorised your Spotify account! Processing your original request...',
['20'] = 'Re-authorising your Spotify account, please wait...',
['21'] = 'You need to authorise mattata in order to connect your Spotify account. Click [here](https://accounts.spotify.com/en/authorize?client_id=%s&response_type=code&redirect_uri=%s&scope=user-library-read,playlist-read-private,playlist-read-collaborative,user-read-private,user-read-email,user-follow-read,user-top-read,user-read-playback-state,user-read-recently-played,user-read-currently-playing,user-modify-playback-state) and press the green "OKAY" button to link mattata to your Spotify account. After you\'ve done that, send the link you were redirected to (it should begin with "%s", followed by a unique code) in reply to this message.',
['22'] = 'Playlists',
['23'] = 'Use Inline Mode',
['24'] = 'Lyrics',
['25'] = 'No devices were found.',
['26'] = 'You don\'t appear to have any playlists.',
['27'] = 'Your Playlists',
['28'] = '%s %s [%s tracks]',
['29'] = '%s %s [%s]\nSpotify %s user\n\n<b>Devices:</b>\n%s',
['30'] = 'Playing previous track...',
['31'] = 'You are not a premium user!',
['32'] = 'I could not find any devices.',
['33'] = 'Playing next track...',
['34'] = 'Resuming track...',
['35'] = 'Your device is temporarily unavailable...',
['36'] = 'No devices were found!',
['37'] = 'Pausing track...',
['38'] = 'Now playing',
['39'] = 'Shuffling your music...',
['40'] = 'That\'s not a valid volume. Please specify a number between 0 and 100.',
['41'] = 'The volume has been set to %s%%!',
['42'] = 'This message is using an old version of this plugin, please request a new one by sending /myspotify!'
},
['name'] = {
['1'] = 'O nome a qual respondo atualmente é "%s" - para alterar isso, use /name <texto> (onde <texto> o nome a qual quer que eu responda).',
['2'] = 'Meu novo nome precisa ter entre 2 e 32 caracteres!',
['3'] = 'Meu nome só pode conter caracteres alfanuméricos!',
['4'] = 'Vou agora responder a "%s", em vez de "%s" - para alterar isso, use /name <texto> (onde <text> o nome a qual quer que eu responda).'
},
['netflix'] = {
['1'] = 'Ver mais.'
},
['news'] = {
['1'] = '"<code>%s</code>" não é um padrão Lua válido.',
['2'] = 'Eu não consegui obter uma lista de fontes.',
['3'] = '<b>Fontes de notícias encontradas correspondentes</b> "<code>%s</code>":\n\n%s',
['4'] = '<b>Aqui estão as fontes de notícias disponíveis que pode usar com</b> /news<b>. Use</b> /nsources &lt;pesquisa&gt; <b>para pesquisar a lista de fontes de notícias para um conjunto mais específico de resultados. As pesquisas são combinadas usando padrões Lua</b>\n\n%s',
['5'] = 'Não tem uma fonte de notícias preferida. Use /setnews <source> para definir uma. Veja a lista de fontes usando /nsources, ou restringir os resultados usando /nsources <pesquisa>.',
['6'] = 'A sua fonte de notícias preferida atual é %s. Use /setnews <source> para alterar isso. Veja a lista de fontes usando /nsources, ou restringir os resultados usando /nsources <pesquisa>.',
['7'] = 'A sua fonte preferida já está definida para %s! Use /news para ver a história principal atual.',
['8'] = 'Isso não é uma fonte de notícias válida. Exibir uma lista de fontes usando /nsources, ou restringir os resultados usando /nsources <pesquisa>.',
['9'] = 'A sua fonte de notícias preferida foi atualizada para %s! Use /news para ver a história principal atual.',
['10'] = 'Isso não é uma fonte válida, use /nsources para ver uma lista de fontes disponíveis. Se tem uma fonte preferida, use /setnews <fonte> Para receber automaticamente notícias daquela fonte enviada quando envie /news, sem quaisquer argumentos necessários.',
['11'] = 'Ver mais.'
},
['nick'] = {
['1'] = 'O seu nick foi esquecido!',
['2'] = 'O seu nick foi definido como "%s"!'
},
['optout'] = {
['1'] = 'Optou por enviar os seus dados! Use /optout para excluir.',
['2'] = 'Optou por não enviar os seus dados! Use /optin para enviar.'
},
['paste'] = {
['1'] = 'Selecione um serviço para enviar copia:'
},
['pin'] = {
['1'] = 'Não definiu ainda uma mensagem afixada. Use /pin <texto> para definir uma. A formatação Markdown é suportada.',
['2'] = 'Aqui está a última mensagem gerada usando /pin.',
['3'] = 'Eu encontrei uma mensagem afixada existente na base de dados, mas a mensagem que enviei parece ter sido apagada, e não consigo mais encontra-la. Pode definir uma nova usando /pin <texto>. A formatação Markdown é suportada.',
['4'] = 'Ocorreu um erro ao atualizar a mensagem afixada. Ou o texto inserido continha um sintaxe Markdown inválido, ou a mensagem afixada foi apagada. Eu estou agora tentar e enviar-lhe uma mensagem afixada nova, que será capaz de encontrar abaixo - se precisar modifica-lo, depois de garantir que a mensagem ainda existe, use /pin <texto>.',
['5'] = 'Eu não consegui enviar esse texto porque ele contém um sintaxe Markdown inválido.',
['6'] = 'Clique aqui para ver a mensagem afixada, atualizado para contendo o texto que me enviou.'
},
['pokedex'] = {
['1'] = 'Nome: %s\nID: %s\nTipo: %s\nDescrição: %s'
},
['promote'] = {
['1'] = 'Não consigo promover este utilizador porque é moderador ou administrador deste grupo.',
['2'] = 'Não consigo promover este utilizador porque já saiu deste grupo.',
['3'] = 'Não consigo promover esse utilizador porque ele já foi expulso deste grupo.'
},
['quote'] = {
['1'] = 'Este utilizador desativou a funcionalidade de armazenamento de dados.',
['2'] = 'Não há citações guardadas para %s! Pode guardar um usando /save em resposta a uma mensagem que enviam.'
},
['report'] = {
['1'] = 'Please reply to the message you would like to report to the group\'s administrators.',
['2'] = 'You can\'t report your own messages, are you just trying to be funny?',
['3'] = '<b>%s needs help in %s!</b>',
['4'] = 'Click here to view the reported message.',
['5'] = 'I\'ve successfully reported that message to %s admin(s)!'
},
['save'] = {
['1'] = 'Este utilizador desativou a funcionalidade de armazenamento de dados.',
['2'] = 'Esta mensagem foi gravada na minha base de dados, e adicionado à lista de possíveis respostas para quando /quote è usado em resposta a %s!'
},
['sed'] = {
['1'] = '%s\n\n<i>%s não quis dizer isso!</i>',
['2'] = '%s\n\n<i>%s admitiu a sua derrota.</i>',
['3'] = '%s\n\n<i>%s não tem certeza se eles estavam errados...</i>',
['4'] = 'Vai-te lixar, <i>quando é que eu estou errado?</i>',
['5'] = '"<code>%s</code>" não é um modelo Lua válido.',
- ['6'] = '<b>%s quis dizer:</b>\n<i>%s</i>',
+ ['6'] = 'Hey %s, %s seems to think you meant:\n<i>%s</i>',
['7'] = 'Sim',
['8'] = 'Não',
- ['9'] = 'Não tenho certeza'
+ ['9'] = 'Não tenho certeza',
+ ['10'] = 'Just edit your message, idiot.'
},
['setgrouplang'] = {
['1'] = 'This group\'s language has been set to %s!',
['2'] = 'This group\'s language is currently %s.\nPlease note that some strings may not be translated as of yet. If you\'d like to change your language, select one using the keyboard below:',
['3'] = 'The option to force users to use the same language in this group is currently disabled. This setting should be toggled from /administration but, to make things easier for you, I\'ve included a button below.',
['4'] = 'Enable',
['5'] = 'Disable'
},
['setlang'] = {
['1'] = 'O seu idioma foi definido para %s!',
['2'] = 'O seu idioma é atualmente %s.\nTome nota que algumas sequencias de caracteres podem não estar traduzidas. Se quiser alterar seu idioma, selecione um usando o teclado abaixo:'
},
['setlink'] = {
['1'] = 'Não é um URL valido.',
['2'] = 'Endereço definido com sucesso!'
},
['setrules'] = {
['1'] = 'Formato Markdown invalido.',
['2'] = 'Regras definidas com sucesso!'
},
['setwelcome'] = {
['1'] = 'O que mensagem gostaria de boas-vindas que fosse? O texto que especificar será formato em Markdown e enviado toda vez que um utilizador se juntar ao grupo (A mensagem de boas-vindas pode ser desativada no menu de administração, acessível via /administration). Pode usar espaços reservados para personalizar automaticamente a mensagem de boas-vindas para cada utilizador. Use $user_id para inserir o ID numérico do utilizador, $chat_id para inserir o ID numérico do grupo, $name para inserir o nome do utilizador, $title para inserir o título do grupo e $username para inserir o nome de utilizador do utilizador (Se o utilizador não tiver um @utilizador, o seu nome será usado em vez disso, para evitar é melhor usar isso com $name).',
['2'] = 'Ocorreu um erro ao formatar a mensagem, verifique a sintaxe de Markdown e tente novamente.',
['3'] = 'A mensagem de boas-vindas para %s foi atualizada com sucesso!'
},
['share'] = {
['1'] = 'Partilhar'
},
['shorten'] = {
['1'] = 'Selecione um URL shortener usando os botões abaixo:'
},
['shsh'] = {
['1'] = 'Eu não consegui obter qualquer blobs SHSH para esse ECID, assegure-se de que é válido e os guardou usando https://tsssaver.1conan.com.',
['2'] = 'Os blobs SHSH para esse dispositivo estão disponíveis para as seguintes versões do iOS:\n',
['3'] = 'Transferir .zip'
},
['statistics'] = {
['1'] = 'No messages have been sent in this chat!',
['2'] = '<b>Statistics for:</b> %s\n\n%s\n<b>Total messages sent:</b> %s',
['3'] = 'The statistics for this chat have been reset!',
['4'] = 'I could not reset the statistics for this chat. Perhaps they have already been reset?'
},
['steam'] = {
['1'] = 'O seu nome de utilizador do Steam foi definido para "%s".',
['2'] = '"%s" não é um nome de utilizador Steam valido.',
['3'] = '%s é utilizador do Steam desde %s, em %s. Desligou a ultima vez %s, em %s. Clique <a href="%s">aqui</a> para ver o perfil no Steam.',
['4'] = '%s, AKA "%s",'
},
['trust'] = {
['1'] = 'I cannot trust this user because they are a moderator or an administrator of this chat.',
['2'] = 'I cannot trust this user because they have already left this chat.',
['3'] = 'I cannot trust this user because they have already been kicked from this chat.'
},
['unmute'] = {
['1'] = 'Que utilizador gostaria que removesse silenciar? Pode especificar este utilizador pelo seu @utilizador ou ID numérico.',
['2'] = 'Não consigo remover silenciar a este utilizador porque não está atualmente silenciado neste grupo.',
['3'] = 'Não consigo remover silenciar a este utilizador porque ele é um moderador ou administrador neste grupo.',
['4'] = 'Não consigo remover silenciar a este utilizador porque ele já deixou (ou foi expulso) deste grupo.',
},
['untrust'] = {
['1'] = 'Which user would you like me to untrust? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot untrust this user because they are a moderator or an administrator in this chat.',
['3'] = 'I cannot untrust this user because they have already left this chat.',
['4'] = 'I cannot untrust this user because they have already been kicked from this chat.'
},
['upload'] = {
['1'] = 'Responda a mensagem do ficheiro que pretende transferir para o servidor. Deve ser <= 20 MB.',
['2'] = 'Ficheiro é demasiado grande. Deve ser <= 20 MB.',
['3'] = 'Não consegui obter esse ficheiro, é provavelmente muito antigo.',
['4'] = 'Ocorreu um erro ao recuperar esse ficheiro.',
['5'] = 'Ficheiro transferido para o servidor com sucesso - pode ser encontrado em <code>%s</code>!'
},
['voteban'] = {
['1'] = 'Qual utilizador gostaria de abrir uma votação para banir? Pode especificar este utilizador pelo seu @utilizador ou ID numérico.',
['2'] = 'Não consigo criar uma votação para este utilizador porque ele é um moderador ou administrador neste grupo.',
['3'] = 'Não consigo criar uma votação para este utilizador porque ele já deixaram (ou foi expulso) deste grupo.',
['4'] = '%s [%s] deve ser banido por %s? %s voto a favor para banir imediatamente, e %s votos contra para fechar esta votação.',
['5'] = 'Sim [%s]',
['6'] = 'Não [%s]',
['7'] = 'O povo falou. E baniu %s [%s] por %s porque %s pessoas votaram a favor.',
['8'] = 'O montante de votos a favor necessários foi atingido, no entanto, não foi pode banir %s - talvez deixou o grupo ou foi promovido desde que abrimos a votação para banir? É isso ou não tenho mais os privilégios administrativos necessários para executar esta ação!',
['9'] = 'O povo falou. E não foi banido %s [%s] por %s porque %s pessoa decidiram votar contra.',
['10'] = 'Votou a favor na decisão de banir %s [%s]!',
['11'] = 'O seu voto atual foi retirado, use os botões novamente para reenviar o seu voto.',
['12'] = 'Votou contra na decisão de banir %s [%s]!',
['13'] = 'A vote-ban has already been opened for this user!'
},
['weather'] = {
['1'] = 'Ainda não tem uma localização definida. Use /setloc <localização> para definir uma.',
['2'] = 'Está atualmente %s (parece %s) em %s. %s'
},
['welcome'] = {
['1'] = 'Group Rules'
},
['allowlist'] = {
['1'] = 'Qual utilizador gostaria de adicionar a lista branca? Pode especificar este utilizador pelo seu @utilizador ou ID numérico.',
['2'] = 'Não consigo adicionar a lista branca esse utilizador porque ele é um moderador ou administrador neste grupo.',
['3'] = 'Não consigo adicionar a lista branca esse utilizador porque ele já deixou este grupo.',
['4'] = 'Não consigo adicionar a lista branca esse utilizador porque ele já foi banido neste grupo.'
},
['wikipedia'] = {
['1'] = 'Ver mais.'
},
['youtube'] = {
['1'] = 'Anterior',
['2'] = 'Seguinte',
['3'] = 'Está na pagina %s de %s!'
}
}
\ No newline at end of file
diff --git a/languages/scottish.lua b/languages/scottish.lua
index 3f373ba..34e7f2f 100644
--- a/languages/scottish.lua
+++ b/languages/scottish.lua
@@ -1,734 +1,735 @@
-- This is a language file for mattata
-- Language: scottish
-- Author: LKD70
-- DO NOT CHANGE ANYTHING THAT BEGINS OR ENDS WITH A %
-- THESE ARE PLACEHOLDERS!
-- DO NOT CHANGE ANY MARKDOWN/HTML FORMATTING!
-- IF YOU ARE UNSURE, ASK ON TELEGRAM (t.me/mattataDev)
return {
['errors'] = {
['connection'] = 'Connection mistak.',
['results'] = 'A coudna airt oot ony results for that.',
['supergroup'] = 'This commaund can anely be used in supergruips.',
['admin'] = 'Ye need tae be a moderator ore an administrator in thes tauk in maun tae use thes commaund.',
['unknown'] = 'A daena recognise that usar. If ye wud like tae lear me who thei be, forrit a message from them tae any tauk that Am in.',
['generic'] = 'A mistak occured!',
['use'] = 'You are not allowed to use this!',
['private'] = 'You can only use this command in private chat!'
},
['addcommand'] = {
['1'] = 'Please specify the command in the format <code>/command - description</code>',
['2'] = 'I couldn\'t retrieve my commands!',
['3'] = 'The command description can\'t be longer than 256 characters!',
['4'] = 'An unknown error occurred! I couldn\'t add your command!',
['5'] = 'Success! Command added.'
},
['addrule'] = {
['1'] = 'Please specify the rule you would like to add!',
['2'] = 'You don\'t have any rules to add to! Please set group rules using /setrules!',
['3'] = 'I couldn\'t add that rule, as it would make the length of the rules longer than Telegram\'s 4096 character limit!',
['4'] = 'I couldn\'t add that rule, it appears it contains invalid Markdown formatting!',
['5'] = 'Successfully updated the rules!'
},
['addslap'] = {
['1'] = 'You can only use this command in groups!',
['2'] = 'The slap cannot contain curly braces apart from placeholders!',
['3'] = 'The slap cannot be any longer than 256 characters in length!',
['4'] = 'I\'ve successfully added that slap as a possibility for /slap in this group!',
['5'] = 'You must include placeholders in your slap. Use {ME} for the person executing and {THEM} for the victim.'
},
['administration'] = {
['1'] = 'Enable Administration',
['2'] = 'Disable Administration',
['3'] = 'Anti-Spam Settings',
['4'] = 'Warning Settings',
['5'] = 'Vote-Ban Settings',
['6'] = 'Welcome New Users?',
['7'] = 'Send Rules On Join?',
['8'] = 'Send Rules In Group?',
['9'] = 'Back',
['10'] = 'Next',
['11'] = 'Word Filter',
['12'] = 'Anti-Bot',
['13'] = 'Anti-Link',
['14'] = 'Log Actions?',
['15'] = 'Anti-RTL',
['16'] = 'Anti-Spam Action',
['17'] = 'Ban',
['18'] = 'Kick',
['19'] = 'Delete Commands?',
['20'] = 'Force Group Language?',
['21'] = 'Send Settings In Group?',
['22'] = 'Delete Reply On Action?',
['23'] = 'Require Captcha?',
['24'] = 'Use Inline Captcha?',
['25'] = 'Ban SpamWatch-flagged users?',
['26'] = 'Number of warnings until %s:',
['27'] = 'Upvotes needed to ban:',
['28'] = 'Downvotes needed to dismiss:',
['29'] = 'Deleted %s, and its matching link from the database!',
['30'] = 'There were no entries found in the database matching "%s"!',
['31'] = 'You\'re not an administrator in that chat!',
['32'] = 'The minimum number of upvotes required for a vote-ban is %s.',
['33'] = 'The maximum number of upvotes required for a vote-ban is %s.',
['34'] = 'The minimum number of downvotes required for a vote-ban is %s.',
['35'] = 'The maximum number of downvotes required for a vote-ban is %s.',
['36'] = 'The maximum number of warnings is %s.',
['37'] = 'The minimum number of warnings is %s.',
['38'] = 'You can add one or more words to the word filter by using /filter <word(s)>',
['39'] = 'You will no longer be reminded that the administration plugin is disabled. To enable it, use /administration.',
['40'] = 'That\'s not a valid chat!',
['41'] = 'You don\'t appear to be an administrator in that chat!',
['42'] = 'My administrative functionality can only be used in groups/channels! If you\'re looking for help with using my administrative functionality, check out the "Administration" section of /help! Alternatively, if you wish to manage the settings for a group you administrate, you can do so here by using the syntax /administration <chat>.',
['43'] = 'Use the keyboard below to adjust the administration settings for <b>%s</b>:',
['44'] = 'Please send me a [private message](https://t.me/%s), so that I can send you this information.',
['45'] = 'I have sent you the information you requested via private chat.',
['46'] = 'Remove Channel Pins?',
['47'] = 'Remove Other Pins?',
['48'] = 'Remove Pasted Code?',
['49'] = 'Prevent Inline Bots?',
['50'] = 'Kick Media On Join?',
['51'] = 'Enable Plugins For Admins?',
['52'] = 'Kick URLs On Join?'
},
['afk'] = {
['1'] = 'Sorry, Am afraid thes feature is anely available tae usars with a public @usarname!',
['2'] = '%s has returned after being awa for %s!',
['3'] = 'Jot',
['4'] = '%s is now awa.%s'
},
['antispam'] = {
['1'] = 'Disable',
['2'] = 'Enable',
['3'] = 'Disable limit',
['4'] = 'Enable limits on %s',
['5'] = 'All Administration Settings',
['6'] = '%s [%s] has kicked %s [%s] from %s [%s] for hitting the configured anti-spam limit for [%s] media.',
['7'] = 'Kicked %s for hitting the configured antispam limit for [%s] media.',
['8'] = 'The maximum limit is 100.',
['9'] = 'The minimum limit is 1.',
['10'] = 'Modify the anti-spam settings for %s below:',
['11'] = 'Hey %s, if you\'re going to send code that is longer than %s characters in length, please do so using /paste in <a href="https://t.me/%s">private chat with me</a>!',
['12'] = '%s <code>[%s]</code> has %s %s <code>[%s]</code> from %s <code>[%s]</code> for sending Telegram invite link(s).\n#chat%s #user%s',
['13'] = '%s %s for sending Telegram invite link(s).',
['14'] = 'Hey, I noticed you\'ve got anti-link enabled and you\'re currently not allowing your users to mention a chat you\'ve just mentioned, if you\'d like to allowlist it, use /allowlink <links>.',
['15'] = 'Kicked %s <code>[%s]</code> from %s <code>[%s]</code> for sending media within their first few messages.\n#chat%s #user%s',
['16'] = 'Kicked %s <code>[%s]</code> from %s <code>[%s]</code> for sending a URL within their first few messages.\n#chat%s #user%s',
['17'] = 'Action',
['18'] = 'Kick',
['19'] = 'Ban',
['20'] = 'Mute'
},
['appstore'] = {
['1'] = 'veu on iTunes',
['2'] = 'rating',
['3'] = 'ratings'
},
['authspotify'] = {
['1'] = 'You are already authorised using that account.',
['2'] = 'Authorising, please wait...',
['3'] = 'A connection error occured. Are you sure you replied with the correct link? It should look like',
['4'] = 'Successfully authorised your Spotify account!'
},
['avatar'] = {
['1'] = 'A coudna get the profile photaes for that usar, pleese mak siccar ye specified a valid usarname ore numerical ID.',
['2'] = 'That usar daesna have any profile photos.',
['3'] = 'That usar daesna have that many profile photaes!',
['4'] = 'That user has opted-out of data-collecting functionality, therefore I am not able to show you any of their profile photos.',
['5'] = 'User: %s\nPhoto: %s/%s\nSend /avatar %s [offset] to @%s to view a specific photo of this user',
['6'] = 'User: %s\nPhoto: %s/%s\nUse /avatar %s [offset] to view a specific photo of this user'
},
['ban'] = {
['1'] = 'Which usar wud ye like me tae ban? Ye can specify thes usar by thair @usarname ore numerical ID.',
['2'] = 'A cannae ban thes usar becawis thei be a moderator ore an administrator in thes tauk.',
['3'] = 'A cannae ban thes usar becawis thei have alrady left thes tauk.',
['4'] = 'A cannae ban thes usar becawis thei have alrady been banned from thes tauk.',
['5'] = 'A need tae have administrative permissions in maun tae ban thes usar. Pleese mend thes issue, and pree again.',
['6'] = '%s <code>[%s]</code> has banned %s <code>[%s]</code> from %s <code>[%s]</code>%s.\n%s %s',
['7'] = '%s has banned %s%s.'
},
['bash'] = {
['1'] = 'Pleese specify a commaund tae run!',
['2'] = 'Success!'
},
['blocklist'] = {
['1'] = 'Which usar wud ye like me tae blocklist? Ye can specify thes usar by thair @usarname ore numerical ID.',
['2'] = 'A cannae blocklist thes usar becawis thei be a moderator ore an administrator in thes tauk.',
['3'] = 'A cannae blocklist thes usar becawis thei have alrady left thes tauk.',
['4'] = 'A cannae blocklist thes usar becawis thei have alrady been banned from thes tauk.',
['5'] = '%s <code>[%s]</code> has blocklisted %s <code>[%s]</code> from using %s <code>[%s]</code> in %s <code>[%s]</code>%s.\n%s %s',
['6'] = '%s has blocklisted %s from using %s%s.'
},
['blocklistchat'] = {
['1'] = '%s has now been blocklisted, and A will leave whenever A am added there!',
['2'] = '%s is a usar, thes commaund is anely for blocklisting tauks such as gruips and channels!',
['3'] = '%s daesna appeir tae be a valid tauk!'
},
['bugreport'] = {
['1'] = 'Success! Your bug report has been sent. The ID of thes report is #%s.',
['2'] = 'There was a problem whilst reporting that bug! Ha, the irony!'
},
['calc'] = {
['1'] = 'Click tae send the result.',
['2'] = '"%s" was an unexpected word!',
['3'] = 'You cannot have a unit before a number!'
},
['captionbotai'] = {
['1'] = 'A really cannae describe that picture!'
},
['cats'] = {
['1'] = 'Meow!'
},
['channel'] = {
['1'] = 'Ye be not allowed tae use thes!',
['2'] = 'Ye daena appeir tae be an administrator in that tauk anymore!',
['3'] = 'A coudna send yer message, be ye sure A still have permission tae send messages in that tauk?',
['4'] = 'Your message has been sent!',
['5'] = 'A was unable tae retrieve a list of administrators for that tauk!',
['6'] = 'Ye daena appeir tae be an administrator in that tauk!',
['7'] = 'Pleese specify the message tae send, using the syntax /channel <channel> <message>.',
['8'] = 'Are ye sure ye want tae send thes message? This is how it will look:',
['9'] = 'Yes, Am sure!',
['10'] = 'That message contains invalid Markdoun formatting! Pleese correct yer syntax and pree again.'
},
['chatroulette'] = {
['1'] = 'Hey! Please don\'t send messages longer than %s characters. We don\'t want to annoy the other user!',
['2'] = '*Anonymous said:*\n```\n%s\n```\nTo end your session, send /endchat.',
['3'] = 'I\'m afraid I lost connection from the other user! To begin a new chat, please send /chatroulette!',
['4'] = 'The other person you were chatting with has ended the session. To start a new one, send /chatroulette.',
['5'] = 'Successfully ended your session. To start a new one, send /chatroulette.',
['6'] = 'I have successfully removed you from the list of available users.',
['7'] = 'You don\'t have a session set up at the moment. To start one, send /chatroulette.',
['8'] = 'Finding you a session, please wait...',
['9'] = 'I\'m afraid there aren\'t any available users right now, but I have added you to the list of available users! To stop this completely, please send /endchat.',
['10'] = 'I have successfully paired you with another user to chat to! Please remember to be kind to them! To end the chat, send /endchat.',
['11'] = 'I\'m afraid the user who I tried to pair you with has since blocked me. Please try and send /chatroulette again to try and connect to me!',
['12'] = 'I have successfully paired you with another user to chat to! Please remember to be kind to them! To end the chat, send /endchat.'
},
['commandstats'] = {
['1'] = 'No commands have been sent in this chat!',
['2'] = '<b>Command statistics for:</b> %s\n\n%s\n<b>Total commands sent:</b> %s',
['3'] = 'The command statistics for this chat have been reset!',
['4'] = 'I could not reset the command statistics for this chat. Perhaps they have already been reset?'
},
['control'] = {
['1'] = 'Pfft, ye wish!',
['2'] = '%s is reloading...'
},
['copypasta'] = {
['1'] = 'The replied-to text musn\'t be any longer than %s characters!'
},
['coronavirus'] = {
['1'] = [[*COVID-19 Statistics for:* %s
*New confirmed cases:* %s
*Total confirmed cases:* %s
*New deaths:* %s
*Total deaths:* %s
*New recovered cases:* %s
*Total recovered cases:* %s]]
},
['counter'] = {
['1'] = 'A coudna add a cownter tae that message!'
},
['custom'] = {
['1'] = 'Success! That message will now be sent every time somebody uses %s!',
['2'] = 'The trigger "%s" does not exist!',
['3'] = 'The trigger "%s" has been deleted!',
['4'] = 'Ye daena have any custom triggers set!',
['5'] = 'Custom commands for %s:\n',
['6'] = 'To create a new, custom commaund, use the following syntax:\n/custom new #trigger <value>. tae list all current triggers, use /custom list. tae delete a trigger, use /custom del #trigger.'
},
['delete'] = {
['1'] = 'I could not delete that message. Perhaps the message is too old or non-existent?'
},
['demote'] = {
['1'] = 'Which usar wud ye like me tae demote? Ye can specify thes usar by thair @usarname ore numerical ID.',
['2'] = 'A cannae demote thes usar becawis thei be not a moderator ore an administrator in thes tauk.',
['3'] = 'A cannae demote thes usar becawis thei have alrady left thes tauk.',
['4'] = 'A cannae demote thes usar becawis thei have alrady been kicked from thes tauk.'
},
['doge'] = {
['1'] = 'Pleese enter the text ye want tae Doge-ify. Each sentence should be separated using slashes ore new lines.'
},
['donate'] = {
['1'] = '<b>Hello, %s!</b>\n\nIf you\'re feeling generous, you can contribute to the mattata project by making a monetary donation of any amount. This will go towards server costs and any time and resources used to develop mattata. This is an optional act, however it is greatly appreciated and your name will also be listed publically on mattata\'s GitHub page.\n\nIf you\'re still interested, you can donate <a href="https://paypal.me/wrxck">here</a>. Thank you for your continued support!'
},
['exec'] = {
['1'] = 'Pleese select the language ye wud like tae execute yer code in:',
['2'] = 'A mistak occured! The connection timed-out. Were ye preeing tae make me lag?',
['3'] = 'Ye have selected "%s" – be ye sure?',
['4'] = 'Back',
['5'] = 'Am sure',
['6'] = 'Pleese enter a snippet of code that ye wud like tae run. Ye daena need tae specify the language, we will do that afterwards!',
['7'] = 'Pleese select the language ye wud like tae execute yer code in:'
},
['facebook'] = {
['1'] = 'A mistak occured!',
['2'] = 'Pleese enter the name of the Facebook usar ye wud like tae get the profile picture of.',
['3'] = 'veu @%s on Facebook'
},
['fact'] = {
['1'] = 'Generate Another'
},
['fban'] = {
['1'] = 'Which user would you like me to Fed-ban? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot Fed-ban this user because they are a moderator or an administrator in this chat.'
},
['flickr'] = {
['1'] = 'Ye serched for:',
['2'] = 'Pleese enter a serch query (that is, what ye want me tae serch Flickr for, i.e. "Big Ben" will return a photograph of Big Ben in London).',
['3'] = 'More Results'
},
['game'] = {
['1'] = 'Total wyns: %s\nTotal losses: %s\nBalance: %s mattacoins',
['2'] = 'Join Gemm',
['3'] = 'This gemm has alrady ended!',
['4'] = 'It\'s not yer turn!',
['5'] = 'Ye be not part of thes gemm!',
['6'] = 'Ye cannae go here!',
['7'] = 'Ye be alrady part of thes gemm!',
['8'] = 'This gemm has alrady started!',
['9'] = '%s [%s] is playing against %s [%s]\nIt is currently %s\'s turn!',
['10'] = '%s won the gemm against %s!',
['11'] = '%s drew the gemm against %s!',
['12'] = 'Waiting for opponent...',
['13'] = 'Tic-Tac-Toe',
['14'] = 'Click tae send the gemm tae yer tauk!',
['15'] = 'Statistics for %s:\n',
['16'] = 'Play Tic-Tac-Toe!'
},
['gblocklist'] = {
['1'] = 'Pleese reply-to the usar ye\'d like tae globally blocklist, ore specify them by usarname/ID.',
['2'] = 'A coudna get information about "%s", pleese check it\'s a valid usarname/ID and pree again.',
['3'] = 'That\'s a %s, not a usar!'
},
['gif'] = {
['1'] = 'Pleese enter a serch query (that is, what ye want me tae serch GIPHY for, i.e. "cat" will return a GIF of a cat).'
},
['gallowlist'] = {
['1'] = 'Pleese reply-to the usar ye\'d like tae globally allowlist, ore specify them by usarname/ID.',
['2'] = 'A coudna get information about "%s", pleese check it\'s a valid usarname/ID and pree again.',
['3'] = 'That\'s a %s, not a usar!'
},
['hackernews'] = {
['1'] = 'Top Stories from Hacker News:'
},
['help'] = {
['1'] = 'No results found!',
['2'] = 'There were no features found matching "%s", pleese pree and be more specific!',
['3'] = '\n\nArguments: <required> [optional]\n\nSerch for a feature ore get help with a commaund by using my inline serch functionality - just mention me in any tauk using the syntax @%s <serch query>.',
['4'] = 'Previous',
['5'] = 'Next',
['6'] = 'Back',
['7'] = 'Serch',
['8'] = 'Ye be on page %s of %s!',
['9'] = [[
A can perform many administrative actions in yer gruips, just add me as an administrator and send /administration tae adjust the settings for yer gruip.
Here be some administrative commands and a brief comment regarding what thei do:
• /pin <text> - Send a Markdoun-formatted message which can be edited by using the same commaund with different text, tae save ye from having tae re-pin a message if ye can't edit it (which happens if the message is older than 48 hours)
• /ban - Ban a usar by replying tae one of thair messages, ore by specifying them by usarname/ID
• /kick - Kick (ban and then unban) a usar by replying tae one of thair messages, ore by specifying them by usarname/ID
• /unban - Unban a usar by replying tae one of thair messages, ore by specifying them by usarname/ID
• /setrules <text> - Set the given Markdoun-formatted text as the gruip rules, which will be sent whenever somebody uses /rules
]],
['10'] = [[
• /setwelcome - Set the given Markdoun-formatted text as a welcome message that will be sent every time a usar joins yer gruip (the welcome message can be disabled in the administration menu, accessible via /administration). Ye can use placeholders tae automatically customise the welcome message for each usar. Use $usar\_id tae insert the usar's numerical ID, $chat\_id tae insert the tauk's numerical ID, $name tae insert the usar's name, $title tae insert the tauk title and $usarname tae insert the usar's usarname (if the usar doesn't have an @usarname, thair name will be used instead, so it is best tae avoid using thes with $name)
• /warn - Warn a usar, and ban them when thei hit the maximum number of warnings
• /mod - Promote the replied-to usar, giving them access tae administrative commands such as /ban, /kick, /warn etc. (this is useful when ye don't want somebody tae have the ability tae delete messages!)
• /demod - Demote the replied-to usar, stripping them from thair moderation status and revoking thair ability tae use administrative commands
• /staff - veu the gruip's creator, administrators, and moderators in a neatly-formatted list
]],
['11'] = [[
• /report - Forwards the replied-to message tae all administrators and alerts them of the current situation
• /setlink <URL> - Set the gruip's link tae the given URL, which will be sent whenever somebody uses /link
• /links <text> - Allowlists all of the Telegram links found in the given text (includes @usarname links)
]],
['12'] = 'Below be some links ye might find useful:',
['13'] = 'Development',
['14'] = 'Channel',
['15'] = 'Support',
['16'] = 'FAQ',
['17'] = 'Source',
['18'] = 'Donate',
['19'] = 'Rate',
['20'] = 'Administration Log',
['21'] = 'Admin Settings',
['22'] = 'Plugins',
['23'] = [[
<b>Hi %s! My name's %s, it's a pleasure tae meet ye</b> %s
A understand many commands, which ye can learn more about by pressing the "Commands" button using the attached keyboard.
%s <b>Tip:</b> Use the "Settings" button tae change how A work%s!
%s <b>Find me useful, or just want to help?</b> Donations are very much appreciated, use /donate for more information!
]],
['24'] = 'in'
},
['id'] = {
['1'] = 'Am sorry, but A daena recognise that usar. tae lear me who thei be, forrit a message from them tae me ore get them tae send me a message.',
['2'] = 'Queried Chat:',
['3'] = 'This Chat:',
['4'] = 'Click tae send the result!'
},
['imdb'] = {
['1'] = 'Previous',
['2'] = 'Next',
['3'] = 'Ye be on page %s of %s!'
},
['import'] = {
['1'] = 'A daena recognise that tauk!',
['2'] = 'That\'s not a supergruip, therefore A cannae import any settings from it!',
['3'] = 'Successfully imported administrative settings & toggled plugins from %s tae %s!'
},
['info'] = {
['1'] = [[
```
Redis:
%s Config File: %s
%s Mode: %s
%s TCP Port: %s
%s Version: %s
%s Uptime: %s days
%s Process ID: %s
%s Expired Keys: %s
%s Usar Cownt: %s
%s Gruip Cownt: %s
System:
%s OS: %s
```
]]
},
['instagram'] = {
['1'] = '@%s on Instagram'
},
['ipsw'] = {
['1'] = '<b>%s</b> iOS %s\n\n<code>MD5 sum: %s\nSHA1 sum: %s\nFile size: %s GB</code>\n\n<i>%s %s</i>',
['2'] = 'This firmwhere is no longer being signed!',
['3'] = 'This firmwhere is still being signed!',
['4'] = 'Pleese select yer model:',
['5'] = 'Pleese select yer firmwhere version:',
['6'] = 'Pleese select yer device type:',
['7'] = 'iPod Touch',
['8'] = 'iPhone',
['9'] = 'iPad',
['10'] = 'Apple TV'
},
['ispwned'] = {
['1'] = 'That account was found in the following leaks:'
},
['itunes'] = {
['1'] = 'Name:',
['2'] = 'Artist:',
['3'] = 'Album:',
['4'] = 'Track:',
['5'] = 'Disc:',
['6'] = 'The original query could not be found, ye\'ve probably deleted the original message.',
['7'] = 'The artwork can be found below:',
['8'] = 'Pleese enter a serch query (that is, what ye want me tae serch iTunes for, i.e. "Green Day American Idiot" will return information about the first result for American Idiot by Green Day).',
['9'] = 'Get Album Artwork'
},
['kick'] = {
['1'] = 'Which usar wud ye like me tae keek? Ye can specify thes usar by thair @usarname ore numerical ID.',
['2'] = 'A cannae keek thes usar becawis thei be a moderator ore an administrator in thes tauk.',
['3'] = 'A cannae keek thes usar becawis thei have alrady left thes tauk.',
['4'] = 'A cannae keek thes usar becawis thei have alrady been keeked from thes tauk.',
['5'] = 'A need tae have administrative permissions in maun tae keek thes usar. Pleese amend thes issue, and pree again.'
},
['lastfm'] = {
['1'] = '%s\'s last.fm usarname has been set tae "%s".',
['2'] = 'Your last.fm usarname has been forgotten!',
['3'] = 'Ye daena currently have a last.fm usarname set!',
['4'] = 'Pleese specify yer last.fm usarname ore set it with /fmset.',
['5'] = 'No history was found for thes usar.',
['6'] = '%s is currently listening to:\n',
['7'] = '%s last listened to:\n',
['8'] = 'Unknown',
['9'] = 'Click tae send the result.'
},
['location'] = {
['1'] = 'Ye daena have a location set. What wud ye like yer new location tae be?'
},
['logchat'] = {
['1'] = 'Pleese enter the usarname ore numerical ID of the tauk ye wish tae log all administrative actions into.',
['2'] = 'Checking tae see whether that tauk is valid...',
['3'] = 'Am sorry, it appeirs ye\'ve either specified an invalid tauk, ore ye\'ve specified a tauk A haven\'t been added tae yet. Pleese rectify thes and pree again.',
['4'] = 'Ye can\'t set a usar as yer log tauk!',
['5'] = 'Ye daena appeir tae be an administrator in that tauk!',
['6'] = 'It seems Am alrady logging administrative actions into that tauk! Use /logchat tae specify a new one.',
['7'] = 'That tauk is valid, Am now going tae pree and send a test message tae it, just tae ensure A have permission tae post!',
['8'] = 'Hello, World - thes is a test message tae check my posting permissions - if ye\'re reading thes, then everything went OK!',
['9'] = 'All done! From now on, any administrative actions in thes tauk will be logged into %s - tae change the tauk ye want me tae log administrative actions into, just send /logchat.'
},
['lua'] = {
['1'] = 'Pleese enter a string of Lua tae execute!'
},
['lyrics'] = {
['1'] = 'Spotify',
['2'] = 'Show Lyrics',
['3'] = 'Pleese enter a serch query (that is, what song/artist/lyrics ye want me tae get lyrics for, i.e. "Green Day Basket Case" will return the lyrics for the song Basket Case by Green Day).'
},
['minecraft'] = {
['1'] = '<b>%s has changed his/her usarname %s time</b>',
['2'] = '<b>%s has changed his/her usarname %s times</b>',
['3'] = 'Previous',
['4'] = 'Next',
['5'] = 'Back',
['6'] = 'UUID',
['7'] = 'Avatar',
['8'] = 'Usarname History',
['9'] = 'Pleese select an option:',
['10'] = 'Pleese enter the usarname of the Minecraft player ye wud like tae view information about (i.e. sending "Notch" will view information about the player Notch).',
['11'] = 'Minecraft usarnames be between 3 and 16 characters long.'
},
['mute'] = {
['1'] = 'Which user would you like me to mute? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot mute this user because they are already muted in this chat.',
['3'] = 'I cannot mute this user because they are a moderator or an administrator in this chat.',
['4'] = 'I cannot mute this user because they have already left (or been kicked from) this chat.',
['5'] = 'I need to have administrative permissions in order to mute this user. Please amend this issue, and try again.'
},
['myspotify'] = {
['1'] = 'Profile',
['2'] = 'Following',
['3'] = 'Recently Played',
['4'] = 'Currently Playing',
['5'] = 'Top Tracks',
['6'] = 'Top Artists',
['7'] = 'You don\'t appear to be following any artists!',
['8'] = 'Your Top Artists',
['9'] = 'You don\'t appear to have any tracks in your library!',
['10'] = 'Your Top Tracks',
['11'] = 'You don\'t appear to be following any artists!',
['12'] = 'Artists You Follow',
['13'] = 'You don\'t appear to have recently played any tracks!',
['14'] = '<b>Recently Played</b>\n%s %s\n%s %s\n%s Listened to at %s:%s on %s/%s/%s.',
['15'] = 'The request has been accepted for processing, but the processing has not been completed.',
['16'] = 'You don\'t appear to be listening to anything right now!',
['17'] = 'Currently Playing',
['18'] = 'An error occured whilst re-authorising your Spotify account!',
['19'] = 'Successfully re-authorised your Spotify account! Processing your original request...',
['20'] = 'Re-authorising your Spotify account, please wait...',
['21'] = 'You need to authorise mattata in order to connect your Spotify account. Click [here](https://accounts.spotify.com/en/authorize?client_id=%s&response_type=code&redirect_uri=%s&scope=user-library-read,playlist-read-private,playlist-read-collaborative,user-read-private,user-read-email,user-follow-read,user-top-read,user-read-playback-state,user-read-recently-played,user-read-currently-playing,user-modify-playback-state) and press the green "OKAY" button to link mattata to your Spotify account. After you\'ve done that, send the link you were redirected to (it should begin with "%s", followed by a unique code) in reply to this message.',
['22'] = 'Playlists',
['23'] = 'Use Inline Mode',
['24'] = 'Lyrics',
['25'] = 'No devices were found.',
['26'] = 'You don\'t appear to have any playlists.',
['27'] = 'Your Playlists',
['28'] = '%s %s [%s tracks]',
['29'] = '%s %s [%s]\nSpotify %s user\n\n<b>Devices:</b>\n%s',
['30'] = 'Playing previous track...',
['31'] = 'You are not a premium user!',
['32'] = 'I could not find any devices.',
['33'] = 'Playing next track...',
['34'] = 'Resuming track...',
['35'] = 'Your device is temporarily unavailable...',
['36'] = 'No devices were found!',
['37'] = 'Pausing track...',
['38'] = 'Now playing',
['39'] = 'Shuffling your music...',
['40'] = 'That\'s not a valid volume. Please specify a number between 0 and 100.',
['41'] = 'The volume has been set to %s%%!',
['42'] = 'This message is using an old version of this plugin, please request a new one by sending /myspotify!'
},
['name'] = {
['1'] = 'The name A currently respond tae is "%s" - tae change thes, use /name <text> (where <text> is what ye want me tae respond to).',
['2'] = 'My new name needs tae be between 2 and 32 characters long!',
['3'] = 'My name may anely contain alphanumeric characters!',
['4'] = 'A will now respond tae "%s", instead of "%s" - tae change thes, use /name <text> (where <text> is what ye want me tae respond to).'
},
['netflix'] = {
['1'] = 'Read more.'
},
['news'] = {
['1'] = '"<code>%s</code>" isn\'t a valid Lua pattern.',
['2'] = 'A coudna retrieve a list of sources.',
['3'] = '<b>News sources found matching</b> "<code>%s</code>":\n\n%s',
['4'] = '<b>Here be the current available news sources ye can use with</b> /news<b>. Use</b> /nsources &lt;query&gt; <b>to serch the list of news sources for a more specific set of results. Serches be matched using Lua patterns</b>\n\n%s',
['5'] = 'Ye daena have a preferred news source. Use /setnews <source> tae set one. veu a list of sources using /nsources, ore narrow doun the results by using /nsources <query>.',
['6'] = 'Your current preferred news source is %s. Use /setnews <source> tae change it. veu a list of sources using /nsources, ore narrow doun the results by using /nsources <query>.',
['7'] = 'Your preferred source is alrady set tae %s! Use /news tae view the current top story.',
['8'] = 'That\'s not a valid news source. veu a list of sources using /nsources, ore narrow doun the results by using /nsources <query>.',
['9'] = 'Your preferred news source has been updated tae %s! Use /news tae view the current top story.',
['10'] = 'That\'s not a valid source, use /nsources tae view a list of available sources. If ye have a preferred source, use /setnews <source> tae automatically have news from that source sent when ye send /news, without any arguments needed.',
['11'] = 'Read more.'
},
['nick'] = {
['1'] = 'Your nickname has now been forgotten!',
['2'] = 'Your nickname has been set tae "%s"!'
},
['optout'] = {
['1'] = 'Ye have opted-in tae having data ye send collected! Use /optout tae opt-out.',
['2'] = 'Ye have opted-out of having data ye send collected! Use /optin tae opt-in.'
},
['paste'] = {
['1'] = 'Pleese select a service tae upload yer paste to:'
},
['pin'] = {
['1'] = 'You haven\'t set a pin before. Use /pin <text> to set one. Markdown formatting is supported.',
['2'] = 'Here is the last message generated using /pin.',
['3'] = 'I found an existing pin in the database, but the message I sent it in seems to have been deleted, and I can\'t find it anymore. You can set a new one with /pin <text>. Markdown formatting is supported.',
['4'] = 'There was an error whilst updating your pin. Either the text you entered contained invalid Markdown syntax, or the pin has been deleted. I\'m now going to try and send you a new pin, which you\'ll be able to find below - if you need to modify it then, after ensuring the message still exists, use /pin <text>.',
['5'] = 'I couldn\'t send that text because it contains invalid Markdown syntax.',
['6'] = 'Click here to see the pin, updated to contain the text you gave me.'
},
['pokedex'] = {
['1'] = 'Name: %s\nID: %s\nType: %s\nDescription: %s'
},
['promote'] = {
['1'] = 'A cannae promote thes usar becawis thei be a moderator ore an administrator of thes tauk.',
['2'] = 'A cannae promote thes usar becawis thei have alrady left thes tauk.',
['3'] = 'A cannae promote thes usar becawis thei have alrady been kicked from thes tauk.'
},
['quote'] = {
['1'] = 'This usar has opted out of data-storing functionality.',
['2'] = 'There be no saved quotes for %s! Ye can save one by using /save in reply tae a message thei send.'
},
['report'] = {
['1'] = 'Please reply to the message you would like to report to the group\'s administrators.',
['2'] = 'You can\'t report your own messages, are you just trying to be funny?',
['3'] = '<b>%s needs help in %s!</b>',
['4'] = 'Click here to view the reported message.',
['5'] = 'I\'ve successfully reported that message to %s admin(s)!'
},
['save'] = {
['1'] = 'This usar has opted out of data-storing functionality.',
['2'] = 'That message has been saved in my database, and added tae the list of possible responses for when /quote is used in reply tae %s!'
},
['sed'] = {
['1'] = '%s\n\n<i>%s didn\'t mean tae say thes!</i>',
['2'] = '%s\n\n<i>%s has admitted defeat.</i>',
['3'] = '%s\n\n<i>%s isn\'t sure if thei were mistaken...</i>',
['4'] = 'Screw ye, <i>when am A ever wrong?</i>',
['5'] = '"<code>%s</code>" isn\'t a valid Lua pattern.',
- ['6'] = '<b>Hi, %s, did ye mean:</b>\n<i>%s</i>',
+ ['6'] = 'Hey %s, %s seems to think you meant:\n<i>%s</i>',
['7'] = 'Yes',
['8'] = 'No',
- ['9'] = 'Not sure'
+ ['9'] = 'Not sure',
+ ['10'] = 'Just edit your message, idiot.'
},
['setgrouplang'] = {
['1'] = 'This group\'s language has been set to %s!',
['2'] = 'This group\'s language is currently %s.\nPlease note that some strings may not be translated as of yet. If you\'d like to change your language, select one using the keyboard below:',
['3'] = 'The option to force users to use the same language in this group is currently disabled. This setting should be toggled from /administration but, to make things easier for you, I\'ve included a button below.',
['4'] = 'Enable',
['5'] = 'Disable'
},
['setlang'] = {
['1'] = 'Your language has been set tae %s!',
['2'] = 'Your language is currently %s.\nPleese note that some strings may not be translated as of yet. If ye\'d like tae change yer language, select one using the keyboard below:'
},
['setlink'] = {
['1'] = 'That\'s not a valid URL.',
['2'] = 'Link set successfully!'
},
['setrules'] = {
['1'] = 'Invalid Markdown formatting.',
['2'] = 'Successfully set the new rules!'
},
['setwelcome'] = {
['1'] = 'What wud ye like the welcome message tae be? The text ye specify will be Markdoun-formatted and sent every time a usar joins the tauk (the welcome message can be disabled in the administration menu, accessible via /administration). Ye can use placeholders tae automatically customise the welcome message for each usar. Use $usar_id tae insert the usar\'s numerical ID, $chat_id tae insert the tauk\'s numerical ID, $name tae insert the usar\'s name, $title tae insert the tauk\'s title and $usarname tae insert the usar\'s usarname (if the usar daesna have an @usarname, thair name will be used instead, so it is best tae avoid using thes in conjunction with $name).',
['2'] = 'There was a mistak formatting yer message, pleese check yer Markdoun syntax and pree again.',
['3'] = 'The welcome message for %s has successfully been updated!'
},
['share'] = {
['1'] = 'Shbe'
},
['shorten'] = {
['1'] = 'Pleese select a URL shortener using the buttons below:'
},
['shsh'] = {
['1'] = 'A coudna fetch any SHSH blobs for that ECID, pleese ensure it\'s valid and ye have saved them using https://tsssaver.1conan.com.',
['2'] = 'SHSH blobs for that device be available for the following versions of iOS:\n',
['3'] = 'Dounload .zip'
},
['statistics'] = {
['1'] = 'No messages have been sent in this chat!',
['2'] = '<b>Statistics for:</b> %s\n\n%s\n<b>Total messages sent:</b> %s',
['3'] = 'The statistics for this chat have been reset!',
['4'] = 'I could not reset the statistics for this chat. Perhaps they have already been reset?'
},
['steam'] = {
['1'] = 'Your Steam usarname has been set tae "%s".',
['2'] = '"%s" isn\'t a valid Steam usarname.',
['3'] = '%s has been a usar on Steam since %s, on %s. They last logged off at %s, on %s. Click <a href="%s">here</a> tae view thair Steam profile.',
['4'] = '%s, AKA "%s",'
},
['trust'] = {
['1'] = 'I cannot trust this user because they are a moderator or an administrator of this chat.',
['2'] = 'I cannot trust this user because they have already left this chat.',
['3'] = 'I cannot trust this user because they have already been kicked from this chat.'
},
['unmute'] = {
['1'] = 'Which user would you like me to unmute? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot unmute this user because they are not currently muted in this chat.',
['3'] = 'I cannot unmute this user because they are a moderator or an administrator in this chat.',
['4'] = 'I cannot unmute this user because they have already left (or been kicked from) this chat.'
},
['untrust'] = {
['1'] = 'Which user would you like me to untrust? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot untrust this user because they are a moderator or an administrator in this chat.',
['3'] = 'I cannot untrust this user because they have already left this chat.',
['4'] = 'I cannot untrust this user because they have already been kicked from this chat.'
},
['upload'] = {
['1'] = 'Pleese reply tae the file ye\'d like tae dounload tae the server. It must be <= 20 MB.',
['2'] = 'That file is too large. It must be <= 20 MB.',
['3'] = 'A coudna get thes file, it\'s probably too old.',
['4'] = 'There was a mistak whilst retrieving thes file.',
['5'] = 'Successfully dounloaded the file tae the server - it can be found at <code>%s</code>!'
},
['voteban'] = {
['1'] = 'Which user would you like to open up a vote-ban for? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot setup a vote-ban for this user because they are a moderator or an administrator in this chat.',
['3'] = 'I cannot setup a vote-ban for this user because they have already left (or been kicked from) this chat.',
['4'] = 'Should %s [%s] be banned from %s? %s upvotes are required for an immediate ban, and %s downvotes are required for this vote to be closed.',
['5'] = 'Yes [%s]',
['6'] = 'No [%s]',
['7'] = 'The people have spoken. I have banned %s [%s] from %s because %s people voted for me to do so.',
['8'] = 'The required upvote amount was reached, however, I was unable to ban %s - perhaps they\'ve left the group or been promoted since we opened the vote to ban them? It\'s either that, or I no longer have the administrative privileges required in order to perform this action!',
['9'] = 'The people have spoken. I haven\'t banned %s [%s] from %s because the required %s people downvoted the decision to ban them.',
['10'] = 'You upvoted the decision to ban %s [%s]!',
['11'] = 'Your current vote has been retracted, use the buttons again to re-submit your vote.',
['12'] = 'You downvoted the decision to ban %s [%s]!',
['13'] = 'A vote-ban has already been opened for this user!'
},
['weather'] = {
['1'] = 'Ye daena have a location set. Use /setloc <location> tae set one.',
['2'] = 'It\'s currently %s (feels like %s) in %s. %s'
},
['welcome'] = {
['1'] = 'Group Rules'
},
['allowlist'] = {
['1'] = 'Which user would you like me to allowlist? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot allowlist this user because they are a moderator or an administrator in this chat.',
['3'] = 'I cannot allowlist this user because they have already left this chat.',
['4'] = 'I cannot allowlist this user because they have already been banned from this chat.'
},
['wikipedia'] = {
['1'] = 'Read more.'
},
['youtube'] = {
['1'] = 'Previous',
['2'] = 'Next',
['3'] = 'Ye be on page %s of %s!'
}
}
\ No newline at end of file
diff --git a/languages/tr_tr.lua b/languages/tr_tr.lua
index 9ec13b9..94e787b 100644
--- a/languages/tr_tr.lua
+++ b/languages/tr_tr.lua
@@ -1,734 +1,735 @@
-- This is a language file for mattata
-- Language: tr-tr
-- Author: By_Azade
-- DO NOT CHANGE ANYTHING THAT BEGINS OR ENDS WITH A %
-- THESE ARE PLACEHOLDERS!
-- DO NOT CHANGE ANY MARKDOWN/HTML FORMATTING!
-- IF YOU ARE UNSURE, ASK ON TELEGRAM (t.me/mattataDev)
return {
['errors'] = {
['connection'] = 'Bağlantı Hatası',
['results'] = 'Bunun için herhangi bir sonuç bulamadım.',
['supergroup'] = 'Bu komut sadece grupta kullanılır.',
['admin'] = 'Bu komutu kullanabilmeniz için grupta admin veya moderatör olmalısınız.',
['unknown'] = 'Bu kullanıcıyı tanımıyorum. Eğer onu bana tanıtmak isterseniz, mesajını bana yönlendirin.',
['generic'] = 'Hata oluştu!',
['use'] = 'Bunu kullanmanıza izi yok!',
['private'] = 'You can only use this command in private chat!'
},
['addcommand'] = {
['1'] = 'Please specify the command in the format <code>/command - description</code>',
['2'] = 'I couldn\'t retrieve my commands!',
['3'] = 'The command description can\'t be longer than 256 characters!',
['4'] = 'An unknown error occurred! I couldn\'t add your command!',
['5'] = 'Success! Command added.'
},
['addrule'] = {
['1'] = 'Please specify the rule you would like to add!',
['2'] = 'You don\'t have any rules to add to! Please set group rules using /setrules!',
['3'] = 'I couldn\'t add that rule, as it would make the length of the rules longer than Telegram\'s 4096 character limit!',
['4'] = 'I couldn\'t add that rule, it appears it contains invalid Markdown formatting!',
['5'] = 'Successfully updated the rules!'
},
['addslap'] = {
['1'] = 'You can only use this command in groups!',
['2'] = 'The slap cannot contain curly braces apart from placeholders!',
['3'] = 'The slap cannot be any longer than 256 characters in length!',
['4'] = 'I\'ve successfully added that slap as a possibility for /slap in this group!',
['5'] = 'You must include placeholders in your slap. Use {ME} for the person executing and {THEM} for the victim.'
},
['administration'] = {
['1'] = 'Enable Administration',
['2'] = 'Disable Administration',
['3'] = 'Anti-Spam Settings',
['4'] = 'Warning Settings',
['5'] = 'Vote-Ban Settings',
['6'] = 'Welcome New Users?',
['7'] = 'Send Rules On Join?',
['8'] = 'Send Rules In Group?',
['9'] = 'Back',
['10'] = 'Next',
['11'] = 'Word Filter',
['12'] = 'Anti-Bot',
['13'] = 'Anti-Link',
['14'] = 'Log Actions?',
['15'] = 'Anti-RTL',
['16'] = 'Anti-Spam Action',
['17'] = 'Ban',
['18'] = 'Kick',
['19'] = 'Delete Commands?',
['20'] = 'Force Group Language?',
['21'] = 'Send Settings In Group?',
['22'] = 'Delete Reply On Action?',
['23'] = 'Require Captcha?',
['24'] = 'Use Inline Captcha?',
['25'] = 'Ban SpamWatch-flagged users?',
['26'] = 'Number of warnings until %s:',
['27'] = 'Upvotes needed to ban:',
['28'] = 'Downvotes needed to dismiss:',
['29'] = 'Deleted %s, and its matching link from the database!',
['30'] = 'There were no entries found in the database matching "%s"!',
['31'] = 'You\'re not an administrator in that chat!',
['32'] = 'The minimum number of upvotes required for a vote-ban is %s.',
['33'] = 'The maximum number of upvotes required for a vote-ban is %s.',
['34'] = 'The minimum number of downvotes required for a vote-ban is %s.',
['35'] = 'The maximum number of downvotes required for a vote-ban is %s.',
['36'] = 'The maximum number of warnings is %s.',
['37'] = 'The minimum number of warnings is %s.',
['38'] = 'You can add one or more words to the word filter by using /filter <word(s)>',
['39'] = 'You will no longer be reminded that the administration plugin is disabled. To enable it, use /administration.',
['40'] = 'That\'s not a valid chat!',
['41'] = 'You don\'t appear to be an administrator in that chat!',
['42'] = 'My administrative functionality can only be used in groups/channels! If you\'re looking for help with using my administrative functionality, check out the "Administration" section of /help! Alternatively, if you wish to manage the settings for a group you administrate, you can do so here by using the syntax /administration <chat>.',
['43'] = 'Use the keyboard below to adjust the administration settings for <b>%s</b>:',
['44'] = 'Please send me a [private message](https://t.me/%s), so that I can send you this information.',
['45'] = 'I have sent you the information you requested via private chat.',
['46'] = 'Remove Channel Pins?',
['47'] = 'Remove Other Pins?',
['48'] = 'Remove Pasted Code?',
['49'] = 'Prevent Inline Bots?',
['50'] = 'Kick Media On Join?',
['51'] = 'Enable Plugins For Admins?',
['52'] = 'Kick URLs On Join?'
},
['afk'] = {
['1'] = 'Üzgünüm, Bu özellik sadece aktif kullanıcılar için @kullanıcıadı şeklinde kullanılır!',
['2'] = '%s klavyeden uzaklaşarak tekrar geri döndü %s!',
['3'] = 'Not',
['4'] = '%s şuan klavyeden uzaklaştı.%s'
},
['antispam'] = {
['1'] = 'Kapalı',
['2'] = 'Açık',
['3'] = 'Sınırı devre dışı bırak',
['4'] = 'Sınırları etkinleştir %s',
['5'] = 'Tüm Yönetim Ayarları',
['6'] = '%s [%s] Anti-spam medya limitine ulaşıldığı %s [%s] için %s [%s] gruptan atıldı [%s] .',
['7'] = 'Atıldı %s anti-spam medya limitini aştığı için [%s] .',
['8'] = 'Maksimum sınır 100.',
['9'] = 'Minimum sınır is 1.',
['10'] = 'Aşağıdan %s anti-spam ayarlarını değiştirin:',
['11'] = 'Hey %s, if you\'re going to send code that is longer than %s characters in length, please do so using /paste in <a href="https://t.me/%s">private chat with me</a>!',
['12'] = '%s <code>[%s]</code> has %s %s <code>[%s]</code> from %s <code>[%s]</code> for sending Telegram invite link(s).\n#chat%s #user%s',
['13'] = '%s %s for sending Telegram invite link(s).',
['14'] = 'Hey, I noticed you\'ve got anti-link enabled and you\'re currently not allowing your users to mention a chat you\'ve just mentioned, if you\'d like to allowlist it, use /allowlink <links>.',
['15'] = 'Kicked %s <code>[%s]</code> from %s <code>[%s]</code> for sending media within their first few messages.\n#chat%s #user%s',
['16'] = 'Kicked %s <code>[%s]</code> from %s <code>[%s]</code> for sending a URL within their first few messages.\n#chat%s #user%s',
['17'] = 'Action',
['18'] = 'Kick',
['19'] = 'Ban',
['20'] = 'Mute'
},
['appstore'] = {
['1'] = 'iTunes de görüntüle',
['2'] = 'rating',
['3'] = 'ratings'
},
['authspotify'] = {
['1'] = 'You are already authorised using that account.',
['2'] = 'Authorising, please wait...',
['3'] = 'A connection error occured. Are you sure you replied with the correct link? It should look like',
['4'] = 'Successfully authorised your Spotify account!'
},
['avatar'] = {
['1'] = 'Bu kullanıcı için profil fotoğraflarını alamadım, lütfen geçerli bir kullanıcı adı veya sayısal kimlik belirttiğinizden emin olun.',
['2'] = 'Bu kullanıcının profil fotoğrafı yok..',
['3'] = 'Bu kullanıcının pek çok profil fotoğrafı yok!',
['4'] = 'Bu kullanıcı, veri toplama işlevini devre dışı bıraktı, bu nedenle profil fotoğraflarından hiçbirini size gösteremiyorum.',
['5'] = 'User: %s\nPhoto: %s/%s\nSend /avatar %s [offset] to @%s to view a specific photo of this user',
['6'] = 'User: %s\nPhoto: %s/%s\nUse /avatar %s [offset] to view a specific photo of this user'
},
['ban'] = {
['1'] = 'Hangi kullanıcı banlamamı istersiniz? Bu kullanıcıyı @kulanıcıadı şeklinde veya kullanıcı IDsi ile belirtebilirsin.',
['2'] = 'Bu kullanıcıyı, bu sohbette bir moderatör veya yönetici oldukları için banlayamam.',
['3'] = 'Bu sohbetten ayrıldığı için bu kullanıcıyı banyalamam.',
['4'] = 'Bu sohbetten zaten banlandıkları için bu kullanıcıyı banlayamam.',
['5'] = 'Bu kullanıcıyı banlamam için admin izinlerine sahip olmam gerekiyor. Lütfen bu sorunu düzeltip tekrar deneyin.',
['6'] = '%s <code>[%s]</code> has banned %s <code>[%s]</code> from %s <code>[%s]</code>%s.\n%s %s',
['7'] = '%s has banned %s%s.'
},
['bash'] = {
['1'] = 'Lütfen çalıştırılacak bir komut belirtin!',
['2'] = 'Başarılı!'
},
['blocklist'] = {
['1'] = 'Hangi kullanıcıyı kara listeye almamı istersiniz?? Bu kullanıcıyı @kulanıcıadı şeklinde veya kullanıcı IDsi ile belirtebilirsin.',
['2'] = 'Bu kullanıcıyı, bu sohbette bir moderatör veya yönetici oldukları için kara listeye alamam.',
['3'] = 'Bu sohbetten ayrıldığı için bu kullanıcıyı kara listeye alamam.',
['4'] = 'Bu sohbetten banlandığı için bu kullanıcıyı kara listeye alamam.',
['5'] = '%s <code>[%s]</code> has blocklisted %s <code>[%s]</code> from using %s <code>[%s]</code> in %s <code>[%s]</code>%s.\n%s %s',
['6'] = '%s has blocklisted %s from using %s%s.'
},
['blocklistchat'] = {
['1'] = '%s şimdi kara listeye alındı!',
['2'] = '%s bir kullanıcıysa, bu komut sadece gruplar ve kanallar gibi sohbetleri kara listeye almak için kullanılır!',
['3'] = '%s Geçerli bir sohbet gibi gözükmüyor!'
},
['bugreport'] = {
['1'] = 'Başarılı! Hata raporunuz gönderilmiştir. Bu raporun kimliği #%s.',
['2'] = 'Bu hatayı bildirirken bir sorun oluştu! Ha, ironi!'
},
['calc'] = {
['1'] = 'Sonuç göndermek için tıklayın.',
['2'] = '"%s" was an unexpected word!',
['3'] = 'You cannot have a unit before a number!'
},
['captionbotai'] = {
['1'] = 'Bu resmi gerçekten tarif edemiyorum!'
},
['cats'] = {
['1'] = 'Miyavvv!'
},
['channel'] = {
['1'] = 'Bunu kullanmanıza izin verilmiyor!',
['2'] = 'Bu sohbette artık yönetici gibi görünmüyorsunuz!',
['3'] = 'Mesajınızı gönderemedim, hala sohbet mesajı gönderme iznim var mı?',
['4'] = 'Mesajınız gönderildi!',
['5'] = 'Sohbet yöneticilerinin listesini alamadım!',
['6'] = 'Sohbette bir yönetici gibi görünmüyorsun!',
['7'] = 'Lütfen, gönderilecek mesajı /channel <kanal> <mesaj> sözdizimini kullanarak belirtin.',
['8'] = 'Bu mesajı göndermek istediğinizden emin misiniz? Nasıl görüneceği ise şöyledir:',
['9'] = 'Evet eminim!',
['10'] = 'Bu mesaj geçersiz Markdown biçimlendirme içeriyor! Lütfen sözdiziminizi düzeltin ve tekrar deneyin.'
},
['chatroulette'] = {
['1'] = 'Hey! Please don\'t send messages longer than %s characters. We don\'t want to annoy the other user!',
['2'] = '*Anonymous said:*\n```\n%s\n```\nTo end your session, send /endchat.',
['3'] = 'I\'m afraid I lost connection from the other user! To begin a new chat, please send /chatroulette!',
['4'] = 'The other person you were chatting with has ended the session. To start a new one, send /chatroulette.',
['5'] = 'Successfully ended your session. To start a new one, send /chatroulette.',
['6'] = 'I have successfully removed you from the list of available users.',
['7'] = 'You don\'t have a session set up at the moment. To start one, send /chatroulette.',
['8'] = 'Finding you a session, please wait...',
['9'] = 'I\'m afraid there aren\'t any available users right now, but I have added you to the list of available users! To stop this completely, please send /endchat.',
['10'] = 'I have successfully paired you with another user to chat to! Please remember to be kind to them! To end the chat, send /endchat.',
['11'] = 'I\'m afraid the user who I tried to pair you with has since blocked me. Please try and send /chatroulette again to try and connect to me!',
['12'] = 'I have successfully paired you with another user to chat to! Please remember to be kind to them! To end the chat, send /endchat.'
},
['commandstats'] = {
['1'] = 'Bu sohbette hiçbir komut gönderilmedi!',
['2'] = '<b>Komut için istatistikler:</b> %s\n\n%s\n<b>Toplam göderilen komutlar:</b> %s',
['3'] = 'Bu sohbetin komut istatistikleri sıfırlandı!',
['4'] = 'Bu sohbetin komut istatistiklerini sıfırlayamadım. Belki de daha önce sıfırlanmışlardır?'
},
['control'] = {
['1'] = 'Pfft, dilersen!',
['2'] = '%s Yeniden yükleniyor...'
},
['copypasta'] = {
['1'] = 'Yanıtlanan metin, %s karakterlerden uzun olmamalıdır.!'
},
['coronavirus'] = {
['1'] = [[*COVID-19 Statistics for:* %s
*New confirmed cases:* %s
*Total confirmed cases:* %s
*New deaths:* %s
*Total deaths:* %s
*New recovered cases:* %s
*Total recovered cases:* %s]]
},
['counter'] = {
['1'] = 'Bu mesaja sayaç ekleyemedim!'
},
['custom'] = {
['1'] = 'Başarılı! Bu mesaj şimdi birileri her kullandığı zaman gönderilecek %s!',
['2'] = 'Tetikleyici "%s" yok!',
['3'] = 'Tetikleyici "%s" silindi!',
['4'] = 'Herhangi bir özel tetikleyici ayarlamadın!',
['5'] = 'Özel komutlar %s:\n',
['6'] = 'Yeni ve özel bir komut oluşturmak için şu sözdizimini kullanın:\n/custom new #tetikleyici <değer>.Tüm tetikleyiciler listesi için, /custom list komutunu kullanın. Tetikleyiciyi silmek için ise, /custom del #trigger komutunu kullanın.'
},
['delete'] = {
['1'] = 'Bu mesajı silemedim. Belki de mesaj çok eskidir veya mevcut değildir?'
},
['demote'] = {
['1'] = 'Hangi kullanıcının yetkisini almamı istersin ? Bu kullanıcıyı @kulanıcıadı şeklinde veya kullanıcı IDsi ile belirtebilirsin.',
['2'] = 'Bu kullanıcıyı, bu sohbette bir moderatör veya yönetici olmadığı için yetkisini almam mümkün değil.',
['3'] = 'Bu sohbetten zaten ayrıldıı, bu kullanıcının yetkisini alamam.',
['4'] = 'Bu kullanıcı daha önce bu sohbetten atılmış ulduğu için yetkisini almam mümkün değil.'
},
['doge'] = {
['1'] = 'Lütfen Dogeify istediğiniz metni girin. Her cümle eğik çizgi veya yeni satırlar kullanılarak ayrılmalıdır.'
},
['donate'] = {
['1'] = '<b>Hello, %s!</b>\n\nIf you\'re feeling generous, you can contribute to the mattata project by making a monetary donation of any amount. This will go towards server costs and any time and resources used to develop mattata. This is an optional act, however it is greatly appreciated and your name will also be listed publically on mattata\'s GitHub page.\n\nIf you\'re still interested, you can donate <a href="https://paypal.me/wrxck">here</a>. Thank you for your continued support!'
},
['exec'] = {
['1'] = 'Lütfen kodunuzu yürütmek istediğiniz dili seçin:',
['2'] = 'Bir hata oluştu! Bağlantı zaman aşımına uğradı. Beni geride bırakmaya mı çalışıyordun?',
['3'] = 'Seçtiniz "%s" – emin misin?',
['4'] = 'Geri',
['5'] = 'Eminim',
['6'] = 'Çalıştırmak istediğiniz kod parçacığını yazınız.Dili belirtmeniz gerekmiyor, bunu daha sonra yapacağız!',
['7'] = 'Lütfen kodunuzu yürütmek istediğiniz dili seçin:'
},
['facebook'] = {
['1'] = 'Bir hata oluştu!',
['2'] = 'Lütfen profil resmini almak istediğiniz Facebook kullanıcısının adını girin.',
['3'] = 'Facebook da %s görüntüle'
},
['fact'] = {
['1'] = 'Başka Bir Tane Oluştur'
},
['fban'] = {
['1'] = 'Which user would you like me to Fed-ban? You can specify this user by their @username or numerical ID.',
['2'] = 'I cannot Fed-ban this user because they are a moderator or an administrator in this chat.'
},
['flickr'] = {
['1'] = 'Aradığınız:',
['2'] = 'Lütfen bir arama sorgusu girin (Yani, Flickrı aramamı ne için istiyorsun, Örnek: "Kalem" kalem fotoğragları gösterilecek).',
['3'] = 'Daha fazla sonuç'
},
['game'] = {
['1'] = 'Toplam kazanç: %s\nToplam kayıp: %s\nKalan: %s mattacoins',
['2'] = 'Oyuna Katıl',
['3'] = 'Bu oyun zaten bitti!',
['4'] = 'Senin sıran değil!',
['5'] = 'Bu oyunun bir parçası değilsin!',
['6'] = 'Bu oyuna giremezsiniz!',
['7'] = 'Zaten bu oyunun bir parçasısın!',
['8'] = 'Bu oyun zaten başladı!',
['9'] = '%s [%s] e karşı oynuyor %s [%s]\nŞuanda by %s\'s senin sıran!',
['10'] = '%s e karşı oyunu kazandı %s!',
['11'] = '%s e karşı oyundan çekildi %s!',
['12'] = 'Rakip bekleniyor...',
['13'] = 'Tic-Tac-Toe',
['14'] = 'Oyunu sohbete göndermek için tıklayın!',
['15'] = 'Oyun istatistiği %s:\n',
['16'] = 'Tic-Tac-Toe oyna!'
},
['gblocklist'] = {
['1'] = 'Lütfen genel kara listeye eklemek istediğiniz kullanıcıyı yanıtlayın veya kullanıcı adı veya kimlik numarasına göre belirtin.',
['2'] = 'Hakkında bilgi alamadım "%s", lütfen geçerli bir kullanıcı adı veya kimliğini kontrol edin ve tekrar deneyin.',
['3'] = 'Bu bir %s kullanıcı değil'
},
['gif'] = {
['1'] = 'Lütfen bir arama sorgusu girin (GIPHY de ne aramak istediğini belirt , örnek: "kedi" kedi ile ilgili olan GIF ler gösterilecek).'
},
['gallowlist'] = {
['1'] = 'Lütfen genel olarak beyaz listeye eklemek isteyen kullanıcıyı yanıtlayın, kullanıcı adı veya kimlik numarasına göre belirtin.',
['2'] = 'Hakkında bilgi alamadım "%s", lütfen geçerli bir kullanıcı adı veya kimliğini kontrol edin ve tekrar deneyin.',
['3'] = 'Bu bir %s kullanıcı değil'
},
['hackernews'] = {
['1'] = 'Hacker Haberlerinden En Çok Okunan Hikayeler:'
},
['help'] = {
['1'] = 'Sonuç bulunamadı!',
['2'] = '"%s" ile eşleşen hiçbir özellik bulunamadı, lütfen daha spesifik olmaya çalışın ve deneyin.!',
['3'] = '\n\nDeğişken: <required> [opsiyonel]\n\nSatır içi arama işlevselliğini kullanarak bir özellik arayın veya bir komutla yardım alın - @%s <arama sorgusu> sözdizimini kullanarak herhangi bir sohbetten bahsedin.',
['4'] = 'Önceki',
['5'] = 'Sonraki',
['6'] = 'Geri',
['7'] = 'Ara',
['8'] = '%s sayfanın %s sayfasındasın',
['9'] = [[
Gruplarınızda birçok idari işlem yapabilirim, Beni yönetici olarak eklemelisin ve grubunuzun ayarlarını yapmak için /administrator komutunu göndermelisin.
İşte bazı idari komutlar ve yaptıklarıyla ilgili kısa bir açıklama:
• /pin <yazı> - Aynı komutla farklı metni kullanarak düzenlenebilen Markdown formatlı bir mesaj gönderin, Bir mesajı düzenleyemiyorsanız bundan kurtulmak için yeniden sabitlemeniz gerekmez (Mesaj 48 saatten fazla sabit kalamaz)
• /ban - Bir kullanıcıyı, mesajlarından birine yanıt vererek veya kullanıcı adı / kimlik numarasıyla belirterek banla
• /kick - Bir kullanıcıyı mesajlarından birine yanıt vererek veya kullanıcı adı / kimlik numarasıyla belirterek bir kullanıcıyı banlayın (aynı şekilde unban komutu)
• /unban - Bir kullanıcıyı mesajlarından birine yanıt vererek veya kullanıcı adı / kimlik numarasıyla belirterek bir kullanıcının banını kaldırın
• /setrules <yazı> - Verilen Markdown formatlı metni, birisi kullandığı zaman gönderilecek olan grup kuralları olarak ayarlayın, /rules komutunu kullanarak
]],
['10'] = [[
• /setwelcome - Kullanıcının gruba katıldığı her zaman gösterilecek olan bir hoş geldin mesajı belirtin. (hoş geldin mesajı admin menüsünden kapalı olabilir, /administration komutu ile kontrol edin). Her kullanıcı için hoş geldiniz mesajını otomatik olarak özelleştirmek için yer tutucularını kullanabilirsiniz. Kullanıcının sayısal kimliğini eklemek için $user_id kullanın,sohbetin sayısal kimliğini eklemek için $chat_id, kullanıcının adını eklemek için $name, grubun ismini eklemek için $title ve kullanıcının kullanıcı adını eklemek için $username (eğer kullanıcının kullanıcı adı (@kullanıcıadı) yoksa, bunun yerine isimleri kullanılacak, bu yüzden $name ile birlikte kullanılmamalıdır.)
• /warn - Bir kullanıcıyı uyarmak ve maksimum uyarı sayısına ulaştığında onları banlamak için kullanılır
• /mod - Yanıtlanan kullanıcıya moderatör yetkisi verir, /ban, /kick, /warn vb komutları kullanabilir.(Bu, birisinin mesajlarını silmeyi istemiyorsanız kullanışlıdır!)
• /demod - Yanıtlanan kullanıcınn moderatör yetkisini alır, moderatör komutlarını kullanamaz.
• /staff - Grubun kurucusunu, adminlerini, ve moderatörlerinin listesini gösterir.
]],
['11'] = [[
• /report - Yanıtlanan mesajı direk olarak admine rapor edip yönderir.
• /setlink <URL> - Grubun bağlantısını verilen URL'yi ayarlayın; /link bu komutu, biri kullanıldığında URL gönderilir.
• /links <yazı> - Verilen metinde bulunan tüm Telegram bağlantılarını beyaz listeye ekler ( @kullanıcıadı şeklinde olanları da)
]],
['12'] = 'Aşağıda yararlı bulabileceğiniz bazı bağlantılar verilmiştir.:',
['13'] = 'Geliştirme',
['14'] = 'Kanal',
['15'] = 'Destek',
['16'] = 'SSS',
['17'] = 'Kaynak',
['18'] = 'Bağışta bulunmak',
['19'] = 'Oylamak',
['20'] = 'Yönetim Günlüğü',
['21'] = 'Admin Ayarları',
['22'] = 'Eklentiler',
['23'] = [[
<b>Merhaba %s! Benim adım %s, sizinle tanışmak bir şeref idi</b> %s
Bir çok komutu anlıyorum, hangi komutu öğrenmek istiyorsan satır içinde "Komutlar" butonunu seçin.
%s <b>İpucu:</b> "Ayarlar" butonuna tıklayarak nasıl çalıştığımı öğrenin%s!
%s <b>Beni kullanışlı mı buldun, yoksa yardıma ihtiyaç mı var ?</b>Bağışlar çok takdir edilmektedir, /donate komutunu kullanarak daha fazla bilgi elde et!
]],
['24'] = 'içinde'
},
['id'] = {
['1'] = 'Üzgünüm ama o kullanıcıyı tanımıyorum. Bana kim olduğunu öğretmek istersen, onun bir measjını bana ilet.',
['2'] = 'Sorgulanan Sohbet:',
['3'] = 'Bu sohbet:',
['4'] = 'Sonuç göndermek için tıklayın!'
},
['imdb'] = {
['1'] = 'Önceki',
['2'] = 'Sonraki',
['3'] = '%s sayfanın %s sayfasındasın!'
},
['import'] = {
['1'] = 'Bu sohbeti tanımıyorum!',
['2'] = 'Bu bir supergroup değil, bu nedenle herhangi bir ayarları aktaramıyorum!',
['3'] = '%s dan %s adresinden yönetim ayarlarını ve geçiş yapmış eklentileri başarıyla içe aktardı.!'
},
['info'] = {
['1'] = [[
```
Dağıtım:
%s Yapılandırma Dosyası: %s
%s Mod: %s
%s TCP Port: %s
%s Versyon: %s
%s Çalışma süresi: %s days
%s Çalışma kimliği: %s
%s Süresi Dolmuş Anahtarlar: %s
%s Kullanıcı Sayısı: %s
%s Grup Sayısı: %s
Sistem:
%s İşletim sistemi: %s
```
]]
},
['instagram'] = {
['1'] = '@%s İnstagram'
},
['ipsw'] = {
['1'] = '<b>%s</b> iOS %s\n\n<code>MD5 toplamı: %s\nSHA1 toplamı: %s\nDosya boyutu: %s GB</code>\n\n<i>%s %s</i>',
['2'] = 'Bu yazılım artık imzalanmıyor!',
['3'] = 'Bu yazılım hala imzalanıyor!',
['4'] = 'Lütfen modelinizi seçin:',
['5'] = 'Lütfen bellenim sürümünüzü seçin:',
['6'] = 'Lütfen aygıt türünü seçin:',
['7'] = 'iPod Touch',
['8'] = 'iPhone',
['9'] = 'iPad',
['10'] = 'Apple TV'
},
['ispwned'] = {
['1'] = 'Bu hesap aşağıdaki sızıntılarda bulundu:'
},
['itunes'] = {
['1'] = 'İsim:',
['2'] = 'Sanatçı:',
['3'] = 'Albüm:',
['4'] = 'Parça:',
['5'] = 'Disk:',
['6'] = 'Orijinal sorgu bulunamadı, muhtemelen orijinal iletiyi silindiniz.',
['7'] = 'Sanat aşağıda bulunabilir:',
['8'] = 'Lütfen bir arama sorgusu girin (iTunes de aramak istediğin sorguyu gir, örnek: "Aykut Kuşkaya-Kaldırımlar" Aykut Kuşkaya - Kaldırımlar parçası aranacak.).',
['9'] = 'Albüm Kapağını Getir'
},
['kick'] = {
['1'] = 'Hangi kullanıcıyı gruptan atmak istersiniz? Bu kullanıcıyı @kulanıcıadı şeklinde veya kullanıcı IDsi ile belirtebilirsin.',
['2'] = 'Bu kullanıcıyı, bu sohbette bir moderatör veya yönetici olduğu için gruptan atamam.',
['3'] = 'Bu kullanıcıyı, bu sohbeden ayrıldığı için gruptan atamam.',
['4'] = 'Bu kullanıcıyı, bu sohbetten çoktan atıldıkları için gruptan atamam.',
['5'] = 'Bu kullanıcıyı gruptan atmak için admin izinlerine sahip olmam gerekiyor. Lütfen bu sorunu düzeltip tekrar deneyin.'
},
['lastfm'] = {
['1'] = '%s\'s last.fm kullanıcı adı ayarlandı "%s".',
['2'] = 'last.fm kullanıcı adın unutuldu!',
['3'] = 'Şu anda bir last.fm kullanıcı adınız yok!',
['4'] = 'Lütfen last.fm kullanıcı adınızı belirtin veya /fmset ile ayarlayın.',
['5'] = 'Bu kullanıcı için geçmiş bulunamadı.',
['6'] = '%s Şu anda bunu dinliyorsun:\n',
['7'] = '%s en son dinlenilen:\n',
['8'] = 'Bilinmeyen',
['9'] = 'Sonuç göndermek için tıklayın.'
},
['location'] = {
['1'] = 'Ayarlanmış konumunuz yok. Yeni konum ayarlamak ister misiniz?'
},
['logchat'] = {
['1'] = 'Lütfen tüm idari işlemleri kaydetmek istediğiniz sohbetin kullanıcı adını veya sayısal kimliğini girin.',
['2'] = 'Bu sohbetin geçerli olup olmadığını kontrol et...',
['3'] = 'Maalesef geçersiz bir sohbet belirttiniz veya henüz eklenmediğim bir sohbet belirttiniz. Lütfen bunu düzeltin ve tekrar deneyin.',
['4'] = 'Bir kullanıcıyı günlük sohbetiniz olarak ayarlayamazsınız!',
['5'] = 'Sohbette bir yönetici gibi görünmüyorsun!',
['6'] = 'Görünen o ki sohbetime zaten idari işlemler yapıyorum! /logchat komutunu kullanarak bir tane oluştur.',
['7'] = 'Bu sohbet geçerlidir, şimdi göndermeye izinim olduğundan emin olmak için ona bir test mesajı göndermeye çalışacağım!',
['8'] = 'Merhaba, Dünya - bu,mesaj gönderme izinlerini kontrol etmek için bir test mesajıdır - Eğer bunu okursanız, her şey yolundadır.',
['9'] = 'Hepsi tamam! Şu andan itibaren, bu sohbetteki herhangi bir idari işlemler giriş yapabilir %s - Benim için yönetimsel işlemleri kaydetmek istediğim sohbeti değiştirmek için, /logchat komutunu kullanın.'
},
['lua'] = {
['1'] = 'Lütfen yürütülecek bir Lua dizgesi girin!'
},
['lyrics'] = {
['1'] = 'Spotify',
['2'] = 'Şarkı sözlerini göster',
['3'] = 'Lütfen bir arama sorgusu girin (aramak istediğin şarkı sözlerini belirt, örnek: "Ankaranın Bağları" Ankaranın bağları şarkı sözlerini getirecek.).'
},
['minecraft'] = {
['1'] = '<b>%s kullanıcı adını değiştirdi %s time</b>',
['2'] = '<b>%s kullanıcı adını %s kere değiştirdi </b>',
['3'] = 'Önceki',
['4'] = 'Sonraki',
['5'] = 'Geri',
['6'] = 'UUID',
['7'] = 'Resim',
['8'] = 'Kullanıcı adı geçmişi',
['9'] = 'Lütfen özellik seçiniz:',
['10'] = 'Lütfen Minecraft oyuncusunun kullanıcı adını giriniz. (örnek: "By_Azade" By_Azade hakkında bilgi verecel).',
['11'] = 'Minecraft usernames are between 3 and 16 characters long.'
},
['mute'] = {
['1'] = 'Hangi kullanıcıyı susturmak istersiniz? Bu kullanıcıyı @kulanıcıadı şeklinde veya kullanıcı IDsi ile belirtebilirsin.',
['2'] = 'Bu sohbette zaten sessiz oldukları için bu kullanıcıyı susturamıyorum',
['3'] = 'Bu sohbette bir moderatör ya da yönetici oldukları için bu kullanıcıyı susturamıyorum.',
['4'] = 'Bu kullanıcıyı zaten bu sohbetten ayrılmış (veya oradan atılmış) bu yüzden susturamıyorum.',
['5'] = 'Bu kullanıcıyı susturmak için admin izinlerine sahip olmam gerekiyor. Lütfen bu sorunu düzeltip tekrar deneyin.'
},
['myspotify'] = {
['1'] = 'Profil',
['2'] = 'Takip Edilenler',
['3'] = 'Önceden Oynatılanlar',
['4'] = 'Şu Anda Oynatılıyor',
['5'] = 'En İyi Parçalarınız',
['6'] = 'En İyi Sanatçılarınız',
['7'] = 'Herhangi bir sanatçıyı takip ediyor gibi görünmüyorsun!',
['8'] = 'En İyi Sanatçılarınız',
['9'] = 'Kütüphanenizde herhangi bir parçanın bulunmadığı anlaşılıyor!',
['10'] = 'En İyi Parçalarınız',
['11'] = 'Herhangi bir sanatçıyı takip ediyor gibi görünmüyorsun!',
['12'] = 'Takip Edilen Sanatçılar',
['13'] = 'Yakın zamanda herhangi bir parça çalmış görünmüyorsun!',
['14'] = '<b>Son Oynatılan</b>\n%s %s\n%s %s\n%s Dinlendi %s:%s on %s/%s/%s.',
['15'] = 'İstek işleme için kabul edildi, ancak işlem tamamlanmadı.',
['16'] = 'Şu an bir şey dinliyor görünmüyorsun!',
['17'] = 'Şu Anda Oynatılıyor',
['18'] = 'Spotify hesabınızı yeniden yetkilendirirken bir hata oluştu.!',
['19'] = 'Spotify hesabınız başarılı bir şekilde yeniden yetkilendirildi! İsteğinizi işleme koyabilirsiniz....',
['20'] = 'Spotify hesabınızı yeniden yetkilendirilecek, lütfen bekleyin...',
['21'] = 'Spotify hesabınızı bağlamak için mattatayı yetkilendirmeniz gerekir. Tıklayın [buraya](https://accounts.spotify.com/en/authorize?client_id=%s&response_type=code&redirect_uri=%s&scope=user-library-read,playlist-read-private,playlist-read-collaborative,user-read-private,user-read-email,user-follow-read,user-top-read,user-read-playback-state,user-read-recently-played,user-read-currently-playing,user-modify-playback-state) Mattatayı Spotify hesabınıza bağlamak için yeşil "Tamam" düğmesine basın. Bunu yaptıktan sonra, yönlendirilen bağlantıyı şu adrese gönderin: ("%s" ile başlamalı ve onu benzersiz bir kod takip etmelidir).',
['22'] = 'Çalma listeleri',
['23'] = 'Satıriçi Modu Kullan',
['24'] = 'Şarkı sözleri',
['25'] = 'Hiç aygıt bulunamadı.',
['26'] = 'Hiçbir çalma listenizin yokmuş gibi görünüyor.',
['27'] = 'Senin Oynatma Listen',
['28'] = '%s %s [%s parçalar]',
['29'] = '%s %s [%s]\nSpotify %s kullanıcı\n\n<b>aygıtları:</b>\n%s',
['30'] = 'Önceki parçayı çalınıyor...',
['31'] = 'Premium kullanıcı değilsiniz!',
['32'] = 'Herhangi bir cihaz bulamadım.',
['33'] = 'Bir sonraki parçayı çalınıyor...',
['34'] = 'Parça yeniden başlatılıyor...',
['35'] = 'Cihazınız geçici olarak kullanılamıyor...',
['36'] = 'Hiç aygıt bulunamadı!',
['37'] = 'Parçayı durduruyor...',
['38'] = 'Şimdi oynuyor',
['39'] = 'Shuffling your music...',
['40'] = 'Bu geçerli bir ses değil. Lütfen 0 ile 100 arasında bir sayı belirtin.',
['41'] = 'Ses seviyesi ayarlandı %s%%!',
['42'] = 'Bu ileti bu eklentinin eski bir sürümünü kullanıyor, lütfen /myspotify komutunu kullanarak yeni bir tane isteyin.!'
},
['name'] = {
['1'] = 'Şu anda yanıtladığım isim "%s" - bunu değiştirmek için, /name <yazı> komutunu kullanın (Buradaki <yazı> bemin cevap vermemi istediğiniz şeydir).',
['2'] = 'Yeni adım 2 ila 32 karakter uzunluğunda olmalıdır!',
['3'] = 'İsmim yalnızca alfasayısal karakterler içerebilir!',
['4'] = 'Şimdi "% s" yerine "% s" ye yanıt vereceğim - bunu değiştirmek için, /name <yazı> komutunu kullanın (Buradaki <yazı> benim cevap vermemi istediğiniz şeydir).'
},
['netflix'] = {
['1'] = 'Daha Fazla Bilgi Edinin'
},
['news'] = {
['1'] = '"<code>%s</code>" Geçerli bir Lua kalıbı değil.',
['2'] = 'Bir kaynak listesi alınamadı..',
['3'] = '<b>Eşleşen haber kaynakları bulundu</b> "<code>%s</code>":\n\n%s',
['4'] = '<b>Aşağıdakilerle birlikte kullanabileceğiniz mevcut haber kaynakları</b> /news komutunu kullanarak./nsources komutunu <b>kullanın.</b> &lt;kaynak&gt; <b>daha spesifik bir sonuç kümesi için haber kaynakları listesinde arama yapmalısın. Aramalar Lua kalıpları kullanılarak eşleştirilir</b>\n\n%s',
['5'] = 'Tercih ettiğiniz bir haber kaynağınız yok. /setnews <kaynak> komutunu kullanarak bir tane ayarla. Kaynakların listesini görmek için /nsources komutunu kullan, veya kaynakları daraltmak için /nsources <kaynak> komutunu kullanabilirsin.',
['6'] = 'Tercih ettiğiniz mevcut haber kaynağı %s. /setnews <kaynak> komutunu kullanarak değiştirebilirsin. /nsources komutunu kullanarak kaynakları görüntüleyebilirsin, veya kaynakları daraltmak için /nsources <kaynak> komutunu kullanabilirsin.',
['7'] = 'Tercih ettiğiniz kaynak zaten %s! Geçerli hikayeyi görüntülemek için /news komutunu kullanın.',
['8'] = 'Bu geçerli bir haber kaynağı değil./nsources komutunu kullanarak bir kaynak listesi görüntüle, veya sonuçları daraltmak için /nsources <sorgu> komutunu kullan.',
['9'] = 'Tercih ettiğiniz haber kaynağı güncellendi %s! Geçerli hikayeyi görüntülemek için /news komutunu kullanın.',
['10'] = 'Bu geçerli bir kaynak değil, /nsources komutunu kullanarak aktif kaynakları görüntüleyin.Tercih ettiğiniz bir kaynağınız varsa, /setnews <kaynak> /news komutunu kullanarak gönderdiğinizde o kaynaktan gönderilen haberler otomatik olarak alınır, Herhangi bir argüman gerekmeden.',
['11'] = 'Daha Fazla Bilgi Edinin'
},
['nick'] = {
['1'] = 'Takma adınız şimdi unutuldu!',
['2'] = 'Takma adınız "%s"!'
},
['optout'] = {
['1'] = 'Toplanan verileri göndermeyi için seçtiniz! /optout komutunu kullanın.',
['2'] = 'Toplanan verileri göndermekten vazgeçtiniz! Etkinleştirmek için /optin komutunu kullanın.'
},
['paste'] = {
['1'] = 'Lütfen yapıştırma dosyanızı yüklemek için bir hizmet seçin:'
},
['pin'] = {
['1'] = 'Daha önce bir mesaj sabitlemediniz. /pin <yazı> komutunu kullanarak bir tane oluşturun.Yazı tipi türlerini destekler.',
['2'] = 'İşte son mesajı kullanarak üretilen /pin.',
['3'] = 'Veritabanında varolan bir pin buldum, Ancak gönderdiğim mesaj silindi gibi görünüyor, ve artık onu bulamıyorum. /pin <yazı> komutunu kullanrak yeni bir tane oluşturabilirsin. Yazı tipi türlerini destekler.',
['4'] = 'Mesajı sabitlerken bir hata oluştu. Girdiğiniz metnin geçersiz yazı tipi türü içerdiği için sabitlenen mesaj silindi. Şimdi, size aşağıda bulabileceğiniz yeni bir pin göndermeye çalışacağım - Onu değiştirmeniz gerekiyorsa, mesaj hala mevcut olduğundan emin olduktan sonra, /pin <yazı> komutunu kullanın.',
['5'] = 'Geçersiz yazı tipi formatı içerdiğinden bu metni gönderemedim.',
['6'] = 'Sabitlenen mesajı görüntüle, güncellenen mesajı görüntülemek için tıklayın.'
},
['pokedex'] = {
['1'] = 'İsim: %s\nKimlik: %s\nTip: %s\nAçıklama: %s'
},
['promote'] = {
['1'] = 'Admini veya moderatörü yetkilendiremezsin.',
['2'] = 'Bu kullanıcıyı yetkilendiremiyorum çünkü bu sohbetten ayrılmış durumda.',
['3'] = 'Bu kullanıcıyı yetkilendiremiyorum çünkü bu sohbetten çoktan atılmış durumda.'
},
['quote'] = {
['1'] = 'Bu kullanıcı, veri saklama işlevini devre dışı bıraktı.',
['2'] = 'Bunun için kayıtlı söz yok %s! Onların gönderdikleri bir mesajı /save komutunu kullanarak kaydedebilirsiniz.'
},
['report'] = {
['1'] = 'Lütfen grubun yöneticilerine bildirmek istediğiniz iletiyi yanıtlayın.',
['2'] = 'Kendi mesajlarınızı bildiremezsiniz, sadece komik olmaya mı çalışıyorsunuz?',
['3'] = '<b>%s içinde yardıma ihtiyacı var %s!</b>',
['4'] = 'Bildirilen mesajı görüntülemek için burayı tıklayın.',
['5'] = 'Bu mesajı %s admin(ler) e başarıyla rapor ettim.!'
},
['save'] = {
['1'] = 'Bu kullanıcı, veri saklama işlevini devre dışı bıraktı.',
['2'] = 'Bu mesaj benim veritabanıma kaydedildi ve /quote cevabında kullanıldığında olası yanıtların listesine eklendi. %s!'
},
['sed'] = {
['1'] = '%s\n\n<i>%s Bunu söylemek istememiştim!</i>',
['2'] = '%s\n\n<i>%s Yenilgiyi kabul etti.</i>',
['3'] = '%s\n\n<i>%s Yanılıyor mu bilmiyorlar mı ...</i>',
['4'] = 'Kahretsin, <i>Ne zamandır yanılıyorum?</i>',
['5'] = '"<code>%s</code>" Geçerli bir Lua kalıbı değil.',
- ['6'] = '<b>Merhaba, %s, bunu mu demek istedin:</b>\n<i>%s</i>',
+ ['6'] = 'Hey %s, %s seems to think you meant:\n<i>%s</i>',
['7'] = 'Evet',
['8'] = 'Hayır',
- ['9'] = 'Emin değilim'
+ ['9'] = 'Emin değilim',
+ ['10'] = 'Just edit your message, idiot.'
},
['setgrouplang'] = {
['1'] = 'Bu grubun dili şu şekilde ayarlandı: %s!',
['2'] = 'Bu grubun dili şu anda %s.\nLütfen bazı dizelerin henüz tercüme edilmediğine dikkat ediniz. Dilinizi değiştirmek isterseniz, aşağıdaki klavyeyi kullanarak birini seçin:',
['3'] = 'Kullanıcıları bu grupta aynı dili kullanmaya zorlama seçeneği şu anda devre dışı. Bu ayar /administrator den değiştirilmelidir, ancak işleri sizin için daha kolay hale getirmek için aşağıda bir düğme ekledim.',
['4'] = 'Etkin',
['5'] = 'Devre dışı'
},
['setlang'] = {
['1'] = 'Diliniz ayarlandı %s!',
['2'] = 'Diliniz şuanda %s.\nLütfen bazı dizelerin henüz tercüme edilmediğine dikkat ediniz. Dilinizi değiştirmek isterseniz, aşağıdaki klavyeyi kullanarak birini seçin:'
},
['setlink'] = {
['1'] = 'Doğru bir URL değil.',
['2'] = 'Link başarılı bir şekilde ayarlandı!'
},
['setrules'] = {
['1'] = 'Bilinmeyen yazı tipi formatı.',
['2'] = 'Yeni kural başarılı bir şekilde kaydedildi!'
},
['setwelcome'] = {
['1'] = 'Hoşgeldiniz mesajında ne yapmak istersiniz? Belirttiğiniz metin Markdown formatında olacak ve bir kullanıcı sohbete her katıldığında gönderilecektir (Hoş Geldiniz mesajı yönetim menüsünde devre dışı bırakılabilir, /administration üzerinden erişilebilir). Her kullanıcı için hoş geldiniz mesajını otomatik olarak özelleştirmek için yer tutucularını kullanabilirsiniz. Kullanıcının sayısal kimliğini eklemek için $user_id kullanın,sohbetin sayısal kimliğini eklemek için $chat_id, kullanıcının adını eklemek için $name, grubun ismini eklemek için $title ve kullanıcının kullanıcı adını eklemek için $username (eğer kullanıcının kullanıcı adı (@kullanıcıadı) yoksa, bunun yerine isimleri kullanılacak, bu yüzden $name ile birlikte kullanılmamalıdır.).',
['2'] = 'Mesajınızı biçimlendirirken bir hata oluştu, lütfen yazı türünü kontrol edin ve tekrar deneyin.',
['3'] = 'Hoş geldin mesajı %s başarılı bir şekilde güncellendi!'
},
['share'] = {
['1'] = 'Paylaş'
},
['shorten'] = {
['1'] = 'Lütfen aşağıdaki butonları kullanarak bir URL kısaltıcı seçin:'
},
['shsh'] = {
['1'] = 'ECID için herhangi bir SHSH blobunu getiremedim, Lütfen geçerli olduğundan ve bunları kullanarak kaydettiğinizden emin olun https://tsssaver.1conan.com.',
['2'] = 'SHSH Bu cihazın blobları, iOSun aşağıdaki sürümleri için kullanılabilir:\n',
['3'] = 'İndir .zip'
},
['statistics'] = {
['1'] = 'Bu sohbette hiç mesaj gönderilmedi!',
['2'] = '<b>Statistics for:</b> %s\n\n%s\n<b>Total messages sent:</b> %s',
['3'] = 'Bu sohbet istatistikleri sıfırlandı!',
['4'] = 'Bu sohbetin istatistiklerini sıfırlayamadım. Belki daha önce resetlendi?'
},
['steam'] = {
['1'] = 'Steam kullanıcı adın ayarlandı "%s".',
['2'] = '"%s" Steam kullanıcı adı değil.',
['3'] = '%s Steam kullanıcısı %s, açık %s. En son kapattılanlar %s, açık %s. Tıkla <a href="%s">here</a> Steam profilini görüntüle.',
['4'] = '%s, AKA "%s",'
},
['trust'] = {
['1'] = 'Admini ve moderatörü güvenli olarak işaretleyemem.',
['2'] = 'Bu kullanıcıyı güvenli olarak işaretleyemem,kullanıcı gruptan ayrılmış.',
['3'] = 'Bu kullanıcıyı güvenli olarak işaretleyemem, kullanıcı gruptan atılmış'
},
['unmute'] = {
['1'] = 'Hangi kullanıcının sesini açmak istiyorsun? Bu kullanıcıyı @kulanıcıadı şeklinde veya kullanıcı IDsi ile belirtebilirsin.',
['2'] = 'Bu kullanıcının sesini açamam, kullanıcının sesi kapanmamış.',
['3'] = 'Adminin veya moderatörün sesini kapatamam.',
['4'] = 'Bu kullanıcının sesini açamam, kullanıcı gruptan ayrılmış.'
},
['untrust'] = {
['1'] = 'Hangi kullanıcıyı güvenilmeyen yapmak istiyorsun ? Bu kullanıcıyı @kulanıcıadı şeklinde veya kullanıcı IDsi ile belirtebilirsin.',
['2'] = 'Admin ve moderatörü güvenilmeyenler olarak ekleyemem.',
['3'] = 'Bu kullanıcıyı güvenilmeyenler listesine ekleyemem, kullanıcı gruptan ayrılmış.',
['4'] = 'Bu kullanıcıyı güvenilmeyenler listesine ekleyemem, kullanıcı gruptan atılmış.'
},
['upload'] = {
['1'] = 'Please reply to the file you\'d like to download to the server. It must be <= 20 MB.',
['2'] = 'Dosya çok büyük boyutta. 20MBdan küçük olmalı <= 20 MB.',
['3'] = 'Bu dosyayı alamıyorum, muhtemelen çok eski.',
['4'] = 'Bu dosyayı alınırken bir hata meydana geldi.',
['5'] = 'Dosyayı sunucudan başarılı bir şekilde indirdiniz - bulunabilir <code>%s</code>!'
},
['voteban'] = {
['1'] = 'Hangi kullanıcı için oyla-banla özelliği kullanmak istiyorsun? Bu kullanıcıyı @kulanıcıadı şeklinde veya kullanıcı IDsi ile belirtebilirsin.',
['2'] = 'Admin için oyla-banla özelliği kullanılmaz',
['3'] = 'Oyla-banla özelliğini kullanamıyorum, kullanıcı gruptan ayılmış veya banlanmış.',
['4'] = '[%s] Buradan banlanması gerekir mi %s? %s hemen yasaklanması için oylama gerekir, ve %s bunun için en az oylama kapalı olmalıdır',
['5'] = 'Evet [%s]',
['6'] = 'Hayır [%s]',
['7'] = '[%s] Buradan %s %s banlandı %s çünkü %s insanlar bunun için oy kullandılar.',
['8'] = 'En yüksek oy miktarına ulaşıldı, ancak, banlayamam %s - belki onlar oylama yapılmadan önce gruptan ayrılmışlardır? Bu eylemi gerçekleştirmek için yetkiniz yok',
['9'] = 'Onları %s [%s] banlayamam %s çünkü %s insanlar banlamak için karar vermemişler.',
['10'] = 'Banlamak için oy kullandın %s [%s]!',
['11'] = 'Oyun geri çekildi, butonu kullanarak tekrar oy kullanabilirsin.',
['12'] = 'Banlama kararı alındı %s [%s]!',
['13'] = 'A vote-ban has already been opened for this user!'
},
['weather'] = {
['1'] = 'Konum ayarlamadın. /setloc <konum> komutunu kullanarak bir tane ayarla.',
['2'] = 'Şu anda %s (hissedilen sıcaklık %s) %s. %s'
},
['welcome'] = {
['1'] = 'Grup Kuralları'
},
['allowlist'] = {
['1'] = 'Hangi kullanıcıyı beyaz listeye almak istiyorsun? Bir kullanıcıyı özel olarak @kullanıcıadı şeklinde veya kullanıcı kimliği ile belirtebilirsin.',
['2'] = 'Admini veya moderatörü beyaz listeye alamam.',
['3'] = 'Bu kullanıcıyı beyaz listeye alamam, kullanıcı sohbetten ayrılmış.',
['4'] = 'Bu kullanıcıyı beyaz listeye alamam kullanıcı sohbetten banlanmış'
},
['wikipedia'] = {
['1'] = 'Daha fazla bilgi edinin.'
},
['youtube'] = {
['1'] = 'Önceki',
['2'] = 'Sonraki',
['3'] = '%s sayfanın %s sayfasındasın!'
}
}
diff --git a/mattata.lua b/mattata.lua
index 5edc8fc..c111c25 100644
--- a/mattata.lua
+++ b/mattata.lua
@@ -1,1406 +1,1425 @@
--[[
_ _ _
_ __ ___ __ _| |_| |_ __ _| |_ __ _
| '_ ` _ \ / _` | __| __/ _` | __/ _` |
| | | | | | (_| | |_| || (_| | || (_| |
|_| |_| |_|\__,_|\__|\__\__,_|\__\__,_|
v1.5
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
See LICENSE for details
]]
local mattata = {}
local https = require('ssl.https')
local ltn12 = require('ltn12')
local json = require('dkjson')
local redis = dofile('libs/redis.lua')
local configuration = require('configuration')
local api = require('telegram-bot-lua.core').configure(configuration.bot_token)
local tools = require('telegram-bot-lua.tools')
local socket = require('socket')
local utils = dofile('libs/utils.lua')
local html = require('htmlEntities')
local plugin_list = {}
local administrative_plugin_list = {}
local inline_plugin_list = {}
function mattata:init()
if mattata.is_reloading then
configuration = require('configuration')
mattata.is_reloading = false
end
self.info = api.info -- Set the bot's information to the object fetched from the Telegram bot API.
mattata.info = api.info
self.plugins = {} -- Make a table for the bot's plugins.
self.api = api
self.tools = tools
self.configuration = configuration
self.beta_plugins = {}
self.chats = {}
self.users = {}
+ self.replies = {}
for k, v in ipairs(configuration.plugins) do -- Iterate over all of the configured plugins.
local true_path = v
for _, p in pairs(configuration.administrative_plugins) do
if v == p then
true_path = 'administration.' .. v
end
end
for _, p in pairs(configuration.beta_plugins) do
if v == p then
table.insert(self.beta_plugins, v)
end
end
local plugin = require('plugins.' .. true_path) -- Load each plugin.
if not plugin then
error('Invalid plugin: ' .. true_path)
elseif mattata.is_duplicate(configuration.plugins, v) then
error('Duplicate plugin: ' .. v)
end
plugin.is_administrative = true_path:match('^administration%.') and true or false
self.plugins[k] = plugin
self.plugins[k].name = v
if self.beta_plugins[v] then
plugin.is_beta_plugin = true
end
if plugin.init then -- If the plugin has an `init` function, run it.
plugin.init(self, configuration)
end
plugin.is_administrative = (self.plugins[k].name == 'administration' or true_path:match('^administration%.')) and true or false
-- By default, a plugin doesn't have inline functionality; but, if it does, set it to `true` appropriately.
plugin.is_inline = plugin.on_inline_query and true or false
plugin.commands = plugin.commands or {} -- If the plugin hasn't got any commands configured, then set a blank
-- table, so when it comes to iterating over the commands later on, the bot won't encounter any problems.
if plugin.help and not plugin.is_beta_plugin then -- If the plugin has help documentation, then insert it into other tables (where necessary).
if plugin.is_administrative then
table.insert(administrative_plugin_list, plugin.help)
else
table.insert(plugin_list, plugin.help)
if plugin.is_inline then -- If the plugin is inline and has documentation, then insert the documentation into
-- the `inline_plugin_list` table.
table.insert(inline_plugin_list, plugin.help)
end
end
plugin.help = 'Usage:\n' .. plugin.help:gsub('%. (Alias)', '.\n%1') -- Make the plugin's documentation style all nicely unified, for consistency.
end
self.plugin_list = plugin_list
self.inline_plugin_list = inline_plugin_list
self.administrative_plugin_list = administrative_plugin_list
end
print(configuration.connected_message)
local info_message = '\tUsername: @' .. self.info.username .. '\n\tName: ' .. self.info.name .. '\n\tID: ' .. self.info.id
print('\n' .. info_message .. '\n')
if redis:get('mattata:version') ~= configuration.version then
local success = dofile('migrate.lua')
print(success)
end
self.version = configuration.version
-- Make necessary database changes if the version has changed.
if not redis:get('mattata:version') or redis:get('mattata:version') ~= self.version then
redis:set('mattata:version', self.version)
end
self.last_update = self.last_update or 0 -- If there is no last update known, make it 0 so the bot doesn't encounter any problems when it tries to add the necessary increment.
self.last_backup = self.last_backup or os.date('%V')
self.last_cron = self.last_cron or os.date('%M')
- self.last_cache = self.last_cache or os.date('%H')
+ self.last_cache = self.last_cache or os.date('%d')
local init_message = '<pre>' .. configuration.connected_message .. '\n\n' .. mattata.escape_html(info_message) .. '\n\n\tPlugins loaded: ' .. #configuration.plugins - #configuration.administrative_plugins .. '\n\tAdministrative plugins loaded: ' .. #configuration.administrative_plugins .. '</pre>'
mattata.send_message(configuration.log_chat, init_message:gsub('\t', ''), 'html')
for _, admin in pairs(configuration.admins) do
mattata.send_message(admin, init_message:gsub('\t', ''), 'html')
end
local shutdown = redis:get('mattata:shutdown')
if shutdown then
local chat_id, message_id = shutdown:match('^(%-?%d+):(%d*)$')
mattata.edit_message_text(chat_id, message_id, 'Successfully rebooted!')
redis:del('mattata:shutdown')
end
return true
end
-- Set a bunch of function aliases, for consistency & compatibility.
for i, v in pairs(api) do
mattata[i] = v
end
for i, v in pairs(tools) do
mattata[i] = v
end
for i, v in pairs(utils) do
if i ~= 'init' then
mattata[i] = v
end
end
function mattata:run(_, token)
-- mattata's main long-polling function which repeatedly checks the Telegram bot API for updates.
-- The objects received in the updates are then further processed through object-specific functions.
token = token or configuration.bot_token
assert(token, 'You need to enter your Telegram bot API token in configuration.lua, or pass it as the second argument when using the mattata:run() function!')
mattata.is_running = mattata.init(self) -- Initialise the bot.
utils.init(self, configuration)
while mattata.is_running do -- Perform the main loop whilst the bot is running.
local success = api.get_updates( -- Check the Telegram bot API for updates.
configuration.updates.timeout,
self.last_update + 1,
configuration.updates.limit,
json.encode(
{
'message',
'edited_message',
'inline_query',
'callback_query'
}
),
configuration.use_beta_endpoint or false
)
if success and success.result then
for _, v in ipairs(success.result) do
self.last_update = v.update_id
self.execution_time = socket.gettime()
if v.message or v.edited_message then
if v.edited_message then
v.message = v.edited_message
v.edited_message = nil
v.message.old_date = v.message.date
v.message.date = v.message.edit_date
v.message.edit_date = nil
v.message.is_edited = true
else
v.message.is_edited = false
end
if v.message.reply_to_message then
v.message.reply = v.message.reply_to_message -- Make the `update.message.reply_to_message`
-- object `update.message.reply` to make any future handling easier.
v.message.reply_to_message = nil -- Delete the old value by setting its value to nil.
end
mattata.on_message(self, v.message)
if configuration.debug then
print(
string.format(
'%s[36m[Update #%s] Message%s from %s to %s: %s%s[0m',
string.char(27),
v.update_id,
v.message.is_edited and ' edit' or '',
v.message.from.id,
v.message.chat.id,
v.message.text,
string.char(27)
)
)
end
elseif v.inline_query then
mattata.on_inline_query(self, v.inline_query)
if configuration.debug then
print(
string.format(
'%s[35m[Update #%s] Inline query from %s%s[0m',
string.char(27),
v.update_id,
v.inline_query.from.id,
string.char(27)
)
)
end
elseif v.callback_query then
if v.callback_query.message and v.callback_query.message.reply_to_message then
v.callback_query.message.reply = v.callback_query.message.reply_to_message
v.callback_query.message.reply_to_message = nil
end
mattata.on_callback_query(self, v.callback_query.message, v.callback_query)
if configuration.debug then
print(
string.format(
'%s[33m[Update #%s] Callback query from %s%s[0m',
string.char(27),
v.update_id,
v.callback_query.from.id,
string.char(27)
)
)
end
end
self.result_time = socket.gettime() - self.execution_time
if configuration.debug then
print('Update #' .. v.update_id .. ' took ' .. self.result_time .. ' seconds to process.')
end
end
else
mattata.log_error('There was an error retrieving updates from the Telegram bot API!')
end
if self.last_backup ~= os.date('%V') then -- If it's been a week since the last backup, perform another backup.
self.last_backup = os.date('%V') -- Set the last backup time to now, since we're
-- now performing one!
print(io.popen('./backup.sh'):read('*all'))
end
if self.last_cron ~= os.date('%M') then -- Perform minutely CRON jobs.
self.last_cron = os.date('%M')
for i = 1, #self.plugins do
local plugin = self.plugins[i]
if plugin and plugin.cron then
local cron_success, res = pcall(function()
plugin.cron(self, configuration)
end)
if not cron_success then
mattata.exception(self, res, 'CRON: ' .. i, configuration.log_chat)
end
end
end
end
- if self.last_cache ~= os.date('%H') then -- Reset the bot's cache.
- self.last_cache = os.date('%H')
+ if self.last_cache ~= os.date('%d') then -- Reset the bot's cache.
+ self.last_cache = os.date('%d')
self.chats = {}
self.users = {}
+ self.replies = {}
end
end
print(self.info.first_name .. ' is shutting down...')
end
function mattata:on_message(message)
-- If the message is old or is missing necessary fields/values, then we'll stop and allow the bot to start processing the next update(s).
-- If the message was sent from a blocklisted chat, then we'll stop because we don't want the bot to respond there.
if not mattata.is_valid(message) then
return false
elseif redis:get('blocklisted_chats:' .. message.chat.id) then
return mattata.leave_chat(message.chat.id)
end
message = mattata.sort_message(message) -- Process the message.
self.is_user_blocklisted, self.is_globally_blocklisted, self.is_globally_banned = mattata.is_user_blocklisted(message)
-- We only want this functionality if the bot owner has been granted API permission to SpamWatch!
self.is_spamwatch_blocklisted = configuration.keys.spamwatch ~= '' and mattata.is_spamwatch_blocklisted(message) or false
if self.is_globally_banned and message.chat.type ~= 'private' then -- Only for the worst of the worst
mattata.ban_chat_member(message.chat.id, message.from.id)
end
local language = require('languages.' .. mattata.get_user_language(message.from.id))
if mattata.is_group(message) and mattata.get_setting(message.chat.id, 'force group language') then
language = require('languages.' .. (mattata.get_value(message.chat.id, 'group language') or 'en_gb'))
end
self.language = language
if mattata.process_spam(message, configuration) then
return false
end
-- Perform the following actions if the user isn't blocklisted.
if not self.is_user_blocklisted then
mattata.process_afk(self, message)
mattata.process_language(self, message)
if message.text then
message = mattata.process_natural_language(self, message)
end
message = mattata.process_stickers(message)
message = mattata.check_links(message, false, true, false, true)
message = mattata.process_deeplinks(message)
-- If the user isn't current AFK, and they say they're going to be right back, we can
-- assume that they are now going to be AFK, so we'll help them out and set them that
-- way by making the message text the /afk command, which will later trigger the plugin.
if (message.text:lower():match('^i?\'?l?l? ?[bg][rt][bg].?$') and not redis:hget('afk:' .. message.from.id, 'since')) then
message.text = '/afk'
end
-- A boolean value to decide later on, whether the message is intended for the current plugin from the iterated table.
message = mattata.process_nicknames(message)
if not self.chats[tostring(message.chat.id)] then
self.chats[tostring(message.chat.id)] = message.chat
self.chats[tostring(message.chat.id)].disabled_plugins = redis:smembers('disabled_plugins:' .. message.chat.id) or {}
end
+ if message.reply then
+ if not self.replies[tostring(message.chat.id)] then
+ self.replies[tostring(message.chat.id)] = {}
+ end
+ if not self.replies[tostring(message.chat.id)][tostring(message.message_id)] then
+ self.replies[tostring(message.chat.id)][tostring(message.message_id)] = message.reply
+ end
+ if self.replies[tostring(message.chat.id)][tostring(message.reply.message_id)] then
+ message.reply.reply = self.replies[tostring(message.chat.id)][tostring(message.reply.message_id)]
+ end
+ end
end
self.is_command = false
self.is_command_done = false
self.is_allowed_beta_access = false
self.is_telegram = false
-- If the message is one of those pesky Telegram channel pins, it won't send a service message. We'll trick it.
if message.from.id == 777000 and message.forward_from_chat and message.forward_from_chat.type == 'channel' then
self.is_telegram = true
message.is_service_message = true
message.service_message = 'pinned_message'
message.pinned_message = {
['text'] = message.text,
['date'] = message.date,
['chat'] = message.chat,
['from'] = message.from,
['message_id'] = message.message_id,
['entities'] = message.entities,
['forward_from_message_id'] = message.forward_from_message_id,
['forward_from_chat'] = message.forward_from_chat,
['forward_date'] = message.forward_date
}
end
if message.text:match('^[/!#][%w_]+') and message.chat.type == 'supergroup' then
local command, input = message.text:lower():match('^[/!#]([%w_]+)(.*)$')
local all = redis:hgetall('chat:' .. message.chat.id .. ':aliases')
for alias, original in pairs(all) do
if command == alias then
message.text = '/' .. original .. input
message.is_alias = true
break
end
end
end
-- This is the main loop which iterates over configured plugins and runs the appropriate functions.
for _, plugin in ipairs(self.plugins) do
if not mattata.is_plugin_disabled(self, plugin.name, message) then
if plugin.is_beta_plugin and mattata.is_global_admin(message.from.id) then
self.is_allowed_beta_access = true
end
if not plugin.is_beta_plugin or (plugin.is_beta_plugin and self.is_allowed_beta_access) then
local commands = #plugin.commands or {}
for i = 1, commands do
if message.text:match(plugin.commands[i]) and mattata.is_plugin_allowed(plugin.name, self.is_user_blocklisted, configuration) and not self.is_command_done and not self.is_telegram and (not message.is_edited or mattata.is_global_admin(message.from.id)) then
self.is_command = true
message.command = plugin.commands[i]:match('([%w_%-]+)')
if plugin.on_message then
+ local old_message = message.text
+ if mattata.is_global_admin(message.from.id) and message.text:match('^.- && .-$') then
+ message.text = message.text:match('^(.-) && .-$')
+ end
local success, result = pcall(function()
return plugin.on_message(self, message, configuration, language)
end)
+ message.text = old_message
if not success then
mattata.exception(self, result, string.format('%s: %s', message.from.id, message.text), configuration.log_chat)
end
if mattata.get_setting(message.chat.id, 'delete commands') and self.is_command and not redis:sismember('chat:' .. message.chat.id .. ':no_delete', tostring(plugin.name)) and not message.is_natural_language then
mattata.delete_message(message.chat.id, message.message_id)
end
self.is_command_done = true
end
end
end
end
-- Allow plugins to handle new chat participants.
if message.new_chat_members and plugin.on_member_join then
local success, result = pcall(function()
return plugin.on_member_join(self, message, configuration, language)
end)
if not success then
mattata.exception(self, result, string.format('%s: %s', message.from.id, message.text),
configuration.log_chat)
end
end
-- Allow plugins to handle every new message (handy for anti-spam).
if (message.text or message.is_media) and plugin.on_new_message then
local success, result = pcall(function()
return plugin.on_new_message(self, message, configuration, language)
end)
if not success then
mattata.exception(self, result, string.format('%s: %s', message.from.id, message.text or tostring(message.media_type),
configuration.log_chat))
end
end
-- Allow plugins to handle service messages, and pass the type of service message before the message object.
if message.is_service_message and plugin.on_service_message then
local success, result = pcall(function()
return plugin.on_service_message(self, message.service_message:gsub('_', ' '), message, configuration, language)
end)
if not success then
mattata.exception(self, result, string.format('%s: %s', message.from.id, message.text or tostring(message.media_type),
configuration.log_chat))
end
end
end
end
mattata.process_message(self, message)
self.is_done = true
self.is_command_done = false
self.is_ai = false
return
end
function mattata:on_inline_query(inline_query)
if not inline_query.from then
return false, 'No `inline_query.from` object was found!'
elseif redis:get('global_blocklist:' .. inline_query.from.id) then
return false, 'This user is globally blocklisted!'
end
local language = require('languages.' .. mattata.get_user_language(inline_query.from.id))
inline_query.offset = inline_query.offset and tonumber(inline_query.offset) or 0
for _, plugin in ipairs(self.plugins) do
local plugins = plugin.commands or {}
for i = 1, #plugins do
local command = plugin.commands[i]
if not inline_query then
return false, 'No `inline_query` object was found!'
end
if inline_query.query:match(command)
and plugin.on_inline_query
then
local success, result = pcall(
function()
return plugin.on_inline_query(self, inline_query, configuration, language)
end
)
if not success then
local exception = string.format('%s: %s', inline_query.from.id, inline_query.query)
mattata.exception(self, result, exception, configuration.log_chat)
return false, result
elseif not result then
return api.answer_inline_query(
inline_query.id,
api.inline_result()
:id()
:type('article')
:title(configuration.errors.results)
:description(plugin.help)
:input_message_content(api.input_text_message_content(plugin.help))
)
end
end
end
end
if not inline_query.query or inline_query.query:gsub('%s', '') == '' then
local offset = inline_query.offset and tonumber(inline_query.offset) or 0
local list = mattata.get_inline_list(self.info.username, offset)
if #list == 0 then
local title = 'No more results found!'
local description = 'There were no more inline features found. Use @' .. self.info.username .. ' <query> to search for more information about commands matching the given search query.'
return mattata.send_inline_article(inline_query.id, title, description)
end
return mattata.answer_inline_query(inline_query.id, json.encode(list), 0, false, tostring(offset + 50))
end
local help = require('plugins.help')
return help.on_inline_query(self, inline_query, configuration, language)
end
function mattata:on_callback_query(message, callback_query)
if not callback_query.from then return false end
if not callback_query.message or not callback_query.message.chat then
message = {
['chat'] = {},
['message_id'] = callback_query.inline_message_id,
['from'] = callback_query.from
}
else
message = callback_query.message
message.exists = true
message = mattata.process_nicknames(message)
+ callback_query = mattata.process_nicknames(callback_query)
end
if not self.chats[tostring(message.chat.id)] then
self.chats[tostring(message.chat.id)] = message.chat
self.chats[tostring(message.chat.id)].disabled_plugins = redis:smembers('disabled_plugins:' .. message.chat.id) or {}
end
local language = require('languages.' .. mattata.get_user_language(callback_query.from.id))
if message.chat.id and mattata.is_group(message) and mattata.get_setting(message.chat.id, 'force group language') then
language = require('languages.' .. (mattata.get_value(message.chat.id, 'group language') or 'en_gb'))
end
self.language = language
if redis:get('global_blocklist:' .. callback_query.from.id) and not callback_query.data:match('^join_captcha') and not mattata.is_global_admin(callback_query.from.id) then
return false, 'This user is globally blocklisted!'
elseif message and message.exists then
if message.reply and message.chat.type ~= 'channel' and callback_query.from.id ~= message.reply.from.id and not callback_query.data:match('^game:') and not callback_query.data:match('^report:') and not mattata.is_global_admin(callback_query.from.id) then
local output = 'Only ' .. message.reply.from.first_name .. ' can use this!'
return mattata.answer_callback_query(callback_query.id, output)
end
end
for _, plugin in ipairs(self.plugins) do
if not callback_query.data or not callback_query.from then
return false
elseif plugin.name == callback_query.data:match('^(.-):.-$') and plugin.on_callback_query then
callback_query.data = callback_query.data:match('^[%a_]+:(.-)$')
if not callback_query.data then
plugin = callback_query.data
callback_query = ''
end
local success, result = pcall(
function()
return plugin.on_callback_query(self, callback_query, message or false, configuration, language)
end
)
if not success then
mattata.send_message(configuration.admins[1], json.encode(callback_query, {indent=true}))
-- mattata.answer_callback_query(callback_query.id, language['errors']['generic'])
local exception = string.format('%s: %s', callback_query.from.id, callback_query.data)
mattata.exception(self, result, exception, configuration.log_chat)
return false, result
end
end
end
return true
end
mattata.send_message = api.send_message
-- A variant of mattata.send_message(), optimised for sending a message as a reply that forces a
-- reply back from the user.
function mattata.send_force_reply(message, text, parse_mode, disable_web_page_preview, token)
local success = api.send_message(
message,
text,
parse_mode,
disable_web_page_preview,
false,
message.message_id,
'{"force_reply":true,"selective":true}',
token
)
return success
end
function mattata.get_chat(chat_id, only_api, token)
local user = mattata.get_user(chat_id)
if user then
return user
end
local success = api.get_chat(chat_id, token)
if only_api then -- stops antispam using usernames stored in the database
return success
elseif success and success.result.type == 'private' then
mattata.process_user(success.result)
elseif success then
mattata.process_chat(success.result)
end
chat_id = success and success.result.id or chat_id
local result = redis:hgetall('chat:' .. tostring(chat_id) .. ':info')
if not result or type(result) == 'table' and not next(result) then
return false
end
success.result = result
if not success.result.id then
success.result.id = chat_id
redis:hset('chat:' .. chat_id .. ':info', 'id', chat_id)
end
return success
end
function mattata:is_plugin_disabled(plugin, message)
if not plugin or not message then
return false
end
plugin = plugin:lower():gsub('^administration/', '')
if mattata.table_contains(configuration.permanent_plugins, plugin) then
return false
elseif type(message) ~= 'table' then
message = {
['chat'] = {
['id'] = message
}
}
if tostring(message.chat.id):match('^%-100') then
message.chat.type = 'supergroup'
else
message.chat.type = 'private'
end
end
if not self.chats[tostring(message.chat.id)] then
self.chats[tostring(message.chat.id)] = message.chat
end
if not self.chats[tostring(message.chat.id)].disabled_plugins then
self.chats[tostring(message.chat.id)].disabled_plugins = redis:smembers('disabled_plugins:' .. message.chat.id)
end
if not mattata.table_contains(self.chats[tostring(message.chat.id)].disabled_plugins, plugin) then
return false
end
local exists = redis:sismember('disabled_plugins:' .. message.chat.id, plugin)
return exists and true or false
end
function mattata:exception(err, message, log_chat)
local output = string.format(
'[%s]\n%s: %s\n%s\n',
os.date('%X'),
self.info.username,
mattata.escape_html(err) or '',
mattata.escape_html(message)
)
if log_chat then
return mattata.send_message(
log_chat,
string.format('<pre>%s</pre>', output),
'html'
)
end
return output
end
function mattata.is_group_admin(chat_id, user_id, is_real_admin)
if not chat_id or not user_id then
return false
elseif mattata.is_global_admin(chat_id) or mattata.is_global_admin(user_id) then
return true
elseif not is_real_admin and mattata.is_group_mod(chat_id, user_id) then
return true
end
local user, res = mattata.get_chat_member(chat_id, user_id)
if not user or not user.result then
return false, res
elseif user.result.status == 'creator' or user.result.status == 'administrator' then
return true, res
end
return false, user.result.status
end
function mattata.is_group_mod(chat_id, user_id)
if not chat_id or not user_id then
return false
elseif redis:sismember('administration:' .. chat_id .. ':mods', user_id) then
return true
end
return false
end
function mattata.process_chat(chat)
chat.id_str = tostring(chat.id)
if chat.type == 'private' then
return mattata.process_user(chat)
end
if not redis:hexists('chat:' .. chat.id .. ':info', 'id') then
print(
string.format(
'%s[34m[+] Added the chat %s to the database!%s[0m',
string.char(27),
chat.username and '@' .. chat.username or chat.id,
string.char(27)
)
)
end
redis:hset('chat:' .. chat.id .. ':info', 'title', chat.title)
redis:hset('chat:' .. chat.id .. ':info', 'type', chat.type)
if chat.username then
chat.username = chat.username:lower()
redis:hset('chat:' .. chat.id .. ':info', 'username', chat.username)
redis:set('username:' .. chat.username, chat.id)
if not redis:sismember('chat:' .. chat.id .. ':usernames', chat.username) then
redis:sadd('chat:' .. chat.id .. ':usernames', chat.username)
end
end
redis:hset('chat:' .. chat.id .. ':info', 'id', chat.id)
return chat
end
function mattata.process_user(user)
if not user then return user end
if not user.id or not user.first_name then return false end
redis:hset('user:' .. user.id .. ':info', 'id', user.id)
local new = false
user.name = user.first_name
if user.last_name then
user.name = user.name .. ' ' .. user.last_name
end
if not redis:hget('user:' .. user.id .. ':info', 'id') and configuration.debug then
print(
string.format(
'%s[34m[+] Added the user %s to the database!%s%s[0m',
string.char(27),
user.username and '@' .. user.username or user.id,
user.language_code and ' Language: ' .. user.language_code or '',
string.char(27)
)
)
new = true
elseif configuration.debug then
print(
string.format(
'%s[34m[+] Updated information about the user %s in the database!%s%s[0m',
string.char(27),
user.username and '@' .. user.username or user.id,
user.language_code and ' Language: ' .. user.language_code or '',
string.char(27)
)
)
end
redis:hset('user:' .. user.id .. ':info', 'type', 'private')
redis:hset('user:' .. user.id .. ':info', 'name', user.name)
redis:hset('user:' .. user.id .. ':info', 'first_name', user.first_name)
if user.last_name then
redis:hset('user:' .. user.id .. ':info', 'last_name', user.last_name)
else
redis:hdel('user:' .. user.id .. ':info', 'last_name')
end
if user.username then
user.username = user.username:lower()
redis:hset('user:' .. user.id .. ':info', 'username', user.username)
redis:set('username:' .. user.username, user.id)
if not redis:sismember('user:' .. user.id .. ':usernames', user.username) then
redis:sadd('user:' .. user.id .. ':usernames', user.username)
end
else
redis:hdel('user:' .. user.id .. ':info', 'username')
end
if user.language_code then
if mattata.does_language_exist(user.language_code) and not redis:hget('chat:' .. user.id .. ':settings', 'language') then
-- If a translation exists for the user's language code, and they haven't selected
-- a language already, then set it as their primary language!
redis:hset('chat:' .. user.id .. ':settings', 'language', user.language_code)
end
redis:hset('user:' .. user.id .. ':info', 'language_code', user.language_code)
else
redis:hdel('user:' .. user.id .. ':info', 'language_code')
end
redis:hset('user:' .. user.id .. ':info', 'is_bot', tostring(user.is_bot))
if new then
redis:hset('user:' .. user.id .. ':info', 'id', user.id)
end
if redis:get('nick:' .. user.id) then
user.first_name = redis:get('nick:' .. user.id)
user.name = user.first_name
user.last_name = nil
end
return user, new
end
function mattata.sort_message(message)
message.is_natural_language = false
message.text = message.text or message.caption or '' -- Ensure there is always a value assigned to message.text.
message.text = message.text:gsub('^/(%a+)%_', '/%1 ')
if message.text:match('^[/!#]start .-$') then -- Allow deep-linking through the /start command.
message.text = '/' .. message.text:match('^[/!#]start (.-)$')
end
message.is_media = mattata.is_media(message)
message.media_type = mattata.media_type(message)
message.file_id = mattata.file_id(message)
message.is_alias = false -- We sort this later.
message.is_service_message, message.service_message = mattata.service_message(message)
if message.caption_entities then
message.entities = message.caption_entities
message.caption_entities = nil
end
if message.from.language_code then
message.from.language_code = message.from.language_code:lower():gsub('%-', '_') -- make it fit with the names of our language files
if message.from.language_code:len() == 2 and message.from.language_code ~= 'en' then
message.from.language_code = message.from.language_code .. '_' .. message.from.language_code
elseif message.from.language_code:len() == 2 or message.from.language_code == 'root' then -- not sure why but some english users were having `root` return as their language
message.from.language_code = 'en_us'
end
end
message.reply = message.reply and mattata.sort_message(message.reply) or nil
if message.from then
message.from = mattata.process_user(message.from)
end
if message.reply then
message.reply.from = mattata.process_user(message.reply.from)
end
if message.forward_from then
message.forward_from = mattata.process_user(message.forward_from)
end
if message.chat and message.chat.type ~= 'private' then
-- Add the user to the set of users in the current chat.
if configuration.administration.store_chat_members and message.from then
if not redis:sismember('chat:' .. message.chat.id .. ':users', message.from.id) then
redis:sadd('chat:' .. message.chat.id .. ':users', message.from.id)
end
end
if message.new_chat_members then
message.chat = mattata.process_chat(message.chat)
for i = 1, #message.new_chat_members do
if configuration.administration.store_chat_users then
redis:sadd('chat:' .. message.chat.id .. ':users', message.new_chat_members[i].id) -- add users to the chat's set in the database
end
message.new_chat_members[i] = mattata.process_user(message.new_chat_members[i])
end
elseif message.left_chat_member then -- if they've left the chat then there's no need for them to be in the set anymore
message.chat = mattata.process_chat(message.chat)
message.left_chat_member = mattata.process_user(message.left_chat_member)
if configuration.administration.store_chat_users then
redis:srem('chat:' .. message.chat.id .. ':users', message.left_chat_member.id)
end
end
end
if message.text and message.chat and message.reply and message.reply.from and message.reply.from.id == api.info.id then
local action = redis:get('action:' .. message.chat.id .. ':' .. message.reply.message_id)
-- If an action was saved for the replied-to message (as part of a multiple step command), then
-- we'll get information about the action.
if action then
message.text = action .. ' ' .. message.text -- Concatenate the saved action's command
-- with the new `message.text`.
message.reply = nil -- This caused some issues with administrative commands which would
-- prioritise replied-to users over users given by arguments.
redis:del(action) -- Delete the action for this message, since we've done what we needed to do
-- with it now.
end
end
if message.entities then
for n, entities in pairs(message.entities) do
if entities.type == 'text_mention' then
message.text = message.text:gsub(message.entities[n].user.first_name, message.entities[n].user.id)
end
end
end
return message
end
function mattata.is_global_admin(id)
for _, v in pairs(configuration.admins) do
if id == v then
return true
end
end
return false
end
function mattata.get_user(input, force_api, is_id_plugin, cache_only)
if tonumber(input) == nil and input then -- check it's not an ID
input = input:match('^%@?(.-)$')
input = redis:get('username:' .. input:lower())
end
if not input or tonumber(input) == nil then -- if it's still not an ID then we'll give up
return false
end
local user = redis:hgetall('user:' .. tostring(input) .. ':info')
if is_id_plugin and user.id then
local success = mattata.get_chat(user.id) -- Try and get latest info about the user for the ID plugin
if success then
return success
end
end
if user.username and not cache_only then
local scrape, scrape_res = https.request('https://t.me/' .. user.username)
if scrape_res == 200 then
local bio = scrape:match('%<div class="tgme_page_description "%>(.-)%</div%>')
if bio then
bio = bio:gsub('%b<>', '')
bio = html.decode(bio)
user.bio = bio
end
end
end
if user.id then
return {
['result'] = {
['id'] = tonumber(user.id),
['type'] = user.type,
['name'] = user.name,
['first_name'] = user.first_name,
['last_name'] = user.last_name,
['username'] = user.username,
['is_bot'] = user.is_bot,
['bio'] = user.bio
}
}
end
if force_api then
return mattata.get_chat(input)
end
return false
end
function mattata.get_inline_list(username, offset)
offset = offset and tonumber(offset) or 0
local inline_list = {}
table.sort(inline_plugin_list)
for k, v in pairs(inline_plugin_list) do
if k > offset and k < offset + 50 then -- The bot API only accepts a maximum of 50 results, hence we need the offset.
v = v:gsub('\n', ' ')
table.insert(
inline_list,
mattata.inline_result()
:type('article')
:id(tostring(k))
:title(v:match('^(/.-) %- .-$'))
:description(v:match('^/.- %- (.-)$'))
:input_message_content(
mattata.input_text_message_content(
string.format(
'• %s - %s\n\nTo use this command inline, you must use the syntax:\n@%s %s',
v:match('^(/.-) %- .-$'),
v:match('^/.- %- (.-)$'),
username,
v:match('^(/.-) %- .-$')
)
)
)
:reply_markup(
mattata.inline_keyboard():row(
mattata.row():switch_inline_query_button('Show me how!', v:match('^(/.-) '))
)
)
)
end
end
return inline_list
end
function mattata:get_help(is_administrative, chat_id)
local list_to_use = is_administrative == true and administrative_plugin_list or plugin_list
local help = {}
local count = 1
table.sort(list_to_use)
for _, v in pairs(list_to_use) do
if v:match('^/.- %- .-$') then
-- Do some replacement for plugins that have different primary commands to their plugin name.
local to_match = v:gsub('/np', '/lastfm'):gsub('/r/', '/reddit '):gsub('/s/', '/sed '):gsub('(/cat)', '%1s')
local plugin = to_match:match('^/([%w_]+) .-$')
if not chat_id or not mattata.is_plugin_disabled(self, plugin, chat_id) then
local command, description = v:match('^(.-) %- (.-)$')
local parameters = ' '
if not command then mattata.send_message(configuration.admins[1], v) end
if command:match(' [%[<]') then
command, parameters = command:match('^(.-)( .-)$')
parameters = '<code>' .. mattata.escape_html(parameters) .. '</code> '
end
local output = command .. parameters .. '- <em>' .. mattata.escape_html(description) .. '</em>'
table.insert(help, utf8.char(8226) .. ' ' .. output)
count = count + 1
end
end
end
return help
end
function mattata.format_time(seconds)
if not seconds or tonumber(seconds) == nil then
return false
end
seconds = tonumber(seconds) -- Make sure we're handling a numerical value
local minutes = math.floor(seconds / 60)
if minutes == 0 then
return seconds ~= 1 and seconds .. ' seconds' or seconds .. ' second'
elseif minutes < 60 then
return minutes ~= 1 and minutes .. ' minutes' or minutes .. ' minute'
end
local hours = math.floor(seconds / 3600)
if hours == 0 then
return minutes ~= 1 and minutes .. ' minutes' or minutes .. ' minute'
elseif hours < 24 then
return hours ~= 1 and hours .. ' hours' or hours .. ' hour'
end
local days = math.floor(seconds / 86400)
if days == 0 then
return hours ~= 1 and hours .. ' hours' or hours .. ' hour'
elseif days < 7 then
return days ~= 1 and days .. ' days' or days .. ' day'
end
local weeks = math.floor(seconds / 604800)
if weeks == 0 then
return days ~= 1 and days .. ' days' or days .. ' day'
else
return weeks ~= 1 and weeks .. ' weeks' or weeks .. ' week'
end
end
function mattata.does_language_exist(language)
return pcall( -- nice and simple, perform a pcall to require the language, and if it errors then it doesn't exist
function()
return require('languages.' .. language)
end
)
end
function mattata.save_to_file(content, file_path)
if not content then
return false
end
file_path = file_path or ('/tmp/temp_' .. os.time() .. '.txt')
local file = io.open(file_path, 'w+')
file:write(tostring(content))
file:close()
return true
end
function mattata.insert_keyboard_row(keyboard, first_text, first_callback, second_text, second_callback, third_text, third_callback)
-- todo: get rid of this function as it's dirty, who only allows 3 buttons in a row??
table.insert(
keyboard['inline_keyboard'],
{
{
['text'] = first_text,
['callback_data'] = first_callback
},
{
['text'] = second_text,
['callback_data'] = second_callback
},
{
['text'] = third_text,
['callback_data'] = third_callback
}
}
)
return keyboard
end
function mattata.is_user_blocklisted(message)
if not message or not message.from or not message.chat then
return false, false, false
elseif mattata.is_global_admin(message.from.id) then
return false, false, false
end
local gbanned = redis:get('global_ban:' .. message.from.id) -- Check if the user is globally
-- blocklisted from using the bot.
local group = redis:get('group_blocklist:' .. message.chat.id .. ':' .. message.from.id) -- Check
-- if the user is blocklisted from using the bot in the current group.
local gblocklisted = redis:get('global_blocklist:' .. message.from.id)
return group, gblocklisted, gbanned
end
function mattata.is_spamwatch_blocklisted(message, force_check)
if tonumber(message) ~= nil then -- Add support for passing just the user ID too!
message = {
['from'] = {
['id'] = tonumber(message)
}
}
elseif not message or not message.from then
return false, nil, 'No valid message object was passed! It needs to have a message.from as well!', 404
end
local is_cached = redis:get('not_blocklisted:' .. message.from.id)
if is_cached and not force_check then -- We don't want to perform an HTTPS call every time the bot sees a chat!
return false, nil, 'That user is cached as not blocklisted!', 404
end
local response = {}
local _ = https.request(
{
['url'] = 'https://api.spamwat.ch/banlist/' .. message.from.id,
['method'] = 'GET',
['headers'] = {
['Authorization'] = 'Bearer ' .. configuration.keys.spamwatch
},
['sink'] = ltn12.sink.table(response)
}
)
response = table.concat(response)
local jdat = json.decode(response)
if not jdat then
return false, nil, 'The server appears to be offline', 521
elseif jdat.error then
if jdat.code == 404 then -- The API returns a 404 code when the user isn't in the SpamWatch database
redis:set('not_blocklisted:' .. message.from.id, true)
redis:expire('not_blocklisted:' .. message.from.id, 604800) -- Let the key last a week!
end
return false, jdat, jdat.error, jdat.code
elseif jdat.id then
return true, jdat, 'Success', 200
end
return false, jdat, 'Error!', jdat.code or 404
end
function mattata:process_afk(message) -- Checks if the message references an AFK user and tells the
-- person mentioning them that they are marked AFK. If a user speaks and is currently marked as AFK,
-- then the bot will announce their return along with how long they were gone for.
if message.from.username
and redis:hget('afk:' .. message.from.id, 'since')
and not mattata.is_plugin_disabled(self, 'afk', message)
and not message.text:match('^[/!#]afk')
and not message.text:lower():match('^i?\'?l?l? ?[bg][rt][bg].?$')
then
local since = os.time() - tonumber(redis:hget('afk:' .. message.from.id, 'since'))
redis:hdel('afk:' .. message.from.id, 'since')
redis:hdel('afk:' .. message.from.id, 'note')
local keys = redis:keys('afk:' .. message.from.id .. ':replied:*')
if #keys > 0 then
for _, key in pairs(keys) do
redis:del(key)
end
end
local output = message.from.first_name .. ' has returned, after being /AFK for ' .. mattata.format_time(since) .. '.'
mattata.send_message(message.chat.id, output)
elseif (message.text:match('@[%w_]+') -- If a user gets mentioned, check to see if they're AFK.
or message.reply) and not redis:get('afk:' .. message.from.id .. ':replied:' .. message.chat.id) then
local username = message.reply and message.reply.from.id or message.text:match('@([%w_]+)')
local success = mattata.get_user(username)
if not success or not success.result or not success.result.id then
return false
end
local exists = redis:hexists('afk:' .. success.result.id, 'since')
if success and success.result and exists then -- If all the checks are positive, the mentioned user is AFK, so we'll tell the person mentioning them that this is the case!
if message.reply then
redis:set('afk:' .. message.from.id .. ':replied:' .. message.chat.id, true)
end
local output = success.result.first_name .. ' is currently AFK!'
local note = redis:hget('afk:' .. message.from.id, 'note')
if note then
output = output .. '\nNote: ' .. note
end
mattata.send_reply(message, output)
end
end
end
function mattata.process_stickers(message)
if message.chat.type == 'supergroup' and message.sticker then
-- Process each sticker to see if they are one of the configured, command-performing stickers.
for _, v in pairs(configuration.stickers.ban) do
if message.sticker.file_unique_id == v then
message.text = '/ban'
end
end
for _, v in pairs(configuration.stickers.warn) do
if message.sticker.file_unique_id == v then
message.text = '/warn'
end
end
for _, v in pairs(configuration.stickers.kick) do
if message.sticker.file_unique_id == v then
message.text = '/kick'
end
end
end
return message
end
function mattata:process_natural_language(message)
local text = message.text:lower()
local name = self.info.first_name:lower()
if text:match(name .. '.- ban @?[%w_-]+ ?') then
message.text = '/ban ' .. text:match(name .. '.- ban (@?[%w_-]+) ?')
elseif text:match(name .. '.- warn @?[%w_-]+ ?') then
message.text = '/warn ' .. text:match(name .. '.- warn (@?[%w_-]+) ?')
elseif text:match(name .. '.- kick @?[%w_-]+ ?') then
message.text = '/kick ' .. text:match(name .. '.- kick (@?[%w_-]+) ?')
elseif text:match(name .. '.- unban @?[%w_-]+ ?') then
message.text = '/unban ' .. text:match(name .. '.- unban (@?[%w_-]+) ?')
elseif text:match(name .. '.- resume my music') then
local myspotify = require('plugins.myspotify')
local success = myspotify.reauthorise_account(message.from.id, configuration)
local output = success and myspotify.play(message.from.id) or 'An error occured whilst trying to connect to your Spotify account, are you sure you\'ve connected me to it?'
mattata.send_message(message.chat.id, output)
end
message.is_natural_language = true
return message
end
function mattata.process_spam(message)
if message.forward_from then return false end
local msg_count = tonumber(
redis:get('antispam:' .. message.chat.id .. ':' .. message.from.id) -- Check to see if the user
-- has already sent 1 or more messages to the current chat, in the past 5 seconds.
)
or 1 -- If this is the first time the user has posted in the past 5 seconds, we'll make it 1 accordingly.
redis:setex(
'antispam:' .. message.chat.id .. ':' .. message.from.id,
configuration.administration.global_antispam.ttl, -- set the TTL
msg_count + 1 -- Increase the current message count by 1.
)
if msg_count == configuration.administration.global_antispam.message_warning_amount -- If the user has sent x messages in the past y seconds, send them a warning.
-- and not mattata.is_global_admin(message.from.id)
and message.chat.type == 'private' then
-- Don't run the antispam plugin if the user is configured as a global admin in `configuration.lua`.
mattata.send_reply( -- Send a warning message to the user who is at risk of being blocklisted for sending
-- too many messages.
message,
string.format(
'Hey %s, please don\'t send that many messages, or you\'ll be forbidden to use me for 24 hours!',
message.from.username and '@' .. message.from.username or message.from.name
)
)
elseif msg_count == configuration.administration.global_antispam.message_blocklist_amount -- If the user has sent x messages in the past y seconds, blocklist them globally from
-- using the bot for 24 hours.
-- and not mattata.is_global_admin(message.from.id) -- Don't blocklist the user if they are configured as a global
-- admin in `configuration.lua`.
then
redis:set('global_blocklist:' .. message.from.id, true)
if configuration.administration.global_antispam.blocklist_length ~= -1 and configuration.administration.global_antispam.blocklist_length ~= 'forever' then
redis:expire('global_blocklist:' .. message.from.id, configuration.administration.global_antispam.blocklist_length)
end
return mattata.send_reply(
message,
string.format(
'Sorry, %s, but you have been blocklisted from using me for the next 24 hours because you have been spamming!',
message.from.username and '@' .. message.from.username or message.from.name
)
)
end
return false
end
function mattata:process_language(message)
if message.from.language_code then
if not mattata.does_language_exist(message.from.language_code) then
if not redis:sismember('mattata:missing_languages', message.from.language_code) then -- If we haven't stored the missing language file, add it into the database.
redis:sadd('mattata:missing_languages', message.from.language_code)
end
if (message.text == '/start' or message.text == '/start@' .. self.info.username) and message.chat.type == 'private' then
mattata.send_message(
message.chat.id,
'It appears that I haven\'t got a translation in your language (' .. message.from.language_code .. ') yet. If you would like to voluntarily translate me into your language, please join <a href="https://t.me/mattataDev">my official development group</a>. Thanks!',
'html'
)
end
elseif redis:sismember('mattata:missing_languages', message.from.language_code) then
-- If the language file is found, yet it's recorded as missing in the database, it's probably
-- new, so it is deleted from the database to prevent confusion when processing this list!
redis:srem('mattata:missing_languages', message.from.language_code)
end
end
end
function mattata.process_deeplinks(message)
if message.text:match('^/[%a_]+_%-%d+$') and message.chat.type == 'private' then
message.text = message.text:gsub('^(/[%a_]+)_(.-)$', '%1 %2')
end
return message
end
function mattata.toggle_setting(chat_id, setting, value)
value = (type(value) ~= 'string' and tostring(value) ~= 'nil') and value or true
if not chat_id or not setting then
return false
elseif not redis:hexists('chat:' .. chat_id .. ':settings', tostring(setting)) then
return redis:hset('chat:' .. chat_id .. ':settings', tostring(setting), value)
end
return redis:hdel('chat:' .. chat_id .. ':settings', tostring(setting))
end
function mattata.get_usernames(user_id)
if not user_id then
return false
elseif tonumber(user_id) == nil then
user_id = tostring(user_id):match('^@(.-)$') or tostring(user_id)
user_id = redis:get('username:' .. user_id:lower())
if not user_id then
return false
end
end
return redis:smembers('user:' .. user_id .. ':usernames')
end
function mattata.check_links(message, get_links, only_valid, allowlist, return_message, delete)
message.is_invite_link = false
message.is_valid_invite_link = false
local links = {}
if message.entities then
for i = 1, #message.entities do
if message.entities[i].type == 'text_link' then
message.text = message.text .. ' ' .. message.entities[i].url
end
end
end
for n in message.text:gmatch('%@[%w_]+') do
table.insert(links, n:match('^%@([%w_]+)$'))
end
for n in message.text:gmatch('[Tt]%.[Mm][Ee]/[Jj][Oo][Ii][Nn][Cc][Hh][Aa][Tt]/[%w_]+') do
table.insert(links, n:match('/([Jj][Oo][Ii][Nn][Cc][Hh][Aa][Tt]/[%w_]+)$'))
end
for n in message.text:gmatch('[Tt]%.[Mm][Ee]/[%w_]+') do
if not n:match('/[Jj][Oo][Ii][Nn][Cc][Hh][Aa][Tt]$') then
table.insert(links, n:match('/([%w_]+)$'))
end
end
for n in message.text:gmatch('[Tt][Ee][Ll][Ee][Gg][Rr][Aa][Mm]%.[Mm][Ee]/[Jj][Oo][Ii][Nn][Cc][Hh][Aa][Tt]/[%w_]+') do
table.insert(links, n:match('/([Jj][Oo][Ii][Nn][Cc][Hh][Aa][Tt]/[%w_]+)$'))
end
for n in message.text:gmatch('[Tt][Ee][Ll][Ee][Gg][Rr][Aa][Mm]%.[Mm][Ee]/[%w_]+') do
if not n:match('/[Jj][Oo][Ii][Nn][Cc][Hh][Aa][Tt]$') then
table.insert(links, n:match('/([%w_]+)$'))
end
end
for n in message.text:gmatch('[Tt][Ee][Ll][Ee][Gg][Rr][Aa][Mm]%.[Dd][Oo][Gg]/[Jj][Oo][Ii][Nn][Cc][Hh][Aa][Tt]/[%w_]+') do
table.insert(links, n:match('/([Jj][Oo][Ii][Nn][Cc][Hh][Aa][Tt]/[%w_]+)$'))
end
for n in message.text:gmatch('[Tt][Ee][Ll][Ee][Gg][Rr][Aa][Mm]%.[Dd][Oo][Gg]/[%w_]+') do
if not n:match('/[Jj][Oo][Ii][Nn][Cc][Hh][Aa][Tt]$') then
table.insert(links, n:match('/([%w_]+)$'))
end
end
for n in message.text:gmatch('[Tt][Gg]://[Jj][Oo][Ii][Nn]%?[Ii][Nn][Vv][Ii][Tt][Ee]=[%w_]+') do
table.insert(links, '[Jj][Oo][Ii][Nn][Cc][Hh][Aa][Tt]/' .. n:match('=([%w_]+)$'))
end
for n in message.text:gmatch('[Tt][Gg]://[Rr][Ee][Ss][Oo][Ll][Vv][Ee]%?[Dd][Oo][Mm][Aa][Ii][Nn]=[%w_]+') do
table.insert(links, n:match('=([%w_]+)$'))
end
if allowlist then
local count = 0
for _, v in pairs(links) do
v = v:match('^[Jj][Oo][Ii][Nn][Cc][Hh][Aa][Tt]') and v or v:lower()
if delete then
redis:del('allowlisted_links:' .. message.chat.id .. ':' .. v)
else
redis:set('allowlisted_links:' .. message.chat.id .. ':' .. v, true)
end
count = count + 1
end
return string.format(
'%s link%s ha%s been %s in this chat!',
count,
count == 1 and '' or 's',
count == 1 and 's' or 've',
delete and 'blocklisted' or 'allowlisted'
)
end
local checked = {}
local valid = {}
for _, v in pairs(links) do
if not mattata.is_allowlisted_link(v:lower(), message.chat.id) then
if v:match('^[Jj][Oo][Ii][Nn][Cc][Hh][Aa][Tt]/') then
message.is_invite_link = true
if only_valid then
local str, res = https.request('https://t.me/' .. v)
if res == 200 and str and str:match('tgme_page_title') then
table.insert(valid, v)
message.is_valid_invite_link = true
end
end
if not get_links then
return return_message and message or true
end
elseif not mattata.table_contains(checked, v:lower()) then
if not mattata.get_user(v:lower()) then
local success = mattata.get_chat('@' .. v:lower(), true)
if success and success.result and success.result.type ~= 'private' and success.result.id ~= message.chat.id then
message.is_invite_link = true
if not get_links then
return return_message and message or true
end
table.insert(valid, v:lower())
end
table.insert(checked, v:lower())
end
end
end
end
if get_links then
if only_valid then
return valid
end
return checked
end
return return_message and message or false
end
function mattata:process_message(message)
if not message.chat then
return true
end
if message.chat and message.chat.type ~= 'private' and not mattata.service_message(message) and not mattata.is_plugin_disabled(self, 'statistics', message) and not mattata.is_privacy_enabled(message.from.id) and not self.is_blocklisted then
redis:incr('messages:' .. message.from.id .. ':' .. message.chat.id)
end
if message.new_chat_members and mattata.get_setting(message.chat.id, 'use administration') and mattata.get_setting(message.chat.id, 'antibot') and not mattata.is_group_admin(message.chat.id, message.from.id) and not mattata.is_global_admin(message.from.id) then
local kicked = {}
local usernames = {}
for _, v in pairs(message.new_chat_members) do
if v.username and v.username:lower():match('bot$') and v.id ~= message.from.id and v.id ~= self.info.id and tostring(v.is_bot) == 'true' then
local success = mattata.kick_chat_member(message.chat.id, v.id)
if success then
table.insert(kicked, mattata.escape_html(v.first_name) .. ' [' .. v.id .. ']')
table.insert(usernames, '@' .. v.username)
end
end
end
if #kicked > 0 and #usernames > 0 and #kicked == #usernames then
local log_chat = mattata.get_log_chat(message.chat.id)
mattata.send_message(log_chat, string.format('<pre>%s [%s] has kicked %s from %s [%s] because anti-bot is enabled.</pre>', mattata.escape_html(self.info.first_name), self.info.id, table.concat(kicked, ', '), mattata.escape_html(message.chat.title), message.chat.id), 'html')
return mattata.send_message(message, string.format('Kicked %s because anti-bot is enabled.', table.concat(usernames, ', ')))
end
end
end
function mattata.process_nicknames(message)
local nickname = redis:hget('user:' .. message.from.id .. ':info', 'nickname')
if nickname then
message.from.original_name = message.from.name
message.from.has_nickname = true
message.from.name = nickname
message.from.first_name = nickname
message.from.last_name = nil
else
message.from.has_nickname = false
end
if message.reply then
nickname = redis:hget('user:' .. message.reply.from.id .. ':info', 'nickname')
if nickname then
message.reply.from.original_name = message.reply.from.name
message.reply.from.has_nickname = true
message.reply.from.name = nickname
message.reply.from.first_name = nickname
message.reply.from.last_name = nil
else
message.reply.from.has_nickname = false
end
end
return message
end
return mattata
\ No newline at end of file
diff --git a/plugins/addsticker.lua b/plugins/addsticker.lua
new file mode 100644
index 0000000..daf6e13
--- /dev/null
+++ b/plugins/addsticker.lua
@@ -0,0 +1,194 @@
+--[[
+ Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
+ This code is licensed under the MIT. See LICENSE for details.
+]]
+
+local addsticker = {}
+local mattata = require('mattata')
+local http = require('socket.http')
+local ltn12 = require('ltn12')
+local mime = require('mime')
+local json = require('dkjson')
+local redis = require('libs.redis')
+
+function addsticker:init()
+ addsticker.commands = mattata.commands(self.info.username):command('addsticker'):command('getsticker').table
+ addsticker.help = '/addsticker [pack name] - Converts the replied-to photo into a sticker and adds it to your pack. Specify a name for the pack via command input on first use, this cannot be changed after, until you\'ve hit 120 stickers and it makes a new set, or you\'ve deleted your pack in @stickers. Use /getsticker to get the uncompressed file to send to @stickers.'
+end
+
+function addsticker.delete_file(file)
+ os.execute('rm ' .. file .. ' && rm output.png')
+ return true
+end
+
+function addsticker:on_message(message, configuration, language)
+ local is_sticker, is_text
+ local input = mattata.input(message.text)
+ if not message.reply then
+ return mattata.send_reply(message, 'You must use this command in reply to a photo!')
+ elseif not message.reply.is_media and message.reply.text then
+ local sizes
+ local reply = {}
+ local success = mattata.get_user_profile_photos(message.reply.from.id)
+ if success and success.result.total_count > 0 then
+ sizes = {
+ ['small_file_id'] = success.result.photos[1][1].file_id,
+ ['small_file_unique_id'] = success.result.photos[1][1].file_unique_id,
+ ['big_file_id'] = success.result.photos[1][#success.result.photos[1]].file_id,
+ ['big_file_unique_id'] = success.result.photos[1][#success.result.photos[1]].file_unique_id
+ }
+ end
+ if message.reply.reply then -- Check the context object for a reply to a reply.
+ local reply_original_name = message.reply.reply.from.has_nickname and message.reply.reply.from.original_name or message.reply.reply.from.name
+ reply = {
+ ['chatId'] = message.chat.id,
+ ['from'] = {
+ ['id'] = message.reply.reply.from.id,
+ ['name'] = reply_original_name
+ },
+ ['text'] = message.reply.reply.text
+ }
+ end
+ local original_name = message.reply.from.has_nickname and message.reply.from.original_name or message.reply.from.name
+ if (message.reply.text:match('^[\216-\219][\128-\191]') or message.reply.text:match('^' .. utf8.char(0x202e)) or message.reply.text:match('^' .. utf8.char(0x200f))) then
+ message.reply.text = mattata.split_string(message.reply.text, true)
+ message.reply.text = table.concat(message.reply.text, ' ')
+ end
+ local payload = {
+ ['type'] = 'quote',
+ ['backgroundColor'] = '#243447',
+ ['width'] = 512,
+ ['height'] = 512,
+ ['scale'] = 2,
+ ['messages'] = {
+ {
+ ['message'] = {
+ ['chatId'] = message.chat.id,
+ ['avatar'] = true,
+ ['from'] = {
+ ['id'] = message.reply.from.id,
+ ['name'] = original_name
+ },
+ ['text'] = message.reply.text
+ },
+ ['replyMessage'] = reply,
+ ['entities'] = {}
+ }
+ }
+ }
+ if type(sizes) == 'table' then
+ payload.messages[1].message.from.photo = sizes
+ end
+ if message.reply.from.username then
+ payload.messages[1].message.from.username = message.reply.from.username
+ end
+ if message.reply.entities then
+ payload.messages[1].entities = message.reply.entities
+ end
+ payload = json.encode(payload) -- Serialise the payload.
+ local response = {}
+ local old_timeout = http.TIMEOUT
+ http.TIMEOUT = 3
+ local _, res = http.request({
+ ['url'] = 'http://localhost:3000/generate',
+ ['method'] = 'POST',
+ ['headers'] = {
+ ['Content-Type'] = 'application/json',
+ ['Content-Length'] = payload:len()
+ },
+ ['source'] = ltn12.source.string(payload),
+ ['sink'] = ltn12.sink.table(response)
+ })
+ http.TIMEOUT = old_timeout
+ if res ~= 200 then
+ return false
+ end
+ response = table.concat(response)
+ local jdat = json.decode(response)
+ local output = configuration.bot_directory .. '/output.webp'
+ ltn12.pump.all(
+ ltn12.source.string(jdat.result.image),
+ ltn12.sink.chain(
+ mime.decode('base64'),
+ ltn12.sink.file(io.open(output, 'w'))
+ )
+ )
+ is_text = true
+ elseif message.reply.sticker then
+ if message.reply.sticker.is_animated then
+ return mattata.send_reply(message, 'I\'m afraid animated stickers aren\'t supported at the moment.')
+ end
+ is_sticker = true
+ elseif not message.reply.photo and not message.reply.document then
+ local success = mattata.get_user_profile_photos(message.reply.from.id)
+ if not success or success.result.total_count == 0 then
+ return mattata.send_reply(message, 'This user doesn\'t allow me to see their profile picture. You must use this command in reply to a photo!')
+ end
+ message.reply.file_id = success.result.photos[1][#success.result.photos[1]].file_id
+ elseif message.reply.document then
+ if (message.reply.document.mime_type ~= 'image/jpeg' and message.reply.document.mime_type ~= 'image/png') or not message.reply.document.file_name:match('%.[JjPp][PpNn][Ee]?[Gg]$') then
+ return mattata.send_reply(message, 'The file must be JPEG or a PNG image.')
+ elseif message.reply.document.file_size > 1048576 then
+ return mattata.send_reply(message, 'Please send a photo that is 1MB or smaller in file size!')
+ end
+ end
+ local file, file_name
+ if not is_text and message.reply.is_media then
+ file = mattata.get_file(message.reply.file_id)
+ if not file then
+ return mattata.send_reply(message, language.errors.generic)
+ end
+ file_name = file.result.file_path
+ local file_path = string.format('https://api.telegram.org/file/bot%s/%s', configuration.bot_token, file_name)
+ file = mattata.download_file(file_path, file_name:match('/(.-)$'), configuration.bot_directory)
+ if not file then
+ return false
+ end
+ file_name = file_name:match('/(.-)$')
+ else
+ file_name = 'output.webp'
+ file = configuration.bot_directory .. '/output.webp'
+ end
+ local command = is_sticker and string.format('dwebp %s -o output.png', file_name) or string.format('convert ' .. file_name .. ' -resize 512x512 output.png', file)
+ os.execute(command)
+ local output_file = configuration.bot_directory .. '/output.png'
+ if message.text:match('^[/!#]getsticker') then
+ mattata.send_document(message.chat.id, output_file)
+ return addsticker.delete_file(file)
+ end
+ local set_name = string.format('U%s_by_%s', message.from.id, self.info.username:lower())
+ local set_title = message.from.original_name or message.from.first_name
+ local exists = mattata.get_sticker_set(set_name)
+ if exists then
+ if #exists.result.stickers == 120 then -- Maximum amount of stickers allowed per-pack.
+ local amount = exists.result.name:match('^U%d+_(%d*)')
+ local new = (amount and tonumber(amount) or 1) + 1
+ set_name = string.format('U%s_%s_by_%s', message.from.id, new, self.info.username:lower())
+ amount = redis:hget('user:' .. message.from.id .. ':info', 'sticker_packs') or 1
+ amount = math.floor(tonumber(amount)) + 1
+ redis:hset('user:' .. message.from.id .. ':info', 'sticker_packs', amount)
+ else
+ local success = mattata.add_sticker_to_set(message.from.id, set_name, output_file, utf8.char(128045))
+ addsticker.delete_file(file)
+ if not success then
+ return mattata.send_reply(message, language.errors.generic)
+ end
+ return mattata.send_reply(message, 'I\'ve added that to [your pack](https://t.me/addstickers/' .. set_name .. ')!', true, true)
+ end
+ end
+ if input then
+ if input:len() > 64 then
+ addsticker.delete_file(file)
+ return mattata.send_reply(message, 'The sticker pack title cannot be longer than 64 characters in length!')
+ end
+ set_title = input
+ end
+ local success = mattata.create_new_sticker_set(message.from.id, set_name, set_title, output_file, utf8.char(128045))
+ addsticker.delete_file(file)
+ if not success then
+ return mattata.send_reply(message, language.errors.generic)
+ end
+ return mattata.send_reply(message, 'I\'ve created you a pack called _' .. mattata.escape_markdown(set_title) .. '_ and added that sticker to [your new pack](https://t.me/addstickers/' .. set_name .. ')!', true, true)
+end
+
+return addsticker
\ No newline at end of file
diff --git a/plugins/administration/ban.lua b/plugins/administration/ban.lua
index 21c6049..f3c3f8b 100644
--- a/plugins/administration/ban.lua
+++ b/plugins/administration/ban.lua
@@ -1,94 +1,94 @@
--[[
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
]]
local ban = {}
local mattata = require('mattata')
function ban:init()
ban.commands = mattata.commands(self.info.username):command('ban').table
ban.help = '/ban [user] - Bans a user from the current chat. This command can only be used by moderators and administrators of a supergroup.'
end
function ban:on_message(message, _, language)
if message.chat.type ~= 'supergroup' then
local output = language['errors']['supergroup']
return mattata.send_reply(message, output)
elseif not mattata.is_group_admin(message.chat.id, message.from.id) then
local output = language['errors']['admin']
return mattata.send_reply(message, output)
end
local reason = false
local user = false
local input = mattata.input(message)
-- check the message object for any users this command
-- is intended to be executed on
if message.reply then
user = message.reply.from.id
if input then
reason = input
end
elseif input and input:match(' ') then
user, reason = input:match('^(.-) (.-)$')
elseif input then
user = input
end
if not user then
local output = language['ban']['1']
local success = mattata.send_force_reply(message, output)
if success then
mattata.set_command_action(message.chat.id, success.result.message_id, '/ban')
end
return
end
if reason and type(reason) == 'string' and reason:match('^[Ff][Oo][Rr] ') then
reason = reason:match('^[Ff][Oo][Rr] (.-)$')
end
if tonumber(user) == nil and not user:match('^%@') then
user = '@' .. user
end
local user_object = mattata.get_user(user) or mattata.get_chat(user) -- resolve the username/ID to a user object
if not user_object then
return mattata.send_reply(message, language.errors.unknown)
elseif user_object.result.id == self.info.id then
return false -- don't let the bot ban itself
end
user_object = user_object.result
local status = mattata.get_chat_member(message.chat.id, user_object.id)
local is_admin = mattata.is_group_admin(message.chat.id, user_object.id)
if not status then
local output = language['errors']['generic']
return mattata.send_reply(message, output)
elseif is_admin then -- we won't try and ban moderators and administrators.
local output = language['ban']['2']
return mattata.send_reply(message, output)
elseif status.result.status == 'kicked' then -- check if the user has already been kicked
local output = language['ban']['4']
return mattata.send_reply(message, output)
end
local success = mattata.ban_chat_member(message.chat.id, user_object.id) -- attempt to ban the user from the group
if not success then -- since we've ruled everything else out, it's safe to say if it wasn't a success then the bot just isn't an administrator in the group
local output = language['ban']['5']
return mattata.send_reply(message, output)
end
mattata.increase_administrative_action(message.chat.id, user_object.id, 'bans')
- reason = reason and ', for ' .. reason or ''
+ reason = reason and '\nReason: ' .. reason or ''
local admin_username = mattata.get_formatted_user(message.from.id, message.from.first_name, 'html')
local banned_username = mattata.get_formatted_user(user_object.id, user_object.first_name, 'html')
local output
if mattata.get_setting(message.chat.id, 'log administrative actions') then
local log_chat = mattata.get_log_chat(message.chat.id)
output = string.format(language['ban']['6'], admin_username, message.from.id, banned_username, user_object.id, mattata.escape_html(message.chat.title), message.chat.id, reason, '#chat' .. tostring(message.chat.id):gsub('^-100', ''), '#user' .. user_object.id)
mattata.send_message(log_chat, output, 'html')
else
output = string.format(language['ban']['7'], admin_username, banned_username, reason)
mattata.send_message(message.chat.id, output, 'html')
end
if message.reply and mattata.get_setting(message.chat.id, 'delete reply on action') then
mattata.delete_message(message.chat.id, message.reply.message_id)
end
return mattata.delete_message(message.chat.id, message.message_id)
end
return ban
\ No newline at end of file
diff --git a/plugins/administration/banpack.lua b/plugins/administration/banpack.lua
new file mode 100644
index 0000000..1a42d9a
--- /dev/null
+++ b/plugins/administration/banpack.lua
@@ -0,0 +1,51 @@
+--[[
+ Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
+ This code is licensed under the MIT. See LICENSE for details.
+]]
+
+local banpack = {}
+local mattata = require('mattata')
+local redis = require('libs.redis')
+
+function banpack:init()
+ banpack.commands = mattata.commands(self.info.username):command('banpack'):command('bp').table
+ banpack.help = '/banpack - Bans, and removes when sent by normal users, any stickers from the replied-to sticker\'s pack. This command can only be used by moderators and administrators of a supergroup, who are also exempt from being disallowed to send stickers from these packs. Alias: /bp.'
+end
+
+function banpack:on_new_message(message)
+ if message.chat.type ~= 'supergroup' or not message.sticker or not message.sticker.set_name then
+ return false
+ elseif redis:sismember('banned_sticker_packs:' .. message.chat.id, message.sticker.set_name) and not mattata.is_group_admin(message.chat.id, message.from.id) then
+ return mattata.delete_message(message.chat.id, message.message_id)
+ end
+ return false
+end
+
+function banpack:on_message(message, _, language)
+ if message.chat.type ~= 'supergroup' then
+ return mattata.send_reply(message, language.errors.supergroup)
+ elseif not mattata.is_group_admin(message.chat.id, message.from.id) then
+ return mattata.send_reply(message, language.errors.admin)
+ elseif not message.reply then
+ return mattata.send_reply(message, 'Please reply to a sticker from the sticker set you\'d like to ban.')
+ elseif not message.reply.sticker then
+ return mattata.send_reply(message, 'You must use this command in reply to a sticker!')
+ elseif not message.reply.sticker.set_name then
+ return mattata.send_reply(message, 'That sticker isn\'t from a set, it\'s just a file - I\'m afraid I can\'t ban that!')
+ end
+ local set_name = message.reply.sticker.set_name
+ if redis:sismember('banned_sticker_packs:' .. message.chat.id, set_name) then
+ mattata.send_reply(message, 'That [sticker pack](https://t.me/addstickers/' .. set_name .. ') is already banned in this chat! To unban it, send /unbanpack in reply to one of the stickers from it!', true, true)
+ end
+ redis:sadd('banned_sticker_packs:' .. message.chat.id, set_name)
+ if mattata.get_setting(message.chat.id, 'log administrative actions') then
+ local log_chat = mattata.get_log_chat(message.chat.id)
+ local output = '%s <code>[%s]</code> has banned the sticker pack <a href="https://t.me/addstickers/%s">%s</a> in %s <code>[%s]</code>.\n#chat%s #user%s'
+ local admin = mattata.get_formatted_user(message.from.id, message.from.first_name, 'html')
+ output = string.format(output, admin, message.from.id, set_name, set_name, mattata.escape_html(message.chat.title), message.chat.id, tostring(message.chat.id):gsub('^%-100', ''), message.from.id)
+ mattata.send_message(log_chat, output, 'html')
+ end
+ return mattata.send_reply(message, 'I\'ve successfully banned [that sticker pack](https://t.me/addstickers/' .. set_name .. ') in this chat! To unban it, send /unbanpack in reply to a sticker from it - admins can still send these stickers!', true, true)
+end
+
+return banpack
\ No newline at end of file
diff --git a/plugins/administration/fban.lua b/plugins/administration/fban.lua
index aec6349..10662a9 100644
--- a/plugins/administration/fban.lua
+++ b/plugins/administration/fban.lua
@@ -1,131 +1,131 @@
--[[
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
]]
local fban = {}
local mattata = require('mattata')
local redis = require('libs.redis')
function fban:init()
fban.commands = mattata.commands(self.info.username):command('fban'):command('fedban'):command('fb').table
fban.help = '/fban [user] - Bans a user from the current chat and the Fed the group is part of. This command can only be used by Fed admins. Aliases: /fedban, /fb.'
end
function fban.on_new_message(_, message)
if message.chat.type ~= 'supergroup' then
return false
elseif mattata.is_user_fedbanned(message.chat.id, message.from.id) and not mattata.is_user_fed_allowlisted(message.chat.id, message.from.id) then
mattata.send_message(message.chat.id, 'Banned ' .. message.from.first_name .. ', because they\'ve been banned in one of this group\'s Feds!')
return mattata.ban_chat_member(message.chat.id, message.from.id)
end
return false
end
function fban:on_message(message, _, language)
if message.chat.type ~= 'supergroup' then
local output = language['errors']['supergroup']
return mattata.send_reply(message, output)
end
local fed_ids = mattata.get_feds(message.chat.id)
if #fed_ids == 0 then
return mattata.send_reply(message, 'This group isn\'t part of a fed. Ask a group admin to join one!')
end
local is_admin_feds = {}
for _, fed in pairs(fed_ids) do
if mattata.is_fed_admin(fed, message.from.id) then
table.insert(is_admin_feds, fed)
end
end
if #is_admin_feds == 0 then
return mattata.send_reply(message, 'You need to be a Fed admin in at least one of this group\'s Feds in order to be able to use this command!')
end
local reason = false
local user = false
local input = mattata.input(message)
-- check the message object for any users this command
-- is intended to be executed on
if message.reply then
user = message.reply.from.id
if input then
reason = input
end
elseif input and input:match(' ') then
user, reason = input:match('^(.-) (.-)$')
elseif input then
user = input
end
if not user then
local output = 'You need to specify the user you\'d like to ban from the Fed, either by username/ID or in reply.'
local success = mattata.send_force_reply(message, output)
if success then
mattata.set_command_action(message.chat.id, success.result.message_id, '/fban')
end
return
end
if reason and type(reason) == 'string' and reason:match('^[Ff][Oo][Rr] ') then
reason = reason:match('^[Ff][Oo][Rr] (.-)$')
end
if tonumber(user) == nil and not user:match('^%@') then
user = '@' .. user
end
local user_object = mattata.get_user(user) or mattata.get_chat(user) -- resolve the username/ID to a user object
if not user_object then
local output = language['errors']['unknown']
return mattata.send_reply(message, output)
elseif user_object.result.id == self.info.id then
return false -- don't let the bot Fed-ban itself
end
user_object = user_object.result
local status = mattata.get_chat_member(message.chat.id, user_object.id)
local is_admin = mattata.is_group_admin(message.chat.id, user_object.id)
if not status then
local output = language['errors']['generic']
return mattata.send_reply(message, output)
elseif is_admin then -- we won't try and Fed-ban moderators and administrators.
local output = 'I can\'t ban that user from the Fed because they\'re an admin in one of the groups!'
return mattata.send_reply(message, output)
end
local success = mattata.fed_ban_chat_member(message.chat.id, user_object.id, is_admin_feds) -- attempt to Fed-ban the user from the group
if not success then
mattata.send_reply(message, 'I couldn\'t ban that user in this group, because it appears I don\'t have permission to! I have still added them to the Fed-ban list(s) though!')
end
for _, fed in pairs(is_admin_feds) do
mattata.increase_administrative_action(message.chat.id, user_object.id, 'fbans')
redis:hset('fedban:' .. fed .. ':' .. user_object.id, 'banned_by', message.from.id)
redis:hset('fedban:' .. fed .. ':' .. user_object.id, 'time', os.time())
if reason then
redis:hset('fedban:' .. fed .. ':' .. user_object.id, 'reason', reason)
end
redis:sadd('fedbans:' .. fed, tonumber(user_object.id))
end
- reason = reason and ', for ' .. reason or ''
+ reason = reason and '\nReason: ' .. reason or ''
local admin_username = mattata.get_formatted_user(message.from.id, message.from.first_name, 'html')
local banned_username = mattata.get_formatted_user(user_object.id, user_object.first_name, 'html')
if mattata.get_setting(message.chat.id, 'log administrative actions') then
local log_chat = mattata.get_log_chat(message.chat.id)
local output = '%s <code>[%s]</code> has Fed-banned %s <code>[%s]</code> from %s <code>[%s]</code>%s.\n%s %s'
if #is_admin_feds > 1 then
output = '%s <code>[%s]</code> has Fed-banned %s <code>[%s]</code> from %s in the following Feds:<pre>%s</pre>\n%s %s'
output = string.format(output, admin_username, message.from.id, banned_username, user_object.id, mattata.escape_html(message.chat.title), table.concat(is_admin_feds, '\n'), '#chat' .. tostring(message.chat.id):gsub('^-100', ''), '#user' .. user_object.id)
else
output = string.format(output, admin_username, message.from.id, banned_username, user_object.id, mattata.escape_html(message.chat.title), message.chat.id, reason, '#chat' .. tostring(message.chat.id):gsub('^-100', ''), '#user' .. user_object.id)
end
mattata.send_message(log_chat, output, 'html')
else
local output = '%s has Fed-banned %s%s.'
if #is_admin_feds > 1 then
output = '%s has Fed-banned %s%s; in the following Feds:<pre>%s</pre>'
output = string.format(output, admin_username, banned_username, reason, table.concat(is_admin_feds, '\n'))
else
output = string.format(output, admin_username, banned_username, reason)
end
mattata.send_message(message.chat.id, output, 'html')
end
if message.reply and mattata.get_setting(message.chat.id, 'delete reply on action') then
mattata.delete_message(message.chat.id, message.reply.message_id)
end
return mattata.delete_message(message.chat.id, message.message_id)
end
return fban
\ No newline at end of file
diff --git a/plugins/administration/kick.lua b/plugins/administration/kick.lua
index acc4c95..791018d 100644
--- a/plugins/administration/kick.lua
+++ b/plugins/administration/kick.lua
@@ -1,95 +1,95 @@
--[[
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
]]
local kick = {}
local mattata = require('mattata')
local redis = require('libs.redis')
function kick:init()
kick.commands = mattata.commands(self.info.username):command('kick').table
kick.help = '/kick [user] - Kicks a user from the current chat. This command can only be used by moderators and administrators of a supergroup.'
end
function kick:on_message(message, _, language)
if message.chat.type ~= 'supergroup' then
mattata.send_reply(message, language['errors']['supergroup'])
return false, 'The chat is not a supergroup!'
elseif not mattata.is_group_admin(message.chat.id, message.from.id) then
mattata.send_reply(message, language['errors']['admin'])
return false, 'That user is not an admin/mod in this chat!'
end
local reason = false
local user = false
local input = mattata.input(message)
-- Check the message object for any users this command
-- is intended to be executed on.
if message.reply then
user = message.reply.from.id
reason = input
elseif input and input:match(' ') then
user, reason = input:match('^(.-) (.-)$')
elseif input then
user = input
end
if not user then
local success = mattata.send_force_reply(message, language['kick']['1'])
if success then
redis:set('action:' .. message.chat.id .. ':' .. success.result.message_id, '/kick')
end
return
end
if reason and type(reason) == 'string' and reason:match('^[Ff][Oo][Rr] ') then
reason = reason:match('^[Ff][Oo][Rr] (.-)$')
end
if tonumber(user) == nil and not user:match('^%@') then
user = '@' .. user
end
local user_object = mattata.get_user(user) -- Resolve the username/ID to a user object.
if not user_object then
mattata.send_reply(message, language['errors']['unknown'])
return false, 'No user object was found!'
elseif user_object.result.id == self.info.id then
return false, 'The user given was the bot!'
end
user_object = user_object.result
local status, error_message = mattata.get_chat_member(message.chat.id, user_object.id)
if not status then
mattata.send_reply(message, language['errors']['generic'])
return false, error_message
elseif mattata.is_group_admin(message.chat.id, user_object.id) then
-- We won't try and kick moderators and administrators.
mattata.send_reply(message, language['kick']['2'])
return false, 'That user is an admin/mod in this chat!'
elseif status.result.status == 'left' or status.result.status == 'kicked' then -- Check if the user is in the group or not.
local output = status.result.status == 'left' and language['kick']['3'] or language['kick']['4']
mattata.send_reply(message, output)
return false, output
end
local success = mattata.kick_chat_member(message.chat.id, user_object.id) -- Attempt to kick the user from the group.
if not success then -- Since we've ruled everything else out, it's safe to say if it wasn't a success
-- then the bot isn't an administrator in the group.
return mattata.send_reply(message, language['kick']['5'])
end
mattata.increase_administrative_action(message.chat.id, user_object.id, 'kicks')
- reason = reason and ', for ' .. reason or ''
+ reason = reason and '\nReason: ' .. reason or ''
local admin_username = mattata.get_formatted_user(message.from.id, message.from.first_name, 'html')
local kicked_username = mattata.get_formatted_user(user_object.id, user_object.first_name, 'html')
if mattata.get_setting(message.chat.id, 'log administrative actions') then
local log_chat = mattata.get_log_chat(message.chat.id)
local output = '%s <code>[%s]</code> has kicked %s <code>[%s]</code> from %s <code>[%s]</code>%s.\n%s %s'
output = string.format(output, admin_username, message.from.id, kicked_username, user_object.id, mattata.escape_html(message.chat.title), message.chat.id, reason, '#chat' .. tostring(message.chat.id):gsub('^-100', ''), '#user' .. user_object.id)
mattata.send_message(log_chat, output, 'html')
else
local output = '%s has kicked %s%s.'
output = string.format(output, admin_username, kicked_username, reason)
mattata.send_message(message.chat.id, output, 'html')
end
if message.reply and mattata.get_setting(message.chat.id, 'delete reply on action') then
mattata.delete_message(message.chat.id, message.reply.message_id)
end
return mattata.delete_message(message.chat.id, message.message_id)
end
return kick
\ No newline at end of file
diff --git a/plugins/administration/link.lua b/plugins/administration/link.lua
index 47ee5b4..f4d7cf1 100644
--- a/plugins/administration/link.lua
+++ b/plugins/administration/link.lua
@@ -1,38 +1,35 @@
--[[
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
]]
local link = {}
local mattata = require('mattata')
+local redis = require('libs.redis')
function link:init()
link.commands = mattata.commands(self.info.username):command('link').table
link.help = '/link - Returns the chat\'s invite link.'
end
-function link:on_message(message, configuration, language)
- if message.chat.type ~= 'supergroup'
- and message.chat.type ~= 'channel'
- then
- return mattata.send_reply(
- message,
- 'This command can only be used in supergroups and channels!'
- )
+function link.on_message(_, message, _, language)
+ if message.chat.type == 'private' then
+ return mattata.send_reply(message, language.errors.supergroup)
end
- local success = mattata.export_chat_invite_link(message.chat.id)
- if not success
- then
- return mattata.send_reply(
- message,
- 'I need to be an administrator of this chat in order to retrieve the invite link.'
- )
+ local success = message.chat.username and {
+ ['result'] = 'https://t.me/' .. message.chat.username:lower()
+ } or redis:get('chat:' .. message.chat.id .. ':link') or mattata.export_chat_invite_link(message.chat.id)
+ if not success then
+ return mattata.send_reply(message, 'I need to be an administrator of this chat in order to retrieve the invite link.')
+ elseif type(success) ~= 'table' then
+ success = {
+ ['result'] = success
+ }
end
- return mattata.send_message(
- message.chat.id,
- '<a href="' .. success.result .. '">' .. mattata.escape_html(message.chat.title) .. '</a>',
- 'html'
- )
+ redis:set('chat:' .. message.chat.id .. ':link', success.result)
+ redis:expire('chat:' .. message.chat.id .. ':link', 86400)
+ success = string.format('<a href="%s">%s</a>', success.result, mattata.escape_html(message.chat.title))
+ return mattata.send_message(message.chat.id, success, 'html')
end
return link
\ No newline at end of file
diff --git a/plugins/administration/unbanpack.lua b/plugins/administration/unbanpack.lua
new file mode 100644
index 0000000..0f3f216
--- /dev/null
+++ b/plugins/administration/unbanpack.lua
@@ -0,0 +1,43 @@
+--[[
+ Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
+ This code is licensed under the MIT. See LICENSE for details.
+]]
+
+local unbanpack = {}
+local mattata = require('mattata')
+local redis = require('libs.redis')
+
+function unbanpack:init()
+ unbanpack.commands = mattata.commands(self.info.username):command('unbanpack'):command('ubp').table
+ unbanpack.help = '/unbanpack - Unbans the replied-to sticker\'s pack. This command can only be used by moderators and administrators of a supergroup. Alias: /ubp.'
+end
+
+
+function unbanpack:on_message(message, _, language)
+ if message.chat.type ~= 'supergroup' then
+ return mattata.send_reply(message, language.errors.supergroup)
+ elseif not mattata.is_group_admin(message.chat.id, message.from.id) then
+ return mattata.send_reply(message, language.errors.admin)
+ elseif not message.reply then
+ return mattata.send_reply(message, 'Please reply to a sticker from the sticker set you\'d like to unban.')
+ elseif not message.reply.sticker then
+ return mattata.send_reply(message, 'You must use this command in reply to a sticker!')
+ elseif not message.reply.sticker.set_name then
+ return mattata.send_reply(message, 'That sticker isn\'t from a set, it\'s just a file - I\'m afraid I can\'t unban that!')
+ end
+ local set_name = message.reply.sticker.set_name
+ if not redis:sismember('banned_sticker_packs:' .. message.chat.id, set_name) then
+ mattata.send_reply(message, 'That [sticker pack](https://t.me/addstickers/' .. set_name .. ') isn\'t currently banned in this chat! To ban it, send /banpack in reply to one of the stickers from it!', true, true)
+ end
+ redis:srem('banned_sticker_packs:' .. message.chat.id, set_name)
+ if mattata.get_setting(message.chat.id, 'log administrative actions') then
+ local log_chat = mattata.get_log_chat(message.chat.id)
+ local output = '%s <code>[%s]</code> has unbanned the sticker pack <a href="https://t.me/addstickers/%s">%s</a> in %s <code>[%s]</code>.\n#chat%s #user%s'
+ local admin = mattata.get_formatted_user(message.from.id, message.from.first_name, 'html')
+ output = string.format(output, admin, message.from.id, set_name, set_name, mattata.escape_html(message.chat.title), message.chat.id, tostring(message.chat.id):gsub('^%-100', ''), message.from.id)
+ mattata.send_message(log_chat, output, 'html')
+ end
+ return mattata.send_reply(message, 'I\'ve successfully unbanned [that sticker pack](https://t.me/addstickers/' .. set_name .. ') in this chat!', true, true)
+end
+
+return unbanpack
\ No newline at end of file
diff --git a/plugins/administration/unmute.lua b/plugins/administration/unmute.lua
index a7648fd..4f6fc07 100644
--- a/plugins/administration/unmute.lua
+++ b/plugins/administration/unmute.lua
@@ -1,97 +1,102 @@
--[[
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
]]
local unmute = {}
local mattata = require('mattata')
local redis = require('libs.redis')
function unmute:init()
unmute.commands = mattata.commands(self.info.username):command('unmute').table
unmute.help = '/unmute [user] - Unmutes a user in the current chat. This command can only be used by group admins.'
end
function unmute:on_message(message, _, language)
if message.chat.type ~= 'supergroup' then
local output = language['errors']['supergroup']
return mattata.send_reply(message, output)
end
local reason = false
local user = false
local input = mattata.input(message)
-- check the message object for any users this command
-- is intended to be executed on
if message.reply then
user = message.reply.from.id
if input then
reason = input
end
elseif input and input:match(' ') then
user, reason = input:match('^(.-) (.-)$')
elseif input then
user = input
end
if not user then
local output = 'You need to specify the user you\'d like to unmute, either by username/ID or in reply.'
local success = mattata.send_force_reply(message, output)
if success then
mattata.set_command_action(message.chat.id, success.result.message_id, '/unmute')
end
return
end
if reason and type(reason) == 'string' and reason:match('^[Ff][Oo][Rr] ') then
reason = reason:match('^[Ff][Oo][Rr] (.-)$')
end
if tonumber(user) == nil and not user:match('^%@') then
user = '@' .. user
end
local user_object = mattata.get_user(user) or mattata.get_chat(user) -- resolve the username/ID to a user object
if not user_object then
local output = language['errors']['unknown']
return mattata.send_reply(message, output)
elseif user_object.result.id == self.info.id then
return false -- we don't want to use this on ourselves
end
local bot_status = mattata.get_chat_member(message.chat.id, self.info.id)
if not bot_status then
return false
elseif not bot_status.result.can_restrict_members then
return mattata.send_reply(message, 'It appears I don\'t have the required permissions required in order to unmute that user. Please amend this and try again!')
end
user_object = user_object.result
local status = mattata.get_chat_member(message.chat.id, user_object.id)
local is_admin = mattata.is_group_admin(message.chat.id, user_object.id)
if not status then
return mattata.send_reply(message, 'I couldn\'t retrieve any information about that user!')
elseif is_admin then -- we won't try and unmute moderators and administrators.
return mattata.send_reply(message, 'I can\'t unmute that user because they\'re an admin in this chat!')
end
local default_permissions = mattata.get_chat(message.chat.id)
if not default_permissions then
return mattata.send_reply(message, 'I couldn\'t get the default permissions for this group!')
end
- default_permissions = default_permissions.result.permissions
+ default_permissions = default_permissions.result.permissions or {
+ ['can_send_messages'] = true,
+ ['can_send_media_messages'] = true,
+ ['can_send_other_messages'] = true,
+ ['can_send_web_page_previews'] = true
+ }
local success = mattata.restrict_chat_member(message.chat.id, user_object.id, os.time(), default_permissions) -- attempt to unmute the user in the group, restoring the user to the original group permissions
if not success then
return mattata.send_reply(message, 'I couldn\'t unmute that user in this group, because it appears I don\'t have permission to!')
end
reason = reason and ', for ' .. reason or ''
local admin_username = mattata.get_formatted_user(message.from.id, message.from.first_name, 'html')
local unmuted_username = mattata.get_formatted_user(user_object.id, user_object.first_name, 'html')
redis:hincrby('chat:' .. message.chat.id .. ':' .. user_object.id, 'unmutes', 1)
if mattata.get_setting(message.chat.id, 'log administrative actions') then
local log_chat = mattata.get_log_chat(message.chat.id)
local output = '%s <code>[%s]</code> has unmuted %s <code>[%s]</code> in %s <code>[%s]</code>%s.'
output = string.format(output, admin_username, message.from.id, unmuted_username, user_object.id, mattata.escape_html(message.chat.title), message.chat.id, reason)
mattata.send_message(log_chat, output, 'html')
end
if message.reply and mattata.get_setting(message.chat.id, 'delete reply on action') then
mattata.delete_message(message.chat.id, message.reply.message_id)
end
local output = '%s has unmuted %s%s.'
output = string.format(output, admin_username, unmuted_username, reason)
return mattata.send_message(message.chat.id, output, 'html')
end
return unmute
\ No newline at end of file
diff --git a/plugins/administration/warn.lua b/plugins/administration/warn.lua
index a0fad75..a1ce846 100644
--- a/plugins/administration/warn.lua
+++ b/plugins/administration/warn.lua
@@ -1,270 +1,270 @@
--[[
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
]]
local warn = {}
local mattata = require('mattata')
local redis = require('libs.redis')
function warn:init()
warn.commands = mattata.commands(self.info.username):command('warn').table
warn.help = '/warn [user] - Warns a user in the current chat. This command can only be used by moderators and administrators of a supergroup. Once a user has reached the maximum allowed number of warnings allowed in the chat, the configured action for the chat is performed on them.'
end
function warn.on_callback_query(_, callback_query, message, configuration)
if not callback_query
or not callback_query.data
or not callback_query.data:match('^%a+%:%-%d+%:%d+$')
then
return
elseif not mattata.is_group_admin(
callback_query.data:match('^%a+%:(%-%d+)%:%d+$'),
callback_query.from.id
)
then
return mattata.answer_callback_query(
callback_query.id,
configuration.errors.admin
)
elseif callback_query.data:match('^reset%:%-%d+%:%d+$')
then
local chat_id, user_id = callback_query.data:match('^reset%:(%-%d+)%:(%d+)$')
redis:hdel(
string.format(
'chat:%s:%s',
chat_id,
user_id
),
'warnings'
)
return mattata.edit_message_text(
message.chat.id,
message.message_id,
string.format(
'<pre>Warnings reset by %s%s!</pre>',
callback_query.from.username
and '@'
or '',
callback_query.from.username
or mattata.escape_html(callback_query.from.first_name)
),
'html'
)
elseif callback_query.data:match('^remove%:%-%d+%:%d+$')
then
local chat_id, user_id = callback_query.data:match('^remove%:(%-%d+)%:(%d+)$')
local amount = redis:hincrby(
string.format(
'chat:%s:%s',
chat_id,
user_id
),
'warnings',
-1
)
if tonumber(amount) < 0
then
redis:hincrby(
string.format(
'chat:%s:%s',
chat_id,
user_id
),
'warnings',
1
)
return mattata.answer_callback_query(
callback_query.id,
'This user hasn\'t got any warnings to be removed!'
)
end
return mattata.edit_message_text(
message.chat.id,
message.message_id,
string.format(
'<pre>Warning removed by %s%s! [%s/%s]</pre>',
callback_query.from.username
and '@'
or '',
callback_query.from.username
or mattata.escape_html(callback_query.from.first_name),
redis:hget(
string.format(
'chat:%s:%s',
chat_id,
user_id
),
'warnings'
),
redis:hget(
string.format(
'chat:%s:settings',
chat_id
),
'max warnings'
)
or 3
),
'html'
)
end
end
function warn:on_message(message, _, language)
if message.chat.type ~= 'supergroup'
then
return mattata.send_reply(
message,
language['errors']['supergroup']
)
elseif not mattata.is_group_admin(
message.chat.id,
message.from.id
)
then
return mattata.send_reply(
message,
language['errors']['admin']
)
end
local reason = false
local input = message.reply
and tostring(message.reply.from.id)
or mattata.input(message)
if not input
then
return mattata.send_reply(
message,
warn.help
)
elseif not message.reply
and input:match('^%@?%w+ ')
then
input, reason = input:match('^(%@?%w+) (.-)$')
elseif mattata.input(message.text)
then
reason = mattata.input(message.text)
end
if tonumber(input) == nil
and not input:match('^%@')
then
input = '@' .. input
end
local user = mattata.get_user(input)
or mattata.get_chat(input) -- Resolve the username/ID to a user object.
if not user
then
return mattata.send_reply(
message,
language['errors']['unknown']
)
elseif user.result.id == self.info.id
then
return
end
user = user.result
local status = mattata.get_chat_member(
message.chat.id,
user.id
)
if not status
then
return mattata.send_reply(
message,
language['errors']['generic']
)
elseif mattata.is_group_admin(
message.chat.id,
user.id
) or status.result.status == 'creator'
or status.result.status == 'administrator'
then -- We won't try and warn moderators and administrators.
return mattata.send_reply(
message,
'I cannot warn this user because they are a moderator or an administrator in this chat.'
)
elseif status.result.status == 'left'
or status.result.status == 'kicked'
then -- Check if the user is in the group or not.
return mattata.send_reply(
message,
string.format(
'I cannot warn this user because they have already %s this chat.',
(
status.result.status == 'left'
and 'left'
)
or 'been kicked from'
)
)
end
local amount = redis:hincrby(
string.format(
'chat:%s:%s',
message.chat.id,
user.id
),
'warnings',
1
)
local maximum = redis:hget(
string.format(
'chat:%s:settings',
message.chat.id
),
'max warnings'
)
or 3
if tonumber(amount) >= tonumber(maximum)
then
local success = mattata.ban_chat_member(
message.chat.id,
user.id
)
if not success
then -- Since we've ruled everything else out, it's safe to say if it wasn't a
-- success then the bot isn't an administrator in the group.
return mattata.send_reply(
message,
'I need to have administrative permissions in order to ban this user. Please amend this issue, and try again.'
)
end
end
mattata.increase_administrative_action(message.chat.id, user.id, 'warns')
- reason = reason and ', for ' .. reason or ''
+ reason = reason and ', for ' .. reason:gsub('^for ', '') or ''
local admin_username = mattata.get_formatted_user(message.from.id, message.from.first_name, 'html')
local warned_username = mattata.get_formatted_user(user.id, user.first_name, 'html')
if mattata.get_setting(message.chat.id, 'log administrative actions') then
local log_chat = mattata.get_log_chat(message.chat.id)
local output = '%s <code>[%s]</code> has warned %s <code>[%s]</code> in %s <code>[%s]</code>%s.\n%s %s'
output = string.format(output, admin_username, message.from.id, warned_username, user.id, mattata.escape_html(message.chat.title), message.chat.id, reason, '#chat' .. tostring(message.chat.id):gsub('^-100', ''), '#user' .. user.id)
mattata.send_message(log_chat, output, 'html')
end
if message.reply and mattata.get_setting(message.chat.id, 'delete reply on action') then
mattata.delete_message(message.chat.id, message.reply.message_id)
mattata.delete_message(message.chat.id, message.message_id)
end
local output = '%s has warned %s%s.'
output = string.format(output, admin_username, warned_username, reason)
local keyboard = mattata.inline_keyboard():row(
mattata.row():callback_data_button(
'Reset Warnings',
string.format(
'warn:reset:%s:%s',
message.chat.id,
user.id
)
):callback_data_button(
'Remove 1 Warning',
string.format(
'warn:remove:%s:%s',
message.chat.id,
user.id
)
)
)
return mattata.send_message(message.chat.id, output, 'html', true, false, nil, keyboard)
end
return warn
\ No newline at end of file
diff --git a/plugins/aesthetic.lua b/plugins/aesthetic.lua
new file mode 100644
index 0000000..2382939
--- /dev/null
+++ b/plugins/aesthetic.lua
@@ -0,0 +1,24 @@
+--[[
+ Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
+ This code is licensed under the MIT. See LICENSE for details.
+]]
+
+local aesthetic = {}
+local mattata = require('mattata')
+local copypasta = require('plugins.copypasta')
+
+function aesthetic:init()
+ aesthetic.commands = mattata.commands(self.info.username):command('aesthetic'):command('fullwidth'):command('fw').table
+ aesthetic.help = '/aesthetic [text] - Aestheticises the given/replied-to text! Aliases: /fullwidth, /fw.'
+end
+
+function aesthetic.on_message(_, message)
+ local input = message.reply and message.reply.text or mattata.input(message.text)
+ if not input then
+ return mattata.send_reply(message, aesthetic.help)
+ end
+ local output = copypasta.aestheticise(input)
+ return mattata.send_message(message.chat.id, output)
+end
+
+return aesthetic
\ No newline at end of file
diff --git a/plugins/afk.lua b/plugins/afk.lua
index 26bd6d4..e701f71 100644
--- a/plugins/afk.lua
+++ b/plugins/afk.lua
@@ -1,49 +1,49 @@
--[[
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
]]
local afk = {}
local mattata = require('mattata')
local redis = require('libs.redis')
function afk:init()
- afk.commands = mattata.commands(self.info.username):command('afk').table
+ afk.commands = mattata.commands(self.info.username):command('[Aa][Ff][Kk]').table
afk.help = '/afk [note] - Mark yourself as away from keyboard, with an optional note that will be displayed to users who mention you whilst you\'re away. You must have an @username for this feature to work.'
end
function afk.on_message(_, message, _, language)
if not message.from.username then
return mattata.send_reply(message, language['afk']['1']) -- Since this feature relies on detecting username
-- mentions, this feature is currently only available to users who have a public @username.
elseif redis:hget('afk:' .. message.from.id, 'since') then -- Check if the user is
-- already marked as AFK.
local since = redis:hget('afk:' .. message.from.id, 'since')
-- Un-mark the user as AFK in the database.
redis:hdel('afk:' .. message.from.id, 'since')
redis:hdel('afk:' .. message.from.id, 'note')
local keys = redis:keys('afk:' .. message.from.id .. ':replied:*')
if #keys > 0 then
for _, key in pairs(keys) do
redis:del(key)
end
end
local time = mattata.format_time(os.time() - tonumber(since))
local output = string.format(language['afk']['2'], message.from.first_name, time)
output = output:gsub('AFK', '/AFK') -- temporary solution until i update language strings
mattata.delete_message(message.chat.id, message.message_id) -- attempt to delete their message to reduce chat clutter
return mattata.send_message(message.chat.id, output) -- Inform the chat of the user's return, and include the
-- time they spent marked as AFK.
end
local input = mattata.input(message.text) and '\n' .. language['afk']['3'] .. ': ' .. mattata.input(message.text) or ''
redis:hset('afk:' .. message.from.id, 'since', os.time())
redis:hset('afk:' .. message.from.id, 'note', input)
local output = string.format(language['afk']['4'], message.from.first_name, input)
local success = mattata.send_message(message.chat.id, output)
if success then -- if the afk message sent, we'll attempt to delete their original message to clear up the chat a bit
return mattata.delete_message(message.chat.id, message.message_id)
end
return false
end
return afk
\ No newline at end of file
diff --git a/plugins/answer.lua b/plugins/answer.lua
new file mode 100644
index 0000000..2d8acb5
--- /dev/null
+++ b/plugins/answer.lua
@@ -0,0 +1,57 @@
+--[[
+ Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
+ This code is licensed under the MIT. See LICENSE for details.
+]]
+
+local answer = {}
+local mattata = require('mattata')
+local https = require('ssl.https')
+local url = require('socket.url')
+local json = require('dkjson')
+local redis = require('libs.redis')
+
+function answer:init()
+ answer.commands = mattata.commands(self.info.username):command('answer').table
+ answer.help = '/answer <query> - Provides a quick answer to the given query. Results provided by DuckDuckGo.'
+ answer.url = 'https://api.duckduckgo.com/?format=json&pretty=0&q='
+end
+
+function answer:on_message(message, _, language)
+ local input = mattata.input(message.text)
+ if not input then
+ return false
+ elseif input:match('%d* ?[%+*%-/]') then
+ message.text = '/calc ' .. input
+ return mattata.on_message(self, message)
+ end
+ input = input:gsub('[%?!,]', '')
+ local jstr, res = https.request(answer.url .. url.escape(input))
+ if res ~= 200 then
+ return mattata.send_reply(message, language.errors.connection)
+ end
+ local jdat = json.decode(jstr)
+ if not jdat.meta and jdat.Heading == '' and not jdat.RelatedTopics[1] then
+ redis:hset('ai:' .. message.chat.id .. ':' .. message.message_id, 'text', input)
+ redis:hset('ai:' .. message.chat.id .. ':' .. message.message_id, 'language', language)
+ return true
+ end
+ local output = '<b>%s</b>\n<em>%s</em>\n%s'
+ local heading = jdat.Heading
+ local body = jdat.AbstractText ~= '' and jdat.AbstractText or jdat.RelatedTopics[1].Text or 'Couldn\'t find a description, try sending /wiki ' .. jdat.Heading
+ local via = jdat.AbstractSource ~= '' and jdat.AbstractSource or jdat.RelatedTopics[1].FirstURL
+ local image = jdat.Image ~= '' and jdat.Image or jdat.RelatedTopics[1] and jdat.RelatedTopics[1].Icon.URL
+ if via:lower() == 'wikipedia' then
+ via = '<a href="https://en.wikipedia.org">Wikipedia</a>'
+ end
+ via = 'Via ' .. via .. '.'
+ if body:find(' /wiki ') then -- If we're re-directing them to the Wikipedia command, we don't want to give them a via message.
+ return mattata.send_reply(message, 'I couldn\'t find an answer for that, try /wiki ' .. heading .. '.')
+ end
+ output = string.format(output, mattata.escape_html(heading), mattata.escape_html(body), via)
+ if image and image ~= '' then
+ return mattata.send_photo(message.chat.id, image, output, 'html', false, message.message_id)
+ end
+ return mattata.send_reply(message, output, 'html', true)
+end
+
+return answer
\ No newline at end of file
diff --git a/plugins/copypasta.lua b/plugins/copypasta.lua
index f283e18..7ce76ea 100644
--- a/plugins/copypasta.lua
+++ b/plugins/copypasta.lua
@@ -1,81 +1,102 @@
--[[
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
]]
local copypasta = {}
local mattata = require('mattata')
function copypasta:init(configuration)
copypasta.commands = mattata.commands(self.info.username):command('copypasta'):command(utf8.char(128514)).table
copypasta.help = '/copypasta - Riddles the replied-to message with cancerous emoji. Alias: /' .. utf8.char(128514) .. '.'
copypasta.limit = configuration.limits.copypasta
end
+function copypasta.aestheticise(input)
+ if not input then
+ return false
+ end
+ local output = {}
+ for char in input:gmatch('.') do
+ local success, point = pcall(function()
+ return utf8.codepoint(char)
+ end)
+ if success and (point >= 33 and point <= 126) then
+ table.insert(output, utf8.char(point + 65248))
+ else
+ table.insert(output, char)
+ end
+ end
+ output = table.concat(output)
+ return output
+end
+
function copypasta.format_message(input)
local emoji = {
128514, -- crying with laughter
- 128514, -- crying with laughter
+ 128514,
+ 128514,
128076, -- ok hand
+ 128076,
+ 128166, -- water drops
+ 128166,
+ 128064, -- eyes
+ 128064,
9996, -- peace sign hand
128158, -- rotating hearts
128077, -- thumbs up
- 128076, -- ok hand
128175, -- 100//
127926, -- music symbol
- 128064, -- eyes
- 128514, -- crying with laughter
128083, -- glasses
128079, -- clapping hands
128080, -- open hands
127829, -- pizza slice
128165, -- explosion
127860, -- knife and fork
- 128166, -- water drops
- 128166, -- water drops
127825, -- peach
127814, -- aubergine
128553, -- moaning face
128527, -- smirking face
128073, -- finger pointing to right
- 128064, -- eyes
128069, -- tongue
128553 -- moaning face
}
local output = {}
for i = 1, input:len() do
local char = input:sub(i, i)
math.random(os.time())
if char == ' ' then
- local rndtotal = math.random(#emoji)
- local rndemoji = utf8.char(emoji[rndtotal])
+ local rnd_total = math.random(#emoji)
+ local rnd_emoji = utf8.char(emoji[rnd_total])
if math.random(2) == 2
then
- rndtotal = math.random(#emoji)
- rndemoji = rndemoji .. ' ' .. utf8.char(emoji[rndtotal])
+ rnd_total = math.random(#emoji)
+ rnd_emoji = rnd_emoji .. ' ' .. utf8.char(emoji[rnd_total])
end
- char = char .. rndemoji .. char
+ char = char .. rnd_emoji .. char
elseif math.random(5) == 5 then
char = char:lower()
end
table.insert(output, char)
end
- return table.concat(output)
+ output = table.concat(output)
+ output = copypasta.aestheticise(output)
+ return output
end
function copypasta.on_message(_, message, _, language)
if not message.reply then
return mattata.send_reply(message, copypasta.help)
end
local output
mattata.send_chat_action(message.chat.id)
if message.reply.text:len() > copypasta.limit then
output = string.format(language['copypasta']['1'], copypasta.limit)
return mattata.send_reply(message, output)
end
output = copypasta.format_message(message.reply.text:upper())
message.message_id = message.reply.message_id
return mattata.send_reply(message, output)
end
return copypasta
\ No newline at end of file
diff --git a/plugins/delsticker.lua b/plugins/delsticker.lua
new file mode 100644
index 0000000..65bb867
--- /dev/null
+++ b/plugins/delsticker.lua
@@ -0,0 +1,28 @@
+--[[
+ Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
+ This code is licensed under the MIT. See LICENSE for details.
+]]
+
+local delsticker = {}
+local mattata = require('mattata')
+
+function delsticker:init()
+ delsticker.commands = mattata.commands(self.info.username):command('delsticker').table
+ delsticker.help = '/delsticker - Deletes the replied-to sticker from your sticker pack.'
+end
+
+function delsticker.on_message(_, message)
+ if not message.reply or not message.reply.sticker then
+ return mattata.send_reply(message, 'You must use this command in reply to a sticker!')
+ elseif message.reply.sticker.is_animated then
+ return mattata.send_reply(message, 'I\'m afraid animated stickers aren\'t supported at the moment.')
+ end
+ local success, res = mattata.delete_sticker_from_set(message.reply.file_id)
+ if not success then
+ local description = res.description:match('STICKERSET_NOT_MODIFIED') and 'It appears that sticker has already been deleted from your pack!' or 'I don\'t have permission to delete that sticker, are you sure it\'s from your pack?'
+ return mattata.send_reply(message, 'An error occurred. ' .. description)
+ end
+ return mattata.send_reply(message, 'I\'ve successfully removed that sticker from your pack!')
+end
+
+return delsticker
\ No newline at end of file
diff --git a/plugins/flip.lua b/plugins/flip.lua
new file mode 100644
index 0000000..99d133d
--- /dev/null
+++ b/plugins/flip.lua
@@ -0,0 +1,44 @@
+--[[
+ Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
+ This code is licensed under the MIT. See LICENSE for details.
+]]
+
+local flip = {}
+local mattata = require('mattata')
+
+function flip:init()
+ flip.commands = mattata.commands(self.info.username):command('flip'):command('reverse').table
+ flip.help = '/flip [text] - Repeats the replied-to/given string of text, in reverse. Alias: /reverse.'
+end
+
+function flip.on_message(_, message)
+ local input = message.reply and message.reply.text or mattata.input(message.text)
+ if not input then
+ return mattata.send_reply(message, flip.help)
+ end
+ local chars = {}
+ local ignore = {
+ ['('] = ')',
+ [')'] = '(',
+ ['{'] = '}',
+ ['}'] = '{',
+ ['['] = ']',
+ [']'] = '[',
+ ['>'] = '<',
+ ['<'] = '>',
+ ['/'] = '\\',
+ ['\\'] = '/'
+ }
+ for char in input:gmatch('.') do
+ char = ignore[char] or char
+ table.insert(chars, 1, char)
+ end
+ local output = table.concat(chars)
+ local success = mattata.send_message(message.chat.id, output)
+ if not success then
+ return mattata.send_reply(message, 'I can\'t flip messages with special UTF-8 codepoints in (i.e. Emoji).')
+ end
+ return success
+end
+
+return flip
\ No newline at end of file
diff --git a/plugins/imdb.lua b/plugins/imdb.lua
deleted file mode 100644
index fb3ecc7..0000000
--- a/plugins/imdb.lua
+++ /dev/null
@@ -1,163 +0,0 @@
---[[
- Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
- This code is licensed under the MIT. See LICENSE for details.
-]]
-
-local imdb = {}
-local mattata = require('mattata')
-local http = require('socket.http')
-local url = require('socket.url')
-local json = require('dkjson')
-
-function imdb:init()
- imdb.commands = mattata.commands(self.info.username):command('imdb').table
- imdb.help = '/imdb <query> - Searches IMDb for the given search query and returns the most relevant result(s).'
-end
-
-function imdb.get_result_count(input)
- local jstr, res = http.request('http://www.omdbapi.com/?s=' .. url.escape(input) .. '&page=1')
- if res ~= 200
- then
- return false
- end
- local jdat = json.decode(jstr)
- if jdat.Response ~= 'True'
- then
- return false
- end
- return #jdat.Search
-end
-
-function imdb.get_result(input, n)
- n = n or 1
- local jstr_search, res_search = http.request('http://www.omdbapi.com/?s=' .. url.escape(input) .. '&page=1')
- if res_search ~= 200
- then
- return false
- end
- local jdat_search = json.decode(jstr_search)
- if jdat_search.Response ~= 'True'
- then
- return false
- end
- local jstr, res = http.request('http://www.omdbapi.com/?i=' .. jdat_search.Search[n].imdbID .. '&r=json&tomatoes=true')
- if res ~= 200
- then
- return false
- end
- local jdat = json.decode(jstr)
- if jdat.Response ~= 'True'
- then
- return false
- end
- return '<a href="http://imdb.com/title/' .. jdat_search.Search[n].imdbID .. '">' .. mattata.escape_html(jdat.Title) .. '</a> (' .. jdat.Year .. ')\n' .. jdat.imdbRating .. '/10 | ' .. jdat.Runtime .. ' | ' .. jdat.Genre .. '\n' .. '<i>' .. mattata.escape_html(jdat.Plot) .. '</i>'
-end
-
-function imdb:on_callback_query(callback_query, message, configuration, language)
- if not message.reply
- then
- return
- elseif callback_query.data:match('^results:(.-)$')
- then
- local result = callback_query.data:match('^results:(.-)$')
- local input = mattata.input(message.reply.text)
- local total_results = imdb.get_result_count(input)
- if tonumber(result) > tonumber(total_results)
- then
- result = 1
- elseif tonumber(result) < 1
- then
- result = tonumber(total_results)
- end
- local output = imdb.get_result(
- input,
- tonumber(result)
- )
- if not output
- then
- return mattata.answer_callback_query(
- callback_query.id,
- language['errors']['generic']
- )
- end
- local previous_result = 'imdb:results:' .. math.floor(tonumber(result) - 1)
- local next_result = 'imdb:results:' .. math.floor(tonumber(result) + 1)
- return mattata.edit_message_text(
- message.chat.id,
- message.message_id,
- output,
- 'html',
- true,
- mattata.inline_keyboard():row(
- mattata.row()
- :callback_data_button(
- mattata.symbols.back .. ' ' .. language['imdb']['1'],
- previous_result
- )
- :callback_data_button(
- result .. '/' .. total_results,
- 'imdb:pages:' .. result .. ':' .. total_results
- )
- :callback_data_button(
- language['imdb']['2'] .. ' ' .. mattata.symbols.next,
- next_result
- )
- )
- )
- elseif callback_query.data:match('^pages:(.-):(.-)$')
- then
- local current_page, total_pages = callback_query.data:match('^pages:(.-):(.-)$')
- return mattata.answer_callback_query(
- callback_query.id,
- string.format(
- language['imdb']['3'],
- current_page,
- total_pages
- )
- )
- end
-end
-
-function imdb:on_message(message, configuration, language)
- local input = mattata.input(message.text)
- if not input
- then
- return mattata.send_reply(
- message,
- imdb.help
- )
- end
- local output = imdb.get_result(input)
- if not output
- then
- return mattata.send_reply(
- message,
- language['errors']['results']
- )
- end
- return mattata.send_message(
- message.chat.id,
- output,
- 'html',
- true,
- false,
- message.message_id,
- mattata.inline_keyboard():row(
- mattata.row()
- :callback_data_button(
- mattata.symbols.back .. ' ' .. language['imdb']['1'],
- 'imdb:results:0'
- )
- :callback_data_button(
- '1/' .. imdb.get_result_count(input),
- 'imdb:pages:1:' .. imdb.get_result_count(input)
- )
- :callback_data_button(
- language['imdb']['2'] .. ' ' .. mattata.symbols.next,
- 'imdb:results:2'
- )
- )
- )
-end
-
-return imdb
\ No newline at end of file
diff --git a/plugins/inspirobot.lua b/plugins/inspirobot.lua
new file mode 100644
index 0000000..3ee850e
--- /dev/null
+++ b/plugins/inspirobot.lua
@@ -0,0 +1,43 @@
+--[[
+ Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
+ This code is licensed under the MIT. See LICENSE for details.
+]]
+
+local inspirobot = {}
+local mattata = require('mattata')
+local https = require('ssl.https')
+local ltn12 = require('ltn12')
+
+function inspirobot:init()
+ inspirobot.commands = mattata.commands(self.info.username):command('inspirobot'):command('ib').table
+ inspirobot.help = '/inspirobot - Returns an AI-generated inspirational quote, for endless enrichment of pointless human existence. Alias: /ib.'
+end
+
+function inspirobot.on_message(_, message)
+ -- Try to mimic a normal browser's headers, don't want CF getting funny with us
+ local url = {}
+ local _, res = https.request({
+ ['url'] = 'https://inspirobot.me/api?generate=true',
+ ['method'] = 'GET',
+ ['headers'] = {
+ [':authority:'] = 'inspirobot.me',
+ [':method:'] = 'GET',
+ [':path:'] = '/api?generate=true',
+ [':scheme:'] = 'HTTPS',
+ ['dnt'] = 1,
+ ['referer'] = 'https://inspirobot.me/',
+ ['sec-fetch-dest:'] = 'empty',
+ ['sec-fetch-mode'] = 'cors',
+ ['sec-fetch-site'] = 'same-origin',
+ ['user-agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 Edg/83.0.478.58'
+ },
+ ['sink'] = ltn12.sink.table(url)
+ })
+ url = table.concat(url)
+ if res ~= 200 or not url:match('^https://generated%.inspirobot%.me/a/.-%.[jp][pn]e?g$') then
+ return mattata.send_reply(message, 'I have nothing to say today.')
+ end
+ return mattata.send_photo(message.chat.id, url)
+end
+
+return inspirobot
diff --git a/plugins/medium.lua b/plugins/medium.lua
new file mode 100644
index 0000000..9c74039
--- /dev/null
+++ b/plugins/medium.lua
@@ -0,0 +1,35 @@
+--[[
+ Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
+ This code is licensed under the MIT. See LICENSE for details.
+]]
+
+local medium = {}
+local mattata = require('mattata')
+local https = require('ssl.https')
+local url = require('socket.url')
+local json = require('dkjson')
+
+function medium:init()
+ medium.commands = mattata.commands(self.info.username):command('medium'):command('m').table
+ medium.help = '/medium <query> - Returns Medium posts matching the given search query. Alias: /m.'
+end
+
+function medium.on_message(_, message, _, language)
+ local input = mattata.input(message.text)
+ if not input then
+ return mattata.send_reply(message, medium.help)
+ end
+ local jstr, res = https.request('https://medium.com/search?q=' .. url.escape(input))
+ if res ~= 200 then
+ return mattata.send_reply(message, language.errors.connection)
+ end
+ jstr = jstr:match('<!%[CDATA%[\nwindow%["obvInit"%]%(({.-}})%)\n// %]%]>')
+ if not jstr then
+ return mattata.send_reply(message, language.errors.results)
+ end
+ local jdat = json.decode(jstr)
+ mattata.save_to_file(json.encode(jdat.posts[1], {indent=true}), '/home/matt/matticatebot/medium.json')
+ return
+end
+
+return medium
\ No newline at end of file
diff --git a/plugins/meta.lua b/plugins/meta.lua
new file mode 100644
index 0000000..4688564
--- /dev/null
+++ b/plugins/meta.lua
@@ -0,0 +1,34 @@
+--[[
+ Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
+ This code is licensed under the MIT. See LICENSE for details.
+]]
+
+local meta = {}
+local mattata = require('mattata')
+
+function meta:init()
+ meta.commands = mattata.commands(self.info.username):command('meta').table
+ meta.help = '/meta - Instructs users not to ask to ask, but just to ask.'
+end
+
+function meta.on_message(_, message)
+ local send_as_reply = false
+ local original_message = message.message_id
+ if message.reply then
+ message.message_id = message.reply.message_id
+ send_as_reply = true
+ end
+ local method = send_as_reply == true and mattata.send_reply or mattata.send_message
+ mattata.delete_message(message.chat.id, original_message)
+ local output = [[Please don't ask meta-questions, like:
+
+`"Any user of $x here?"`
+`"Anyone used technology $y?"`
+`"Hello I need help on $z"`
+
+Just ask a *direct question* about your problem, and the probability that someone will help is pretty high.
+[Read more.](http://catb.org/~esr/faqs/smart-questions.html)]]
+ return method(message, output, true)
+end
+
+return meta
\ No newline at end of file
diff --git a/plugins/movies.lua b/plugins/movies.lua
new file mode 100644
index 0000000..086a700
--- /dev/null
+++ b/plugins/movies.lua
@@ -0,0 +1,58 @@
+--[[
+ Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
+ This code is licensed under the MIT. See LICENSE for details.
+]]
+
+local movies = {}
+local mattata = require('mattata')
+local https = require('ssl.https')
+local http = require('socket.http')
+local url = require('socket.url')
+local json = require('dkjson')
+
+function movies:init(configuration)
+ movies.commands = mattata.commands(self.info.username):command('movies?'):command('imdb'):command('films?').table
+ movies.help = '/movie <query> - Searches IMDb for the given search query and returns the most relevant result(s). Aliases: /imdb, /film.'
+ movies.key = configuration.keys.movies
+ movies.url = string.format('http://www.omdbapi.com/?apikey=%s&page=1&s=', movies.key.omdb)
+end
+
+function movies.on_message(_, message, _, language)
+ local input = mattata.input(message.text)
+ if not input then
+ return mattata.send_reply(message, movies.help)
+ end
+ local jstr_search, res_search = http.request(movies.url .. url.escape(input))
+ if res_search ~= 200 then
+ return mattata.send_reply(message, language.errors.connection)
+ end
+ local jdat_search = json.decode(jstr_search)
+ if jdat_search.Response ~= 'True' then
+ return mattata.send_reply(message, language.errors.results)
+ end
+ local jstr, res = http.request('http://www.omdbapi.com/?i=' .. jdat_search.Search[1].imdbID .. '&r=json&tomatoes=true&apikey=' .. movies.key.omdb)
+ if res ~= 200 then
+ return false
+ end
+ local jdat = json.decode(jstr)
+ if jdat.Response ~= 'True' then
+ return false
+ end
+ local poster
+ poster, res = https.request('https://www.myapifilms.com/imdb/idIMDB?idIMDB=' .. jdat.imdbID .. '&token=' .. movies.key.poster)
+ if res == 200 then
+ poster = json.decode(poster)
+ if not poster.error and poster.data.movies[1].urlPoster then
+ poster = poster.data.movies[1].urlPoster:gsub('(U%a%d*)(_%a%a%d,%d,%d*)(,%d*)', '%10%20%30')
+ end
+ else -- We'll set it to a placeholder image I've already got stored on Telegram's servers, we can always update this.
+ poster = 'AgACAgQAAx0CVClmWQACHGNe-VQxIvsfNMOn5jJceOVhfc4llQACpLAxG0qiyFNNvPCVaco5ZKoWdiNdAAMBAAMCAAN5AAOqagEAARoE'
+ end
+ local output = string.format('<a href="https://imdb.com/title/%s">%s</a> (%s)\n%s/10 | %s | %s\n\n<em>%s</em>', jdat_search.Search[1].imdbID, mattata.escape_html(jdat.Title), jdat.Year, jdat.imdbRating, jdat.Runtime, jdat.Genre, mattata.escape_html(jdat.Plot))
+ if not poster or not output then
+ return mattata.send_reply(message, language.errors.results)
+ end
+ return mattata.send_photo(message.chat.id, poster, output, 'html', false)
+end
+
+return movies
\ No newline at end of file
diff --git a/plugins/plugins.lua b/plugins/plugins.lua
index 1d01e5f..d733098 100644
--- a/plugins/plugins.lua
+++ b/plugins/plugins.lua
@@ -1,318 +1,316 @@
--[[
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
]]
local plugins = {}
local mattata = require('mattata')
local json = require('dkjson')
local redis = require('libs.redis')
local configuration = require('configuration')
function plugins:init()
plugins.commands = mattata.commands(self.info.username):command('plugins').table
plugins.help = '/plugins - Toggle the plugins you want to use in your chat with a slick inline keyboard, paginated and neatly formatted.'
end
function plugins:refresh(chat_id)
local new = redis:smembers('disabled_plugins:' .. chat_id)
if #new == 0 then
new = nil
end
if not self.chats[tostring(chat_id)] then
self.chats[tostring(chat_id)] = {}
end
self.chats[tostring(chat_id)].disabled_plugins = new
end
function plugins.get_toggleable_plugins()
local toggleable = {}
for _, v in pairs(configuration.plugins) do
- if not mattata.table_contains(configuration.administrative_plugins, v) then
- if v ~= 'plugins' and v ~= 'about' and v ~= 'bash' and v ~= 'lua' and v ~= 'reboot' and v ~= 'administration' then
- v = v:gsub('_', ' ')
- table.insert(toggleable, v)
- end
+ if v ~= 'plugins' and v ~= 'about' and v ~= 'bash' and v ~= 'lua' and v ~= 'reboot' and v ~= 'administration' then
+ v = v:gsub('_', ' ')
+ table.insert(toggleable, v)
end
end
table.sort(toggleable)
return toggleable
end
function plugins:get_keyboard(chat, page, columns, per_page)
page = page or 1
local toggleable = plugins.get_toggleable_plugins()
local page_count = math.floor(#toggleable / per_page)
if page_count < #toggleable / per_page then
page_count = page_count + 1
end
if page < 1 then
page = page_count
elseif page > page_count then
page = 1
end
local start_res = (page * per_page) - (per_page - 1)
local end_res = start_res + (per_page - 1)
if end_res > #toggleable then
end_res = #toggleable
end
local plugin = 0
local output = {}
for _, v in pairs(toggleable) do
v = v:lower()
plugin = plugin + 1
if plugin >= start_res and plugin <= end_res then
local status
if not redis:sismember('disabled_plugins:' .. chat, v) then
status = utf8.char(9989)
else
status = utf8.char(10060)
end
table.insert(output, {
['plugin'] = v,
['status'] = status
})
end
end
local keyboard = {
['inline_keyboard'] = {
{}
}
}
local rows_per_page = math.floor(#output / columns)
if rows_per_page < (#output / columns) then
rows_per_page = rows_per_page + 1
end
local columns_per_page = math.floor(#output / rows_per_page)
if columns_per_page < (#output / rows_per_page) then
columns_per_page = columns_per_page + 1
end
local current_row = 1
local count = 0
for n in pairs(output) do
count = count + 1
if count == (columns_per_page * current_row) + 1 then
current_row = current_row + 1
table.insert(
keyboard.inline_keyboard,
{}
)
end
table.insert(
keyboard.inline_keyboard[current_row],
{
['text'] = output[n].plugin:gsub('^%l', string.upper),
['callback_data'] = string.format(
'plugins:%s:%s:%s',
chat,
output[n].plugin,
page
)
}
)
table.insert(
keyboard.inline_keyboard[current_row],
{
['text'] = output[n].status,
['callback_data'] = string.format(
'plugins:%s:%s:%s',
chat,
output[n].plugin,
page
)
}
)
end
table.insert(
keyboard.inline_keyboard,
{
{
['text'] = utf8.char(8592) .. ' Previous',
['callback_data'] = string.format(
'plugins:%s:page:%s',
chat,
page - 1
)
},
{
['text'] = string.format(
'%s/%s',
page,
page_count
),
['callback_data'] = 'plugins:nil'
},
{
['text'] = 'Next ' .. utf8.char(8594),
['callback_data'] = string.format(
'plugins:%s:page:%s',
chat,
page + 1
)
}
}
)
table.insert(
keyboard.inline_keyboard,
{
{
['text'] = 'Disable All',
['callback_data'] = string.format(
'plugins:%s:disable_all:%s',
chat,
page
)
},
{
['text'] = 'Enable All',
['callback_data'] = string.format(
'plugins:%s:enable_all:%s',
chat,
page
)
}
}
)
table.insert(
keyboard.inline_keyboard,
{
{
['text'] = 'Back',
['callback_data'] = 'help:settings'
}
}
)
return keyboard
end
function plugins:on_callback_query(callback_query, message, configuration)
if not callback_query.data:match('^.-:.-:.-$') then
return
end
local chat, callback_type, page = callback_query.data:match('^(.-):(.-):(.-)$')
if (
mattata.get_chat(chat) and mattata.get_chat(chat).result.type ~= 'private'
) and not mattata.is_group_admin(
chat,
callback_query.from.id
) then
return mattata.answer_callback_query(
callback_query.id,
'You must be an administrator to use this!'
)
end
local toggle_status
if callback_type ~= 'page' then
local toggleable = plugins.get_toggleable_plugins()
if callback_type == 'enable_all' then
for _, v in pairs(toggleable) do
redis:srem('disabled_plugins:' .. chat, v)
end
toggle_status = 'All plugins enabled!'
elseif callback_type == 'disable_all' then
for _, v in pairs(toggleable) do
redis:sadd('disabled_plugins:' .. chat, v)
end
toggle_status = 'All plugins disabled!'
elseif callback_type == 'enable_via_message' or callback_type == 'enable' then
redis:srem('disabled_plugins:' .. chat, page)
return mattata.answer_callback_query(
callback_query.id,
page:gsub('^%l', string.upper) .. ' has been enabled!'
)
elseif callback_type == 'dismiss_disabled_message' then
redis:set(
string.format(
'chat:%s:dismiss_disabled_message:%s',
chat,
page
),
true
)
return mattata.answer_callback_query(
callback_query.id,
'You will no longer be notified about this plugin!'
)
else
if redis:sismember('disabled_plugins:' .. chat, callback_type) then
redis:srem('disabled_plugins:' .. chat, callback_type)
toggle_status = callback_type:gsub('^%l', string.upper) .. ' enabled!'
else
redis:sadd('disabled_plugins:' .. chat, callback_type)
toggle_status = callback_type:gsub('^%l', string.upper) .. ' disabled!'
end
end
end
local keyboard = plugins.get_keyboard(self, chat, tonumber(page), configuration.limits.plugins.columns, configuration.limits.plugins.per_page)
mattata.edit_message_reply_markup(message.chat.id, message.message_id, nil, keyboard)
plugins.refresh(self, chat)
return mattata.answer_callback_query(callback_query.id, toggle_status)
end
function plugins:on_message(message, configuration)
if message.chat.type ~= 'private' and not mattata.is_group_admin(
message.chat.id,
message.from.id
) then
return mattata.send_reply(
message,
'You must be an administrator to use this!'
)
elseif message.chat.type == 'private' then
local input = mattata.input(message.text)
if input then
if tonumber(input) == nil and not input:match('^%@') then
input = '@' .. input
end
local resolved = mattata.get_chat(input)
if resolved and mattata.is_group_admin(
resolved.result.id,
message.from.id
) then
message.chat = resolved.result
elseif not resolved then
return mattata.send_reply(
message,
'That\'s not a valid chat!'
)
else
return mattata.send_reply(
message,
'You don\'t appear to be an administrator in that chat!'
)
end
end
end
local keyboard = plugins.get_keyboard(self, message.chat.id, 1, configuration.limits.plugins.columns, configuration.limits.plugins.per_page)
local success = mattata.send_message(
message.from.id,
string.format(
'Toggle the plugins for <b>%s</b> using the keyboard below:',
message.chat.title and mattata.escape_html(message.chat.title) or mattata.escape_html(message.chat.first_name)
),
'html',
true,
false,
nil,
json.encode(keyboard)
)
if message.chat.type == 'private' then
return
elseif not success then
return mattata.send_reply(
message,
string.format(
'I couldn\'t send you the plugin management menu, you need to send me a [private message](https://t.me/%s?start=plugins%%20' .. message.chat.id .. ') first, then try using /plugins again.',
self.info.username:lower()
),
'markdown',
true
)
end
return mattata.send_reply(
message,
'I have sent you the plugin management menu via private chat.'
)
end
return plugins
\ No newline at end of file
diff --git a/plugins/reboot.lua b/plugins/reboot.lua
index 069a97e..54b2eed 100644
--- a/plugins/reboot.lua
+++ b/plugins/reboot.lua
@@ -1,38 +1,55 @@
--[[
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
]]
local reboot = {}
local mattata = require('mattata')
local redis = require('libs.redis')
function reboot:init()
reboot.commands = mattata.commands(self.info.username):command('reboot'):command('shutdown'):command('reload').table
end
+function reboot:on_new_message(message)
+ if not mattata.is_global_admin(message.from.id) then
+ return false
+ elseif not message.text then
+ return false
+ elseif message.text:match('^.- && .-$') then
+ local first, second = message.text:match('^(.-) && (.-)$')
+ if not first:match('^[/!#]') then
+ message.text = first
+ mattata.on_message(self, message)
+ end
+ message.text = second
+ return mattata.on_message(self, message)
+ end
+ return
+end
+
function reboot:on_message(message)
if not mattata.is_global_admin(message.from.id) or message.date < (os.time() - 2) then
return false
end
if message.text:match('^[/!#]reload') then
local success = mattata.send_message(message.chat.id, 'Reloading...')
for pkg, _ in pairs(package.loaded) do -- Disable all of mattata's plugins and languages.
if pkg:match('^plugins%.') or pkg:match('^languages%.') then
package.loaded[pkg] = nil
end
end
package.loaded['libs.utils'] = nil
package.loaded['configuration'] = nil
mattata.is_reloading = true
mattata.init(self)
return mattata.edit_message_text(message.chat.id, success.result.message_id, 'Successfully reloaded')
end
package.loaded['mattata'] = require('mattata')
mattata.is_running = false
local success = mattata.send_message(message.chat.id, 'Shutting down...')
redis:set('mattata:shutdown', tostring(message.chat.id) .. ':' .. tostring(success.result.message_id))
return success
end
return reboot
\ No newline at end of file
diff --git a/plugins/remind.lua b/plugins/remind.lua
index e1824a7..9adb7f9 100644
--- a/plugins/remind.lua
+++ b/plugins/remind.lua
@@ -1,197 +1,193 @@
--[[
Based on a plugin by topkecleon. Licensed under GNU AGPLv3
https://github.com/topkecleon/otouto/blob/master/LICENSE.
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
]]
local remind = {}
local mattata = require('mattata')
local json = require('dkjson')
local redis = require('libs.redis')
function remind:init()
- remind.commands = mattata.commands(self.info.username)
- :command('remind')
- :command('reminders').table
+ remind.commands = mattata.commands(self.info.username):command('remind'):command('reminders').table
remind.help = '/remind <duration> <message> - Repeats a message after a duration of time, in the format 2d3h. The maximum number of reminders at one time is 4 per chat, and each reminder must be between 1 hour and 182 days in duration. Reminders cannot be any more than 256 characters in length. Use /reminders to view your current reminders. An example use of this command would be: /remind 21d3h test, which would remind you in 21 days and 3 hours.'
end
function remind.get_reminders(message)
local reminders = {}
if redis:get('reminders') then
reminders = json.decode(
redis:get('reminders')
)
end
local this_chat = {}
local count = 0
- for k, v in pairs(reminders) do
+ for _, v in pairs(reminders) do
if v.chat and v.chat.id == message.chat.id then
- local real_expiry = tonumber(v.expires) / 3600
table.insert(
this_chat,
string.format(
utf8.char(8226) .. ' %s <code>[Added by %s, expires in approx. %s hour%s]</code>',
mattata.escape_html(v.reminder),
mattata.escape_html(v.name),
mattata.round(
(
tonumber(v.expires) - os.time()
) / 3600,
2
),
mattata.round(
(
tonumber(v.expires) - os.time()
) / 3600,
2
) == 1 and '' or 's'
)
)
count = count + 1
end
end
if count == 0 then
return mattata.send_reply(
message,
'You don\'t have any reminders set up in this chat!'
)
end
return mattata.send_reply(
message,
string.format(
'You currently have %s reminder%s set up for %s:\n%s',
count,
count == 1 and '' or 's',
mattata.escape_html(message.chat.title),
table.concat(
this_chat,
'\n'
)
),
'html'
)
end
-function remind:on_message(message)
+function remind.on_message(_, message)
if message.text:match('^[%/%!%$%^%?%&%%]reminders') then
return remind.get_reminders(message)
end
local input = mattata.input(message.text)
if not input or not input:match('^.- .-$') then
return mattata.send_reply(
message,
remind.help
)
end
local duration, reminder = input:match('^(.-) (.-)$')
-- Convert each unit of time into seconds.
local weeks = 0
if duration:match('%d[Ww]') then
weeks = tonumber(
duration:match('(%d*)[Ww]')
) * 604800
end
local days = 0
if duration:match('%d[Dd]') then
days = tonumber(
duration:match('(%d*)[Dd]')
) * 86400
end
local hours = 0
if duration:match('%d[Hh]') then
hours = tonumber(
duration:match('(%d*)[Hh]')
) * 3600
end
- duration = days + hours
+ duration = weeks + days + hours
if duration <= 0 then
return mattata.send_reply(
message,
'The duration you specified isn\'t in a valid format. The duration of your reminder must be between 1 hour and 6 months, and in the format 5m1w12d3h, which would remind you in 5 months, 1 week, 12 days and 3 hours.'
)
- elseif duration > 15724800 or duration < 1 then
+ elseif duration > 31620000 or duration < 1 then
return mattata.send_reply(
message,
- 'The duration of your reminder must be between 1 hour and 182 days.'
+ 'The duration of your reminder must be between 1 hour and 366 days.'
)
end
if utf8.len(reminder) > 256 then
return mattata.send_reply(
message,
'Your reminder must not be any longer than 256 characters.'
)
end
local reminders = {}
if redis:get('reminders') then
reminders = json.decode(
redis:get('reminders')
)
end
local count = 0
for k, v in pairs(reminders) do
if v.chat and v.chat.id == message.chat.id then
count = count + 1
end
end
if count >= 4 then
return mattata.send_reply(
message,
'You already have 4 reminders set up in this chat. Please wait for one to expire before you add any more!'
)
end
table.insert(
reminders,
{
['reminder'] = reminder,
['expires'] = os.time() + duration,
['chat'] = {
['id'] = message.chat.id,
['title'] = message.chat.title
},
['name'] = message.from.name or message.chat.title
}
)
redis:set(
'reminders',
json.encode(reminders)
)
duration = duration / 3600 -- Convert back to hours.
return mattata.send_reply(
message,
string.format(
'I will remind you in %s hour%s!',
mattata.round(duration),
tonumber(duration) == 1 and '' or 's'
)
)
end
function remind:cron()
local current_time = os.time()
local reminders = redis:get('reminders')
- if not reminders then
- return
- end
+ if not reminders then return false end
reminders = json.decode(reminders)
+ if not next(reminders) then return false end
for k, v in pairs(reminders) do
if current_time > v.expires then
mattata.send_message(
v.chat.id,
'Reminder: ' .. v.reminder
)
table.remove(
reminders,
k
)
end
end
redis:set(
'reminders',
json.encode(reminders)
)
return
end
return remind
\ No newline at end of file
diff --git a/plugins/runescape.lua b/plugins/runescape.lua
index a7a35b4..e797fb8 100644
--- a/plugins/runescape.lua
+++ b/plugins/runescape.lua
@@ -1,259 +1,200 @@
--[[
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
]]
local runescape = {}
local mattata = require('mattata')
local https = require('ssl.https')
local url = require('socket.url')
local json = require('dkjson')
function runescape:init()
runescape.commands = mattata.commands(self.info.username):command('runescape').table
runescape.help = '/runescape <player name> - Displays skill-related information about the given RuneScape player.'
end
function runescape.errors(error_message, language)
local errors = {
['NO_PROFILE'] = 'This player does not have a RuneMetrics profile!',
['PROFILE_PRIVATE'] = 'This player appears to have privacy mode enabled on their RuneMetrics profile!',
['Unable to fetch profile'] = 'This player appears to have privacy mode enabled on their RuneMetrics profile!'
}
return errors[error_message]
or language['errors']['generic']
end
function runescape.get_skill_info(jdat)
local skills = {
['0'] = 'Attack',
['1'] = 'Defence',
['2'] = 'Strength',
['3'] = 'Constitution',
['4'] = 'Ranged',
['5'] = 'Prayer',
['6'] = 'Magic',
['7'] = 'Cooking',
['8'] = 'Woodcutting',
['9'] = 'Fletching',
['10'] = 'Fishing',
['11'] = 'Firemaking',
['12'] = 'Crafting',
['13'] = 'Smithing',
['14'] = 'Mining',
['15'] = 'Herblore',
['16'] = 'Agility',
['17'] = 'Thieving',
['18'] = 'Slayer',
['19'] = 'Farming',
['20'] = 'Runecrafting',
['21'] = 'Hunter',
['22'] = 'Construction',
['23'] = 'Summoning',
['24'] = 'Dungeoneering',
['25'] = 'Divination',
- ['26'] = 'Invention'
+ ['26'] = 'Invention',
+ ['27'] = 'Archaeology'
}
local output = {}
local longest_skill = 0
local longest_rank = 0
local longest_xp = 0
- for k, v in pairs(jdat)
- do
- v.rank = v.rank
- or 'N/A'
- if v.id
- then
- local skill = tostring(v.id)
+ local skill, rank, xp
+ for _, v in pairs(jdat) do
+ v.rank = v.rank or 'N/A'
+ if v.id then
+ skill = tostring(v.id)
skill = skills[skill]
- if skill:len() > longest_skill
- then
+ if skill:len() > longest_skill then
longest_skill = skill:len()
end
end
- if v.rank
- then
- local rank = v.rank
- if rank ~= 'N/A'
- then
+ if v.rank then
+ rank = v.rank
+ if rank ~= 'N/A' then
rank = tonumber(rank)
rank = mattata.comma_value(rank)
end
rank = tostring(rank)
- if rank:len() > longest_rank
- then
+ if rank:len() > longest_rank then
longest_rank = rank:len()
end
end
- if v.xp
- then
+ if v.xp then
v.xp = tonumber(v.xp) / 10
- local xp = mattata.comma_value(v.xp)
+ xp = mattata.comma_value(v.xp)
xp = tostring(xp)
- if xp:len() > longest_xp
- then
+ if xp:len() > longest_xp then
longest_xp = xp:len()
end
end
end
- if longest_skill < 5
- then
+ if longest_skill < 5 then
longest_skill = 5
end
- if longest_rank < 4
- then
+ if longest_rank < 4 then
longest_rank = 4
end
- if longest_xp < 2
- then
+ if longest_xp < 2 then
longest_xp = 2
end
local separator = '|-'
- for i = 1, longest_skill
- do
+ for _ = 1, longest_skill do
separator = separator .. '-'
end
separator = separator .. '-|-------|-'
- for i = 1, longest_rank
- do
+ for _ = 1, longest_rank do
separator = separator .. '-'
end
separator = separator .. '-|-'
- for i = 1, longest_xp
- do
+ for _ = 1, longest_xp do
separator = separator .. '-'
end
separator = separator .. '-|'
- table.insert(
- output,
- separator
- )
+ table.insert(output, separator)
local heading = ''
- for k, v in pairs(jdat)
- do
- v.rank = v.rank
- or 'N/A'
- if v.id
- and v.level
- and v.rank
- and v.xp
- then
+ for k, v in pairs(jdat) do
+ v.rank = v.rank or 'N/A'
+ if v.id and v.level and v.rank and v.xp then
local id = tostring(v.id)
- local skill = skills[id]
- if skill:len() < longest_skill
- then
+ skill = skills[id]
+ if skill:len() < longest_skill then
repeat
skill = skill .. ' '
until skill:len() == longest_skill
end
local level = tostring(v.level)
repeat
level = level .. ' '
until level:len() == 5
- local rank = v.rank
- if rank ~= 'N/A'
- then
+ rank = v.rank
+ if rank ~= 'N/A' then
rank = tonumber(rank)
rank = mattata.comma_value(rank)
end
rank = tostring(rank)
- if rank:len() < longest_rank
- then
+ if rank:len() < longest_rank then
repeat
rank = rank .. ' '
until rank:len() == longest_rank
end
- local xp = mattata.comma_value(v.xp)
+ xp = mattata.comma_value(v.xp)
xp = tostring(xp)
- if xp:len() < longest_xp
- then
+ if xp:len() < longest_xp then
repeat
xp = xp .. ' '
until xp:len() == longest_xp
end
local row = '| ' .. skill .. ' | ' .. level .. ' | ' .. rank .. ' | ' .. xp .. ' |'
- table.insert(
- output,
- row
- )
- if k < #jdat
- then
- table.insert(
- output,
- separator
- )
+ table.insert(output, row)
+ if k < #jdat then
+ table.insert(output, separator)
else
skill = 'Skill'
- if skill:len() < longest_skill
- then
+ if skill:len() < longest_skill then
repeat
skill = skill .. ' '
until skill:len() == longest_skill
end
level = 'Level'
rank = 'Rank'
- if rank:len() < longest_rank
- then
+ if rank:len() < longest_rank then
repeat
rank = rank .. ' '
until rank:len() == longest_rank
end
xp = 'XP'
- if xp:len() < longest_xp
- then
+ if xp:len() < longest_xp then
repeat
xp = xp .. ' '
until xp:len() == longest_xp
end
heading = '| ' .. skill .. ' | ' .. level .. ' | ' .. rank .. ' | ' .. xp .. ' |'
end
end
end
- table.insert(
- output,
- separator
- )
- return table.concat(
- output,
- '\n'
- ), heading
+ table.insert(output, separator)
+ output = table.concat(output, '\n')
+ return output, heading
end
-function runescape:on_message(message, configuration, language)
+function runescape.on_message(_, message, _, language)
local input = mattata.input(message.text)
- if not input
- then
- return mattata.send_reply(
- message,
- runescape.help
- )
+ if not input then
+ return mattata.send_reply(message, runescape.help)
end
local jstr, res = https.request('https://apps.runescape.com/runemetrics/profile/profile?user=' .. url.escape(input))
- if res ~= 200
- then
- return mattata.send_reply(
- message,
- language['errors']['connection']
- )
+ if res ~= 200 then
+ return mattata.send_reply(message, language.errors.connection)
end
local jdat = json.decode(jstr)
- if jdat.error
- or not jdat.skillvalues
- then
- return mattata.send_reply(
- message,
- runescape.errors(
- jdat.error,
- language
- )
- )
+ if jdat.error or not jdat.skillvalues then
+ local error_message = runescape.errors(jdat.error, language)
+ return mattata.send_reply(message, error_message)
end
local output, heading = runescape.get_skill_info(jdat.skillvalues)
- return mattata.send_message(
- message.chat.id,
- '```\n' .. heading .. '\n' .. output .. '\n```',
- 'markdown'
- )
+ output = string.format('<pre>%s\n%s</pre>', mattata.escape_html(heading), mattata.escape_html(output))
+ return mattata.send_message(message.chat.id, output, 'html')
end
return runescape
\ No newline at end of file
diff --git a/plugins/sed.lua b/plugins/sed.lua
index 7848bea..a9781c9 100644
--- a/plugins/sed.lua
+++ b/plugins/sed.lua
@@ -1,160 +1,161 @@
--[[
Based on a plugin by topkecleon. Licensed under GNU AGPLv3
https://github.com/topkecleon/otouto/blob/master/LICENSE.
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
]]
local sed = {}
local mattata = require('mattata')
local re = require('re')
local regex = require('rex_pcre')
function sed:init()
sed.commands = { '^[sS]/.-/.-/?.?$' }
sed.help = 's/pattern/substitution - Replaces all occurences, of text matching a given Lua pattern, with the given substitution.'
end
local compiled = re.compile[[
invocation <- 's/' {~ pcre ~} '/' {~ replace ~} ('/' modifiers)? !.
pcre <- ( [^\/] / slash / '\' )*
replace <- ( [^\/%$] / percent / slash / capture / '\' / '$' )*
modifiers <- { flags? } {~ matches? ~} {~ probability? ~}
flags <- ('i' / 'm' / 's' / 'x' / 'U' / 'X')+
matches <- ('#' {[0-9]+}) -> '%1'
probability <- ('%' {[0-9]+}) -> '%1'
slash <- ('\' '/') -> '/'
percent <- '%' -> '%%%%'
capture <- ('$' {[0-9]+}) -> '%%%1'
]]
function sed:on_callback_query(callback_query, message, configuration, language)
if not message.reply then
return mattata.delete_message(message.chat.id, message.message_id)
elseif mattata.is_global_admin(callback_query.from.id) then -- we'll pull a sneaky on them
callback_query.from = message.reply.from
elseif message.reply.from.id ~= callback_query.from.id then
return mattata.answer_callback_query(callback_query.id, 'That\'s not your place to say!')
end
local output = string.format(
'<b>%s:</b>\n%s',
message.text:match('^(.-):'),
message.text:match(':\n(.-)$')
)
if callback_query.data:match('^no$') then
output = string.format(
language['sed']['1'],
output,
mattata.escape_html(callback_query.from.first_name)
)
elseif callback_query.data:match('^yes$') then
output = string.format(
language['sed']['2'],
output,
mattata.escape_html(callback_query.from.first_name)
)
elseif callback_query.data:match('^maybe$') then
output = string.format(
language['sed']['3'],
output,
mattata.escape_html(callback_query.from.first_name)
)
end
return mattata.edit_message_text(
message.chat.id,
message.message_id,
output,
'html'
)
end
function sed:on_message(message, _, language)
if not message.reply then
return false
elseif message.reply.from.id == self.info.id then
- return mattata.send_reply(
- message,
- language['sed']['4'],
- 'html'
- )
+ return mattata.send_reply(message, language['sed']['4'], 'html')
+ elseif message.reply.from.id == message.from.id then
+ return mattata.send_reply(message, language['sed']['10'])
end
local input = message.reply.text
local text = message.text:match('^[sS]/(.*)$')
if not text then
return false
end
text = 's/' .. text
local pattern, replace, flags, matches, probability = compiled:match(text)
if not pattern then
return false
end
if matches then matches = tonumber(matches) end
if probability then probability = tonumber(probability) end
if probability then
if not matches then
matches = function()
return math.random() * 100 < probability
end
else
local remaining = matches
matches = function()
local temp
if remaining > 0 then
temp = nil
else
temp = 0
end
remaining = remaining - 1
return math.random() * 100 < probability, temp
end
end
end
local success, result, matched = pcall(function ()
return regex.gsub(input, pattern, replace, matches, flags)
end)
if success == false then
return mattata.send_reply(
message,
string.format(
'%s is invalid PCRE regex syntax!',
mattata.escape_html(text)
),
'html'
)
elseif matched == 0 then
return
end
result = mattata.trim(result)
if not result or result == '' then
return false
end
+ local user = mattata.get_formatted_user(message.reply.from.id, message.reply.from.first_name, 'html')
+ local from = mattata.get_formatted_user(message.from.id, message.from.first_name, 'html')
return mattata.send_message(
message.chat.id,
string.format(
language['sed']['6'],
- mattata.escape_html(message.reply.from.first_name),
+ user,
+ from,
mattata.escape_html(result)
),
'html',
true,
false,
message.reply.message_id,
mattata.inline_keyboard():row(
mattata.row():callback_data_button(
utf8.char(128077),
'sed:yes'
):callback_data_button(
utf8.char(128078),
'sed:no'
):callback_data_button(
'¯\\_(ツ)_/¯',
'sed:maybe'
)
)
)
end
return sed
\ No newline at end of file
diff --git a/plugins/slap.lua b/plugins/slap.lua
index 05b8959..732d6bb 100644
--- a/plugins/slap.lua
+++ b/plugins/slap.lua
@@ -1,52 +1,60 @@
--[[
Based on a plugin by topkecleon. Licensed under GNU AGPLv3
https://github.com/topkecleon/otouto/blob/master/LICENSE.
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
]]
local slap = {}
local mattata = require('mattata')
local redis = require('libs.redis')
function slap:init()
slap.commands = mattata.commands(self.info.username):command('slap').table
slap.help = '/slap [target] - Slaps someone, or something. Can be used in reply to someone.'
end
function slap:on_message(message, configuration)
local input = mattata.input(message)
- local victor = ''
- local victim = ''
+ local victor, victor_id, victim, victim_id
local slaps = configuration.slaps
if message.chat.type ~= 'private' then
local more = redis:smembers('slaps:' .. message.chat.id)
if #more > 0 then
for _, v in pairs(more) do
table.insert(slaps, v)
end
end
end
if not input then
if message.reply then
victor = message.from.first_name:gsub('%%', '%%%%')
+ victor_id = message.from.id
victim = message.reply.from.first_name:gsub('%%', '%%%%')
+ victim_id = message.reply.from.id
else
victor = self.info.first_name:gsub('%%', '%%%%')
+ victor_id = self.info.id
victim = message.from.first_name:gsub('%%', '%%%%')
+ victim_id = message.from.id
end
else
victor = message.from.first_name:gsub('%%', '%%%%')
+ victor_id = message.from.id
victim = input:gsub('%%', '%%%%')
+ victim_id = false
local success = mattata.get_user(input)
if success and success.result and success.result.type == 'private' then
victim = success.result.first_name
victim = victim:gsub('%%', '%%%%')
+ victim_id = success.result.id
end
end
- local output = slaps[math.random(#slaps)]
+ victor = mattata.get_formatted_user(victor_id, victor, 'html')
+ victim = victim_id and mattata.get_formatted_user(victim_id, victim, 'html') or mattata.escape_html(victim)
+ local output = mattata.escape_html(slaps[math.random(#slaps)])
output = output:gsub('{THEM}', victim):gsub('{ME}', victor)
- return mattata.send_message(message.chat.id, output)
+ return mattata.send_message(message.chat.id, output, 'html')
end
return slap
\ No newline at end of file
diff --git a/plugins/statistics.lua b/plugins/statistics.lua
index b16d97f..80bed42 100644
--- a/plugins/statistics.lua
+++ b/plugins/statistics.lua
@@ -1,87 +1,102 @@
--[[
Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
This code is licensed under the MIT. See LICENSE for details.
]]
local statistics = {}
local mattata = require('mattata')
local redis = require('libs.redis')
function statistics:init()
- statistics.commands = mattata.commands(self.info.username):command('statistics'):command('stats').table
- statistics.help = '/statistics - Shows statistical information about the current chat\'s top ten users (ordered by message count). Alias: /stats.'
+ statistics.commands = mattata.commands(self.info.username):command('statistics'):command('stats'):command('morestats').table
+ statistics.help = '/statistics - Shows statistical information about the current chat\'s top ten users (ordered by message count). Send /morestats to view the top 50 users. Alias: /stats.'
end
function statistics.reset_message_statistics(chat_id)
if not chat_id or tonumber(chat_id) == nil then
return false
end
local messages = redis:keys('messages:*:' .. chat_id)
if not next(messages) then
return false
end
for _, v in pairs(messages) do
redis:del(v)
end
return true
end
function statistics.get_user_message_statistics(user_id, chat_id)
return {
['messages'] = tonumber(redis:get('messages:' .. user_id .. ':' .. chat_id)) or 0,
['name'] = redis:hget('user:' .. user_id .. ':info', 'first_name'),
['id'] = user_id
}
end
-function statistics.get_message_statistics(message, language)
+function statistics.get_message_statistics(message, language, more)
if not message or not language then
return language['errors']['generic']
end
local users = redis:smembers('chat:' .. message.chat.id .. ':users')
local user_info = {}
for i = 1, #users do
local user = statistics.get_user_message_statistics(users[i], message.chat.id)
if user.name and user.name ~= '' and user.messages > 0 then
table.insert(user_info, user)
end
end
table.sort(user_info, function(a, b)
if a.messages and b.messages then
return a.messages > b.messages
end
end)
local total = 0
for n, _ in pairs(user_info) do
local message_count = user_info[n].messages
total = total + message_count
end
local text = ''
local output = {}
- for i = 1, 10 do
- table.insert(output, user_info[i])
+ local amount = more and 50 or 10
+ for i = 1, amount do
+ if i <= #user_info then
+ table.insert(output, user_info[i])
+ else
+ break
+ end
end
+ local count = 0
for _, v in pairs(output) do
+ count = count + 1
local message_count = v.messages
local percent = tostring(mattata.round((message_count / total) * 100, 1))
- text = text .. mattata.escape_html(v.name) .. ': <b>' .. mattata.comma_value(message_count) .. '</b> [' .. percent .. '%]\n'
+ text = text .. count .. '. ' .. mattata.get_formatted_user(v.id, v.name, 'html') .. ': <b>' .. mattata.comma_value(message_count) .. '</b> [' .. percent .. '%]\n'
end
text = text .. string.format('\n<em>I have seen %s/%s users in this group</em>', #redis:smembers('chat:' .. message.chat.id .. ':users'), mattata.get_chat_members_count(message.chat.id).result)
return string.format(language['statistics']['2'], mattata.escape_html(message.chat.title), text, mattata.comma_value(total))
end
-function statistics.on_message(_, message, _, language)
+function statistics:on_message(message, _, language)
if message.chat.type == 'private' then
return false
end
local input = mattata.input(message.text)
local output
if input and input:lower() == 'reset' and mattata.is_group_admin(message.chat.id, message.from.id, true) then
output = statistics.reset_message_statistics(message.chat.id) and language['statistics']['3'] or language['statistics']['4']
return mattata.send_message(message.chat.id, output)
end
- output = statistics.get_message_statistics(message, language)
- return mattata.send_message(message.chat.id, output, 'html')
+ local more = message.text:match('^[/!#]morestats') and true or false
+ output = statistics.get_message_statistics(message, language, more)
+ if more then
+ local success = mattata.send_message(message.from.id, output, 'html')
+ if not success then
+ return mattata.send_reply(message, 'Please [start a conversation with me](https://t.me/' .. self.info.username:lower() .. ') and try this command again!', true, true)
+ end
+ return mattata.send_reply(message, 'I\'ve sent you this information [via private chat](https://t.me/' .. self.info.username:lower() .. ')!', true, true)
+ end
+ return mattata.send_message(message.chat.id, output, 'html', true, true, true)
end
return statistics
\ No newline at end of file
diff --git a/plugins/time.lua b/plugins/time.lua
new file mode 100644
index 0000000..d832fa6
--- /dev/null
+++ b/plugins/time.lua
@@ -0,0 +1,71 @@
+--[[
+ Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
+ This code is licensed under the MIT. See LICENSE for details.
+]]
+
+local time = {}
+local mattata = require('mattata')
+local https = require('ssl.https')
+local url = require('socket.url')
+local json = require('dkjson')
+local setloc = require('plugins.setloc')
+local redis = require('libs.redis')
+
+function time:init()
+ time.commands = mattata.commands(self.info.username):command('time'):command('t'):command('d'):command('date').table
+ time.help = '/time [query] - Sends your time, or the time for the given location. Aliases: /t, /d, /date.'
+end
+
+function time:on_message(message, configuration, language)
+ local input = mattata.input(message.text:lower())
+ local location = false
+ if message.reply and not input then -- If it's used in reply to someone, we want their time instead.
+ message.from = message.reply.from
+ end
+ if not input and not setloc.get_loc(message.from.id) then
+ local success = mattata.send_force_reply(message, 'Please specify the location you would like to get the time for:')
+ if success then
+ local action = mattata.command_action(message.chat.id, success.result.message_id)
+ redis:set(action, '/time')
+ end
+ return
+ elseif not input then
+ location = setloc.get_loc(message.from.id)
+ if location then
+ location = json.decode(location)
+ end
+ end
+ if not location then
+ local jstr, res = https.request('https://api.opencagedata.com/geocode/v1/json?key=' .. configuration.keys.location .. '&pretty=0&q=' .. url.escape(input))
+ if res ~= 200 then
+ return mattata.send_reply(message, language.errors.connection)
+ end
+ local jdat = json.decode(jstr)
+ if jdat.total_results == 0 then
+ return mattata.send_reply(message, language.errors.results)
+ end
+ location = {
+ ['latitude'] = jdat.results[1].geometry.lat,
+ ['longitude'] = jdat.results[1].geometry.lng,
+ ['address'] = jdat.results[1].formatted
+ }
+ end
+ local formatted_location = string.format('%s,%s', location.latitude, location.longitude)
+ local jstr, res = https.request('https://maps.googleapis.com/maps/api/timezone/json?location=' .. formatted_location .. '&timestamp=' .. os.time() .. '&key=' .. configuration.keys.maps)
+ if res ~= 200 then
+ return mattata.send_reply(message, language.errors.connection)
+ end
+ local jdat = json.decode(jstr)
+ if jdat.errorMessage then
+ local output = string.format('Error `%s: %s`', jdat.status, jdat.errorMessage)
+ return mattata.send_message(message, output, true)
+ end
+ local offset = os.time() + tonumber(jdat.rawOffset) + tonumber(jdat.dstOffset)
+ local current = os.date('%c', offset)
+ current = current:gsub('^(%w+ %w+ %d*) (%d*:%d*:%d*) (%d+)$', '%2</b> on <b>%1 %3') -- We want the time first!
+ local output = 'It is currently <b>%s</b> <code>[%s]</code> in %s.'
+ output = string.format(output, current, jdat.timeZoneName, location.address)
+ return mattata.send_reply(message, output, 'html')
+end
+
+return time
diff --git a/plugins/todo.lua b/plugins/todo.lua
new file mode 100644
index 0000000..9fe2050
--- /dev/null
+++ b/plugins/todo.lua
@@ -0,0 +1,111 @@
+--[[
+ Copyright 2020 Matthew Hesketh <matthew@matthewhesketh.com>
+ This code is licensed under the MIT. See LICENSE for details.
+]]
+
+local todo = {}
+local mattata = require('mattata')
+local redis = require('libs.redis')
+
+function todo:init()
+ todo.commands = mattata.commands(self.info.username):command('todo').table
+ todo.help = '/todo [text] - If no arguments are given, allows you to view your to-do list. Otherwise, it adds the given'
+end
+
+function todo.get_keyboard(all)
+ if not all or #all == 0 then
+ return false
+ end
+ local keyboard = {
+ ['inline_keyboard'] = {}
+ }
+ for pos, item in pairs(all) do
+ if item:len() > 69 then -- Max text for buttons is 69.
+ item = item:sub(1, 69)
+ end
+ table.insert(keyboard.inline_keyboard, {{
+ ['text'] = item,
+ ['callback_data'] = 'todo:' .. pos .. ':view'
+ }, {
+ ['text'] = utf8.char(9989),
+ ['callback_data'] = 'todo:' .. pos .. ':done'
+ }})
+ end
+ return keyboard
+end
+
+function todo.on_callback_query(_, callback_query, message, _, language)
+ if message.chat.type == 'supergroup' and not mattata.is_group_admin(message.chat.id, callback_query.from.id) then
+ return mattata.answer_callback_query(callback_query.id, language.errors.admin)
+ end
+ local existing = redis:smembers('todo:' .. message.chat.id)
+ if not next(existing) then
+ return mattata.edit_message_text(message.chat.id, message.message_id, 'You\'ve got nothing to-do! For now...')
+ end
+ local pos, action = callback_query.data:match('^(%d*):(%a+)$')
+ pos = math.floor(tonumber(pos))
+ if not existing[pos] then
+ mattata.answer_callback_query(callback_query.id, 'It appears this to-do has already been completed!')
+ local keyboard = todo.get_keyboard(existing)
+ return mattata.edit_message_reply_markup(message.chat.id, message.message_id, nil, keyboard)
+ end
+ if action == 'view' then
+ return mattata.answer_callback_query(callback_query.id, existing[pos], true)
+ elseif action == 'done' then
+ redis:srem('todo:' .. (message.chat.id or message.from.id), existing[pos])
+ mattata.answer_callback_query(callback_query.id, 'I\'ve marked that to-do as completed!')
+ if #existing == 1 then
+ return mattata.edit_message_text(message.chat.id, message.message_id, 'You don\'t have any to-dos at the moment. Add one using /todo [text].')
+ end
+ existing = redis:smembers('todo:' .. message.chat.id)
+ local keyboard = todo.get_keyboard(existing)
+ return mattata.edit_message_reply_markup(message.chat.id, message.message_id, nil, keyboard)
+ end
+ return false
+end
+
+
+function todo.on_message(_, message, _, language)
+ local input = mattata.input(message.text)
+ if input then
+ input = { input }
+ end
+ if input and input[1]:match('\n') then
+ local new = {}
+ for line in input[1]:gmatch('([^\n]*)\n?') do
+ if line:gsub('%s', '') ~= '' then
+ table.insert(new, line)
+ end
+ end
+ if #new >= 1 then
+ input = new
+ end
+ end
+ if message.chat.type == 'supergroup' and not mattata.is_group_admin(message.chat.id, message.from.id) then
+ return mattata.send_reply(message, language.errors.admin)
+ end
+ local existing = redis:smembers('todo:' .. message.chat.id)
+ if not input then
+ if not next(existing) then
+ return mattata.send_reply(message, 'You don\'t have any to-dos at the moment. Add one using /todo [text].')
+ end
+ local keyboard = todo.get_keyboard(existing)
+ local output = 'Here is your current to-do list'
+ if message.chat.type == 'supergroup' then
+ output = output .. ' for ' .. message.chat.title .. '. To view your personal to-do list, send this command to me in private chat!'
+ else output = output .. ':' end
+ return mattata.send_message(message.chat.id, output, nil, true, false, nil, keyboard)
+ end
+ for _, line in pairs(input) do
+ if #existing == 50 then
+ return mattata.send_reply(message, 'Wow, you\'ve got a lot to do! But I\'m afraid you can\'t have more than 50 to-dos! Mark one as done and try this command again.')
+ elseif line:len() > 200 then
+ return mattata.send_reply(message, 'To-dos can\'t be longer than 200 characters!')
+ end
+ redis:sadd('todo:' .. message.chat.id, line)
+ existing = redis:smembers('todo:' .. message.chat.id)
+ end
+ return mattata.send_reply(message, 'I\'ve added that on your to-do list!')
+end
+
+return todo

File Metadata

Mime Type
text/x-diff
Expires
Thu, Sep 11, 4:28 AM (22 h, 18 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
42619
Default Alt Text
(584 KB)

Event Timeline