12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696269726982699270027012702270327042705270627072708270927102711271227132714271527162717271827192720272127222723272427252726272727282729273027312732273327342735273627372738273927402741274227432744274527462747274827492750275127522753275427552756275727582759276027612762276327642765276627672768276927702771277227732774277527762777277827792780278127822783278427852786278727882789279027912792279327942795279627972798279928002801280228032804280528062807280828092810281128122813281428152816281728182819282028212822282328242825282628272828282928302831283228332834283528362837283828392840284128422843284428452846284728482849285028512852285328542855285628572858285928602861286228632864286528662867286828692870287128722873287428752876287728782879288028812882288328842885288628872888288928902891289228932894289528962897289828992900290129022903290429052906290729082909291029112912291329142915291629172918291929202921292229232924292529262927292829292930293129322933293429352936293729382939294029412942294329442945294629472948294929502951295229532954295529562957295829592960296129622963296429652966296729682969297029712972297329742975297629772978297929802981298229832984298529862987298829892990299129922993299429952996299729982999300030013002300330043005300630073008300930103011301230133014301530163017301830193020302130223023302430253026302730283029303030313032303330343035303630373038303930403041304230433044304530463047304830493050305130523053305430553056305730583059306030613062306330643065306630673068306930703071307230733074307530763077307830793080308130823083308430853086308730883089309030913092309330943095309630973098309931003101310231033104310531063107310831093110311131123113311431153116311731183119312031213122312331243125312631273128312931303131313231333134313531363137313831393140314131423143314431453146314731483149315031513152315331543155315631573158315931603161316231633164316531663167316831693170317131723173317431753176317731783179318031813182318331843185318631873188318931903191319231933194319531963197319831993200320132023203320432053206320732083209321032113212321332143215321632173218321932203221322232233224322532263227322832293230323132323233323432353236323732383239324032413242324332443245324632473248324932503251325232533254325532563257325832593260326132623263326432653266326732683269327032713272327332743275327632773278327932803281328232833284328532863287328832893290329132923293329432953296329732983299330033013302330333043305330633073308330933103311331233133314331533163317331833193320332133223323332433253326332733283329333033313332333333343335333633373338333933403341334233433344334533463347334833493350335133523353335433553356335733583359336033613362336333643365336633673368336933703371337233733374337533763377337833793380338133823383338433853386338733883389339033913392339333943395339633973398339934003401340234033404340534063407340834093410341134123413341434153416341734183419342034213422342334243425342634273428342934303431343234333434343534363437343834393440344134423443344434453446344734483449345034513452345334543455345634573458345934603461346234633464346534663467346834693470347134723473347434753476347734783479348034813482348334843485348634873488348934903491349234933494349534963497349834993500350135023503350435053506350735083509351035113512351335143515351635173518351935203521352235233524352535263527352835293530353135323533353435353536353735383539354035413542354335443545354635473548354935503551355235533554355535563557355835593560356135623563356435653566356735683569357035713572357335743575357635773578357935803581358235833584358535863587358835893590359135923593359435953596359735983599360036013602360336043605360636073608360936103611361236133614361536163617361836193620362136223623362436253626362736283629363036313632363336343635363636373638363936403641364236433644364536463647364836493650365136523653365436553656365736583659366036613662366336643665366636673668366936703671367236733674367536763677367836793680368136823683368436853686368736883689369036913692369336943695369636973698369937003701370237033704370537063707370837093710371137123713371437153716371737183719372037213722372337243725372637273728372937303731373237333734373537363737373837393740374137423743374437453746374737483749375037513752375337543755375637573758375937603761376237633764376537663767376837693770377137723773377437753776377737783779378037813782378337843785378637873788378937903791379237933794379537963797379837993800380138023803380438053806380738083809381038113812381338143815381638173818381938203821382238233824382538263827382838293830383138323833383438353836383738383839384038413842384338443845384638473848384938503851385238533854385538563857385838593860386138623863386438653866386738683869387038713872387338743875387638773878387938803881388238833884388538863887388838893890389138923893389438953896389738983899390039013902390339043905390639073908390939103911391239133914391539163917391839193920392139223923392439253926392739283929393039313932393339343935393639373938393939403941394239433944394539463947394839493950395139523953395439553956395739583959396039613962396339643965396639673968396939703971397239733974397539763977397839793980398139823983398439853986398739883989399039913992399339943995399639973998399940004001400240034004400540064007400840094010401140124013401440154016401740184019402040214022402340244025402640274028402940304031403240334034403540364037403840394040404140424043404440454046404740484049405040514052405340544055405640574058405940604061406240634064406540664067406840694070407140724073407440754076407740784079408040814082408340844085408640874088408940904091409240934094409540964097409840994100410141024103410441054106410741084109411041114112411341144115411641174118411941204121412241234124412541264127412841294130413141324133413441354136413741384139414041414142414341444145414641474148414941504151415241534154415541564157415841594160416141624163416441654166416741684169417041714172417341744175417641774178417941804181418241834184418541864187418841894190419141924193419441954196419741984199420042014202420342044205420642074208420942104211421242134214421542164217421842194220422142224223422442254226422742284229423042314232423342344235423642374238423942404241424242434244424542464247424842494250425142524253425442554256425742584259426042614262426342644265426642674268426942704271427242734274427542764277427842794280428142824283428442854286428742884289429042914292429342944295429642974298429943004301430243034304430543064307430843094310431143124313431443154316431743184319432043214322432343244325432643274328432943304331433243334334433543364337433843394340434143424343434443454346434743484349435043514352435343544355435643574358435943604361436243634364436543664367436843694370437143724373437443754376437743784379438043814382438343844385438643874388438943904391439243934394439543964397439843994400440144024403440444054406440744084409441044114412441344144415441644174418441944204421442244234424442544264427442844294430443144324433443444354436443744384439444044414442444344444445444644474448444944504451445244534454445544564457445844594460446144624463446444654466446744684469447044714472447344744475447644774478447944804481448244834484448544864487448844894490449144924493449444954496449744984499450045014502450345044505450645074508450945104511451245134514451545164517451845194520452145224523452445254526452745284529453045314532453345344535453645374538453945404541454245434544454545464547454845494550455145524553455445554556455745584559456045614562456345644565456645674568456945704571457245734574457545764577457845794580458145824583458445854586458745884589459045914592459345944595459645974598459946004601460246034604460546064607460846094610461146124613461446154616461746184619462046214622462346244625462646274628462946304631463246334634463546364637463846394640464146424643464446454646464746484649465046514652465346544655465646574658465946604661466246634664466546664667466846694670467146724673467446754676467746784679468046814682468346844685468646874688468946904691469246934694469546964697469846994700470147024703470447054706470747084709471047114712471347144715471647174718471947204721472247234724472547264727472847294730473147324733473447354736473747384739474047414742474347444745474647474748474947504751475247534754475547564757475847594760476147624763476447654766476747684769477047714772477347744775477647774778477947804781478247834784478547864787478847894790479147924793479447954796479747984799480048014802480348044805480648074808480948104811481248134814481548164817481848194820482148224823482448254826482748284829483048314832483348344835483648374838483948404841484248434844484548464847484848494850485148524853485448554856485748584859486048614862486348644865486648674868486948704871487248734874487548764877487848794880488148824883488448854886488748884889489048914892489348944895489648974898489949004901490249034904490549064907490849094910491149124913491449154916491749184919492049214922492349244925492649274928492949304931493249334934493549364937493849394940494149424943494449454946494749484949495049514952495349544955495649574958495949604961496249634964496549664967496849694970497149724973497449754976497749784979498049814982498349844985498649874988498949904991499249934994499549964997499849995000500150025003500450055006500750085009501050115012501350145015501650175018501950205021502250235024502550265027502850295030503150325033503450355036503750385039504050415042504350445045504650475048504950505051505250535054505550565057505850595060506150625063506450655066506750685069507050715072507350745075507650775078507950805081508250835084508550865087508850895090509150925093509450955096509750985099510051015102510351045105510651075108510951105111511251135114511551165117511851195120512151225123512451255126512751285129513051315132513351345135513651375138513951405141514251435144514551465147514851495150515151525153515451555156515751585159516051615162516351645165516651675168516951705171517251735174517551765177517851795180518151825183518451855186518751885189519051915192519351945195519651975198519952005201520252035204520552065207520852095210521152125213521452155216521752185219522052215222522352245225522652275228522952305231523252335234523552365237523852395240524152425243524452455246524752485249525052515252525352545255525652575258525952605261526252635264526552665267526852695270527152725273527452755276527752785279528052815282528352845285528652875288528952905291529252935294529552965297529852995300530153025303530453055306530753085309531053115312531353145315531653175318531953205321532253235324532553265327532853295330533153325333533453355336533753385339534053415342534353445345534653475348534953505351535253535354535553565357535853595360536153625363536453655366536753685369537053715372537353745375537653775378537953805381538253835384538553865387538853895390539153925393539453955396539753985399540054015402540354045405540654075408540954105411541254135414541554165417541854195420542154225423542454255426542754285429543054315432543354345435543654375438543954405441544254435444544554465447544854495450545154525453545454555456545754585459546054615462546354645465546654675468546954705471547254735474547554765477547854795480548154825483548454855486548754885489549054915492549354945495549654975498549955005501550255035504550555065507550855095510551155125513551455155516551755185519552055215522552355245525552655275528552955305531553255335534553555365537553855395540554155425543554455455546554755485549555055515552555355545555555655575558555955605561556255635564556555665567556855695570557155725573557455755576557755785579558055815582558355845585558655875588558955905591559255935594559555965597559855995600560156025603560456055606560756085609561056115612561356145615561656175618561956205621562256235624562556265627562856295630563156325633563456355636563756385639564056415642564356445645564656475648564956505651565256535654565556565657565856595660566156625663566456655666566756685669567056715672567356745675567656775678567956805681568256835684568556865687568856895690569156925693569456955696569756985699570057015702570357045705570657075708570957105711571257135714571557165717571857195720572157225723572457255726572757285729573057315732573357345735573657375738573957405741574257435744574557465747574857495750575157525753575457555756575757585759576057615762576357645765576657675768576957705771577257735774577557765777577857795780578157825783578457855786578757885789579057915792579357945795579657975798579958005801580258035804580558065807580858095810581158125813581458155816581758185819582058215822582358245825582658275828582958305831583258335834583558365837583858395840584158425843584458455846584758485849585058515852585358545855585658575858585958605861586258635864586558665867586858695870587158725873587458755876587758785879588058815882588358845885588658875888588958905891589258935894589558965897589858995900590159025903590459055906590759085909591059115912591359145915591659175918591959205921592259235924592559265927592859295930593159325933593459355936593759385939594059415942594359445945594659475948594959505951595259535954595559565957595859595960596159625963596459655966596759685969597059715972597359745975597659775978597959805981598259835984598559865987598859895990599159925993599459955996599759985999600060016002600360046005600660076008600960106011601260136014601560166017601860196020602160226023602460256026602760286029603060316032603360346035603660376038603960406041604260436044604560466047604860496050605160526053605460556056605760586059 |
- #!/usr/bin/env bash
- [[ $_SHELLBOT_SH_ ]] && return 1
- if ! awk 'BEGIN { exit ARGV[1] < 4.3 }' ${BASH_VERSINFO[0]}.${BASH_VERSINFO[1]}; then
- echo "${BASH_SOURCE:-${0##*/}}: erro: requer o interpretador de comandos 'bash 4.3' ou superior." 1>&2
- exit 1
- fi
- # Informações
- readonly -A _SHELLBOT_=(
- [name]='ShellBot'
- [keywords]='Shell Script Telegram API'
- [description]='API não-oficial para criação de bots na plataforma Telegram.'
- [version]='6.4.0'
- [language]='shellscript'
- [shell]=${SHELL}
- [shell_version]=${BASH_VERSION}
- [author]='Juliano Santos [SHAMAN]'
- [email]='shellscriptx@gmail.com'
- [wiki]='https://github.com/shellscriptx/shellbot/wiki'
- [github]='https://github.com/shellscriptx/shellbot'
- [packages]='curl 7.0, getopt 2.0, jq 1.5'
- )
- # Verifica dependências.
- while read _pkg_ _ver_; do
- if command -v $_pkg_ &>/dev/null; then
- if [[ $($_pkg_ --version 2>&1) =~ [0-9]+\.[0-9]+ ]]; then
- if ! awk 'BEGIN { exit ARGV[1] < ARGV[2] }' $BASH_REMATCH $_ver_; then
- printf "%s: erro: requer o pacote '%s %s' ou superior.\n" ${_SHELLBOT_[name]} $_pkg_ $_ver_ 1>&2
- exit 1
- fi
- else
- printf "%s: erro: '%s' não foi possível obter a versão.\n" ${_SHELLBOT_[name]} $_pkg_ 1>&2
- exit 1
- fi
- else
- printf "%s: erro: '%s' o pacote requerido está ausente.\n" ${_SHELLBOT_[name]} $_pkg_ 1>&2
- exit 1
- fi
- done <<< "${_SHELLBOT_[packages]//,/$'\n'}"
- # bash (opções).
- shopt -s checkwinsize \
- cmdhist \
- complete_fullquote \
- expand_aliases \
- extglob \
- extquote \
- force_fignore \
- histappend \
- interactive_comments \
- progcomp \
- promptvars \
- sourcepath
- # Desabilita a expansão de nomes de arquivos (globbing).
- set -f
- readonly _SHELLBOT_SH_=1 # Inicialização
- readonly _BOT_SCRIPT_=${0##*/} # Script
- readonly _CURL_OPT_='--silent --request' # CURL (opções)
- # Erros
- readonly _ERR_TYPE_BOOL_='tipo incompatível: suporta somente "true" ou "false".'
- readonly _ERR_TYPE_INT_='tipo incompatível: suporta somente inteiro.'
- readonly _ERR_TYPE_FLOAT_='tipo incompatível: suporta somente float.'
- readonly _ERR_PARAM_REQUIRED_='opção requerida: verique se o(s) parâmetro(s) ou argumento(s) obrigatório(s) estão presente(s).'
- readonly _ERR_TOKEN_UNAUTHORIZED_='não autorizado: verifique se possui permissões para utilizar o token.'
- readonly _ERR_TOKEN_INVALID_='token inválido: verique o número do token e tente novamente.'
- readonly _ERR_BOT_ALREADY_INIT_='ação não permitida: o bot já foi inicializado.'
- readonly _ERR_FILE_NOT_FOUND_='falha ao acessar: não foi possível ler o arquivo.'
- readonly _ERR_DIR_WRITE_DENIED_='permissão negada: não é possível gravar no diretório.'
- readonly _ERR_DIR_NOT_FOUND_='Não foi possível acessar: diretório não encontrado.'
- readonly _ERR_FILE_INVALID_ID_='id inválido: arquivo não encontrado.'
- readonly _ERR_UNKNOWN_='erro desconhecido: ocorreu uma falha inesperada. Reporte o problema ao desenvolvedor.'
- readonly _ERR_SERVICE_NOT_ROOT_='acesso negado: requer privilégios de root.'
- readonly _ERR_SERVICE_EXISTS_='erro ao criar o serviço: o nome do serviço já existe.'
- readonly _ERR_SERVICE_SYSTEMD_NOT_FOUND_='erro ao ativar: o sistema não possui suporte ao gerenciamento de serviços "systemd".'
- readonly _ERR_SERVICE_USER_NOT_FOUND_='usuário não encontrado: a conta de usuário informada é inválida.'
- readonly _ERR_VAR_NAME_='variável não encontrada: o identificador é inválido ou não existe.'
- readonly _ERR_FUNCTION_NOT_FOUND_='função não encontrada: o identificador especificado é inválido ou não existe.'
- readonly _ERR_ARG_='argumento inválido: o argumento não é suportado pelo parâmetro especificado.'
- readonly _ERR_RULE_ALREADY_EXISTS_='falha ao definir: o nome da regra já existe.'
- readonly _ERR_HANDLE_EXISTS_='erro ao registar: já existe um handle vinculado ao callback'
- readonly _ERR_CONNECTION_='falha de conexão: não foi possível estabelecer conexão com o Telegram.'
- # Maps
- declare -A _BOT_HANDLE_
- declare -A _BOT_RULES_
- declare -A return
- declare -i _BOT_RULES_INDEX_
- declare _VAR_INIT_
- Json() { local obj=$(jq -Mc "$1" <<< "${*:2}"); obj=${obj#\"}; echo "${obj%\"}"; }
- SetDelmValues(){
- local obj=$(jq "[..|select(type == \"string\" or type == \"number\" or type == \"boolean\")|tostring]|join(\"${_BOT_DELM_/\"/\\\"}\")" <<< "$1")
- obj=${obj#\"}; echo "${obj%\"}"
- }
- GetAllValues(){
- jq '[..|select(type == "string" or type == "number" or type == "boolean")|tostring]|.[]' <<< "$1"
- }
- GetAllKeys(){
- jq -r 'path(..|select(type == "string" or type == "number" or type == "boolean"))|map(if type == "number" then .|tostring|"["+.+"]" else . end)|join(".")|gsub("\\.\\[";"[")' <<< "$1"
- }
- FlagConv()
- {
- local var str=$2
- while [[ $str =~ \$\{([a-z_]+)\} ]]; do
- if [[ ${BASH_REMATCH[1]} == @(${_VAR_INIT_// /|}) ]]; then
- var=${BASH_REMATCH[1]}[$1]
- str=${str//${BASH_REMATCH[0]}/${!var}}
- else
- str=${str//${BASH_REMATCH[0]}}
- fi
- done
- echo "$str"
- }
- CreateLog()
- {
- local fid fbot fname fuser lcode cid ctype
- local ctitle mid mdate mtext etype
- local i fmt obj oid
- for ((i=0; i < $1; i++)); do
-
- printf -v fmt "$_BOT_LOG_FORMAT_" || MessageError API
-
- # Suprimir erros.
- exec 5<&2
- exec 2<&-
- # Objeto (tipo)
- if [[ ${message_contact_phone_number[$i]:-${edited_message_contact_phone_number[$i]}} ]] ||
- [[ ${channel_post_contact_phone_number[$i]:-${edited_channel_post_contact_phone_number[$i]}} ]]; then obj=contact
- elif [[ ${message_sticker_file_id[$i]:-${edited_message_sticker_file_id[$i]}} ]] ||
- [[ ${channel_post_sticker_file_id[$i]:-${edited_channel_post_sticker_file_id[$i]}} ]]; then obj=sticker
- elif [[ ${message_animation_file_id[$i]:-${edited_message_animation_file_id[$i]}} ]] ||
- [[ ${channel_post_animation_file_id[$i]:-${edited_channel_post_animation_file_id[$i]}} ]]; then obj=animation
- elif [[ ${message_photo_file_id[$i]:-${edited_message_photo_file_id[$i]}} ]] ||
- [[ ${channel_post_photo_file_id[$i]:-${edited_channel_post_photo_file_id[$i]}} ]]; then obj=photo
- elif [[ ${message_audio_file_id[$i]:-${edited_message_audio_file_id[$i]}} ]] ||
- [[ ${channel_post_audio_file_id[$i]:-${edited_channel_post_audio_file_id[$i]}} ]]; then obj=audio
- elif [[ ${message_video_file_id[$i]:-${edited_message_video_file_id[$i]}} ]] ||
- [[ ${channel_post_video_file_id[$i]:-${edited_channel_post_video_file_id[$i]}} ]]; then obj=video
- elif [[ ${message_voice_file_id[$i]:-${edited_message_voice_file_id[$i]}} ]] ||
- [[ ${channel_post_voice_file_id[$i]:-${edited_channel_post_voice_file_id[$i]}} ]]; then obj=voice
- elif [[ ${message_document_file_id[$i]:-${edited_message_document_file_id[$i]}} ]] ||
- [[ ${channel_post_document_file_id[$i]:-${edited_channel_post_document_file_id[$i]}} ]]; then obj=document
- elif [[ ${message_venue_location_latitude[$i]:-${edited_message_venue_location_latitude[$i]}} ]] ||
- [[ ${channel_post_venue_location_latitude[$i]-${edited_channel_post_venue_location_latitude[$i]}} ]]; then obj=venue
- elif [[ ${message_location_latitude[$i]:-${edited_message_location_latitude[$i]}} ]] ||
- [[ ${channel_post_location_latitude[$i]:-${edited_channel_post_location_latitude[$i]}} ]]; then obj=location
- elif [[ ${message_text[$i]:-${edited_message_text[$i]}} ]] ||
- [[ ${channel_post_text[$i]:-${edited_channel_post_text[$i]}} ]]; then obj=text
- elif [[ ${callback_query_id[$i]} ]]; then obj=callback
- elif [[ ${inline_query_id[$i]} ]]; then obj=inline
- elif [[ ${chosen_inline_result_result_id[$i]} ]]; then obj=chosen
- fi
-
- # Objeto (id)
- [[ ${oid:=${message_contact_phone_number[$i]}} ]] ||
- [[ ${oid:=${message_sticker_file_id[$i]}} ]] ||
- [[ ${oid:=${message_animation_file_id[$i]}} ]] ||
- [[ ${oid:=${message_photo_file_id[$i]}} ]] ||
- [[ ${oid:=${message_audio_file_id[$i]}} ]] ||
- [[ ${oid:=${message_video_file_id[$i]}} ]] ||
- [[ ${oid:=${message_voice_file_id[$i]}} ]] ||
- [[ ${oid:=${message_document_file_id[$i]}} ]] ||
- [[ ${oid:=${edited_message_contact_phone_number[$i]}} ]] ||
- [[ ${oid:=${edited_message_sticker_file_id[$i]}} ]] ||
- [[ ${oid:=${edited_message_animation_file_id[$i]}} ]] ||
- [[ ${oid:=${edited_message_photo_file_id[$i]}} ]] ||
- [[ ${oid:=${edited_message_audio_file_id[$i]}} ]] ||
- [[ ${oid:=${edited_message_video_file_id[$i]}} ]] ||
- [[ ${oid:=${edited_message_voice_file_id[$i]}} ]] ||
- [[ ${oid:=${edited_message_document_file_id[$i]}} ]] ||
- [[ ${oid:=${channel_post_contact_phone_number[$i]}} ]] ||
- [[ ${oid:=${channel_post_sticker_file_id[$i]}} ]] ||
- [[ ${oid:=${channel_post_animation_file_id[$i]}} ]] ||
- [[ ${oid:=${channel_post_photo_file_id[$i]}} ]] ||
- [[ ${oid:=${channel_post_audio_file_id[$i]}} ]] ||
- [[ ${oid:=${channel_post_video_file_id[$i]}} ]] ||
- [[ ${oid:=${channel_post_voice_file_id[$i]}} ]] ||
- [[ ${oid:=${channel_post_document_file_id[$i]}} ]] ||
- [[ ${oid:=${edited_channel_post_contact_phone_number[$i]}} ]] ||
- [[ ${oid:=${edited_channel_post_sticker_file_id[$i]}} ]] ||
- [[ ${oid:=${edited_channel_post_animation_file_id[$i]}} ]] ||
- [[ ${oid:=${edited_channel_post_photo_file_id[$i]}} ]] ||
- [[ ${oid:=${edited_channel_post_audio_file_id[$i]}} ]] ||
- [[ ${oid:=${edited_channel_post_video_file_id[$i]}} ]] ||
- [[ ${oid:=${edited_channel_post_voice_file_id[$i]}} ]] ||
- [[ ${oid:=${edited_channel_post_document_file_id[$i]}} ]] ||
- [[ ${oid:=${message_message_id[$i]}} ]] ||
- [[ ${oid:=${edited_message_message_id[$i]}} ]] ||
- [[ ${oid:=${channel_post_message_id[$i]}} ]] ||
- [[ ${oid:=${edited_channel_post_message_id[$i]}} ]] ||
- [[ ${oid:=${callback_query_id[$i]}} ]] ||
- [[ ${oid:=${inline_query_id[$i]}} ]] ||
- [[ ${oid:=${chosen_inline_result_result_id[$i]}} ]]
- # Remetente (id)
- [[ ${fid:=${message_from_id[$i]}} ]] ||
- [[ ${fid:=${edited_message_from_id[$i]}} ]] ||
- [[ ${fid:=${callback_query_from_id[$i]}} ]] ||
- [[ ${fid:=${inline_query_from_id[$i]}} ]] ||
- [[ ${fid:=${chosen_inline_result_from_id[$i]}} ]]
- # Bot
- [[ ${fbot:=${message_from_is_bot[$i]}} ]] ||
- [[ ${fbot:=${edited_message_from_is_bot[$i]}} ]] ||
- [[ ${fbot:=${callback_query_from_is_bot[$i]}} ]] ||
- [[ ${fbot:=${inline_query_from_is_bot[$i]}} ]] ||
- [[ ${fbot:=${chosen_inline_result_from_is_bot[$i]}} ]]
- # Usuário (nome)
- [[ ${fname:=${message_from_first_name[$i]}} ]] ||
- [[ ${fname:=${edited_message_from_first_name[$i]}} ]] ||
- [[ ${fname:=${callback_query_from_first_name[$i]}} ]] ||
- [[ ${fname:=${inline_query_from_first_name[$i]}} ]] ||
- [[ ${fname:=${chosen_inline_result_from_first_name[$i]}} ]] ||
- [[ ${fname:=${channel_post_author_signature[$i]}} ]] ||
- [[ ${fname:=${edited_channel_post_author_signature[$i]}} ]]
- # Usuário (conta)
- [[ ${fuser:=${message_from_username[$i]}} ]] ||
- [[ ${fuser:=${edited_message_from_username[$i]}} ]] ||
- [[ ${fuser:=${callback_query_from_username[$i]}} ]] ||
- [[ ${fuser:=${inline_query_from_username[$i]}} ]] ||
- [[ ${fuser:=${chosen_inline_result_from_username[$i]}} ]]
- # Idioma
- [[ ${lcode:=${message_from_language_code[$i]}} ]] ||
- [[ ${lcode:=${edited_message_from_language_code[$i]}} ]] ||
- [[ ${lcode:=${callback_query_from_language_code[$i]}} ]] ||
- [[ ${lcode:=${inline_query_from_language_code[$i]}} ]] ||
- [[ ${lcode:=${chosen_inline_result_from_language_code[$i]}} ]]
- # Bate-papo (id)
- [[ ${cid:=${message_chat_id[$i]}} ]] ||
- [[ ${cid:=${edited_message_chat_id[$i]}} ]] ||
- [[ ${cid:=${callback_query_message_chat_id[$i]}} ]] ||
- [[ ${cid:=${channel_post_chat_id[$i]}} ]] ||
- [[ ${cid:=${edited_channel_post_chat_id[$i]}} ]]
- # Bate-papo (tipo)
- [[ ${ctype:=${message_chat_type[$i]}} ]] ||
- [[ ${ctype:=${edited_message_chat_type[$i]}} ]] ||
- [[ ${ctype:=${callback_query_message_chat_type[$i]}} ]] ||
- [[ ${ctype:=${channel_post_chat_type[$i]}} ]] ||
- [[ ${ctype:=${edited_channel_post_chat_type[$i]}} ]]
- # Bate-papo (título)
- [[ ${ctitle:=${message_chat_title[$i]}} ]] ||
- [[ ${ctitle:=${edited_message_chat_title[$i]}} ]] ||
- [[ ${ctitle:=${callback_query_message_chat_title[$i]}} ]] ||
- [[ ${ctitle:=${channel_post_chat_title[$i]}} ]] ||
- [[ ${ctitle:=${edited_channel_post_chat_title[$i]}} ]]
- # Mensagem (id)
- [[ ${mid:=${message_message_id[$i]}} ]] ||
- [[ ${mid:=${edited_message_message_id[$i]}} ]] ||
- [[ ${mid:=${callback_query_id[$i]}} ]] ||
- [[ ${mid:=${inline_query_id[$i]}} ]] ||
- [[ ${mid:=${chosen_inline_result_result_id[$i]}} ]] ||
- [[ ${mid:=${channel_post_message_id[$i]}} ]] ||
- [[ ${mid:=${edited_channel_post_message_id[$i]}} ]]
- # Mensagem (data)
- [[ ${mdate:=${message_date[$i]}} ]] ||
- [[ ${mdate:=${edited_message_date[$i]}} ]] ||
- [[ ${mdate:=${callback_query_message_date[$i]}} ]] ||
- [[ ${mdate:=${channel_post_date[$i]}} ]] ||
- [[ ${mdate:=${edited_channel_post_date[$i]}} ]]
- # Mensagem (texto)
- [[ ${mtext:=${message_text[$i]}} ]] ||
- [[ ${mtext:=${edited_message_text[$i]}} ]] ||
- [[ ${mtext:=${callback_query_message_text[$i]}} ]] ||
- [[ ${mtext:=${inline_query_query[$i]}} ]] ||
- [[ ${mtext:=${chosen_inline_result_query[$i]}} ]] ||
- [[ ${mtext:=${channel_post_text[$i]}} ]] ||
- [[ ${mtext:=${edited_channel_post_text[$i]}} ]]
- # Mensagem (tipo)
- [[ ${etype:=${message_entities_type[$i]}} ]] ||
- [[ ${etype:=${edited_message_entities_type[$i]}} ]] ||
- [[ ${etype:=${callback_query_message_entities_type[$i]}} ]] ||
- [[ ${etype:=${channel_post_entities_type[$i]}} ]] ||
- [[ ${etype:=${edited_channel_post_entities_type[$i]}} ]]
- # Flags
- fmt=${fmt//\{BOT_TOKEN\}/${_BOT_INFO_[0]:--}}
- fmt=${fmt//\{BOT_ID\}/${_BOT_INFO_[1]:--}}
- fmt=${fmt//\{BOT_FIRST_NAME\}/${_BOT_INFO_[2]:--}}
- fmt=${fmt//\{BOT_USERNAME\}/${_BOT_INFO_[3]:--}}
- fmt=${fmt//\{BASENAME\}/${_BOT_SCRIPT_:--}}
- fmt=${fmt//\{OK\}/${return[ok]:-${ok:--}}}
- fmt=${fmt//\{UPDATE_ID\}/${update_id[$i]:--}}
- fmt=${fmt//\{OBJECT_TYPE\}/${obj:--}}
- fmt=${fmt//\{OBJECT_ID\}/${oid:--}}
- fmt=${fmt//\{FROM_ID\}/${fid:--}}
- fmt=${fmt//\{FROM_IS_BOT\}/${fbot:--}}
- fmt=${fmt//\{FROM_FIRST_NAME\}/${fname:--}}
- fmt=${fmt//\{FROM_USERNAME\}/${fuser:--}}
- fmt=${fmt//\{FROM_LANGUAGE_CODE\}/${lcode:--}}
- fmt=${fmt//\{CHAT_ID\}/${cid:--}}
- fmt=${fmt//\{CHAT_TYPE\}/${ctype:--}}
- fmt=${fmt//\{CHAT_TITLE\}/${ctitle:--}}
- fmt=${fmt//\{MESSAGE_ID\}/${mid:--}}
- fmt=${fmt//\{MESSAGE_DATE\}/${mdate:--}}
- fmt=${fmt//\{MESSAGE_TEXT\}/${mtext:--}}
- fmt=${fmt//\{ENTITIES_TYPE\}/${etype:--}}
- fmt=${fmt//\{METHOD\}/${FUNCNAME[2]/main/ShellBot.getUpdates}}
- fmt=${fmt//\{RETURN\}/$(SetDelmValues "$2")}
- exec 2<&5
- # log
- [[ $fmt ]] && { echo "$fmt" >> "$_BOT_LOG_FILE_" || MessageError API; }
- # Limpa objetos
- fid= fbot= fname= fuser= lcode= cid= ctype=
- ctitle= mid= mdate= mtext= etype= obj= oid=
- done
- return $?
- }
- MethodReturn()
- {
- # Retorno
- case $_BOT_TYPE_RETURN_ in
- json) echo "$1";;
- value) SetDelmValues "$1";;
- map)
- local key val vars vals i obj
- return=()
- mapfile -t vars <<< $(GetAllKeys "$1")
- mapfile -t vals <<< $(GetAllValues "$1")
- for i in ${!vars[@]}; do
- key=${vars[$i]//[0-9\[\]]/}
- key=${key#result.}
- key=${key//./_}
- val=${vals[$i]}
- val=${val#\"}
- val=${val%\"}
-
- [[ ${return[$key]} ]] && return[$key]+=${_BOT_DELM_}${val} || return[$key]=$val
- [[ $_BOT_MONITOR_ ]] && printf "[%s]: return[%s] = '%s'\n" "${FUNCNAME[1]}" "$key" "$val"
- done
- ;;
- esac
-
- [[ $(jq -r '.ok' <<< "$1") == true ]]
- return $?
- }
- MessageError()
- {
- # Variáveis locais
- local err_message err_param assert i
-
- # A variável 'BASH_LINENO' é dinâmica e armazena o número da linha onde foi expandida.
- # Quando chamada dentro de um subshell, passa ser instanciada como um array, armazenando diversos
- # valores onde cada índice refere-se a um shell/subshell. As mesmas caracteristicas se aplicam a variável
- # 'FUNCNAME', onde é armazenado o nome da função onde foi chamada.
-
- # Obtem o índice da função na hierarquia de chamada.
- [[ ${FUNCNAME[1]} == CheckArgType ]] && i=2 || i=1
-
- # Lê o tipo de ocorrência.
- # TG - Erro externo retornado pelo core do telegram.
- # API - Erro interno gerado pela API do ShellBot.
- case $1 in
- TG)
- err_param="$(Json '.error_code' "$2")"
- err_message="$(Json '.description' "$2")"
- ;;
- API)
- err_param="${3:--}: ${4:--}"
- err_message="$2"
- assert=true
- ;;
- esac
- # Imprime erro
- printf "%s: erro: linha %s: %s: %s: %s\n" \
- "${_BOT_SCRIPT_}" \
- "${BASH_LINENO[$i]:--}" \
- "${FUNCNAME[$i]:--}" \
- "${err_param:--}" \
- "${err_message:-$_ERR_UNKNOWN_}" 1>&2
- # Finaliza script/thread em caso de erro interno, caso contrário retorna 1
- ${assert:-false} && exit 1 || return 1
- }
- CheckArgType()
- {
- # CheckArgType recebe os dados da função chamadora e verifica
- # o dado recebido com o tipo suportado pelo parâmetro.
- # É retornado '0' para sucesso, caso contrário uma mensagem
- # de erro é retornada e o script/thread é finalizado com status '1'.
- case $1 in
- user) id "$3" &>/dev/null || MessageError API "$_ERR_SERVICE_USER_NOT_FOUND_" "$2" "$3";;
- func) [[ $(type -t "$3") == function ]] || MessageError API "$_ERR_FUNCTION_NOT_FOUND_" "$2" "$3";;
- var) [[ -v $3 ]] || MessageError API "$_ERR_VAR_NAME_" "$2" "$3";;
- int) [[ $3 =~ ^-?[0-9]+$ ]] || MessageError API "$_ERR_TYPE_INT_" "$2" "$3";;
- float) [[ $3 =~ ^-?[0-9]+\.[0-9]+$ ]] || MessageError API "$_ERR_TYPE_FLOAT_" "$2" "$3";;
- bool) [[ $3 =~ ^(true|false)$ ]] || MessageError API "$_ERR_TYPE_BOOL_" "$2" "$3";;
- token) [[ $3 =~ ^[0-9]+:[a-zA-Z0-9_-]+$ ]] || MessageError API "$_ERR_TOKEN_INVALID_" "$2" "$3";;
- file) [[ $3 =~ ^@ && ! -f ${3#@} ]] && MessageError API "$_ERR_FILE_NOT_FOUND_" "$2" "$3";;
- return) [[ $3 == @(json|map|value) ]] || MessageError API "$_ERR_ARG_" "$2" "$3";;
- cmd) [[ $3 =~ ^/[a-zA-Z0-9_]+$ ]] || MessageError API "$_ERR_ARG_" "$2" "$3";;
- flag) [[ $3 =~ ^[a-zA-Z0-9_]+$ ]] || MessageError API "$_ERR_ARG_" "$2" "$3";;
- esac
- return $?
- }
- FlushOffset()
- {
- local sid eid jq_obj
- while :; do
- jq_obj=$(ShellBot.getUpdates --limit 100 --offset $(ShellBot.OffsetNext))
- IFS=' ' read -a update_id <<< $(jq -r '.result|.[]|.update_id' <<< $jq_obj)
- [[ $update_id ]] || break
- sid=${sid:-${update_id[0]}}
- eid=${update_id[-1]}
- done
-
- echo "${sid:-0}|${eid:-0}"
- return $?
- }
- CreateUnitService()
- {
- local service=${1%.*}.service
- local ok='\033[0;32m[OK]\033[0;m'
- local fail='\033[0;31m[FALHA]\033[0;m'
-
- ((UID == 0)) || MessageError API "$_ERR_SERVICE_NOT_ROOT_"
- # O modo 'service' requer que o sistema de gerenciamento de processos 'systemd'
- # esteja presente para que o Unit target seja linkado ao serviço.
- if ! which systemctl &>/dev/null; then
- MessageError API "$_ERR_SERVICE_SYSTEMD_NOT_FOUND_"; fi
- # Se o serviço existe.
- test -e /lib/systemd/system/$service && \
- MessageError API "$_ERR_SERVICE_EXISTS_" "$service"
- # Gerando as configurações do target.
- cat > /lib/systemd/system/$service << _eof
- [Unit]
- Description=$1 - (SHELLBOT)
- After=network-online.target
- [Service]
- User=$2
- WorkingDirectory=$PWD
- ExecStart=/bin/bash $1
- ExecReload=/bin/kill -HUP \$MAINPID
- ExecStop=/bin/kill -KILL \$MAINPID
- KillMode=process
- Restart=on-failure
- RestartPreventExitStatus=255
- Type=simple
- [Install]
- WantedBy=multi-user.target
- _eof
- [[ $? -eq 0 ]] && {
-
- printf '%s foi criado com sucesso !!\n' $service
- echo -n "Habilitando..."
- systemctl enable $service &>/dev/null && echo -e $ok || \
- { echo -e $fail; MessageError API; }
- sed -i -r '/^\s*ShellBot.init\s/s/\s--?(s(ervice)?|u(ser)?\s+\w+)\b//g' "$1"
- systemctl daemon-reload
- echo -n "Iniciando..."
- systemctl start $service &>/dev/null && {
-
- echo -e $ok
- systemctl status $service
- echo -e "\nUso: sudo systemctl {start|stop|restart|reload|status} $service"
-
- } || echo -e $fail
-
- } || MessageError API
- exit 0
- }
- # Inicializa o bot, definindo sua API e _TOKEN_.
- ShellBot.init()
- {
- local method_return delm ret logfmt jq_obj offset
- local token monitor flush service user logfile logfmt
-
- # Verifica se o bot já foi inicializado.
- [[ $_SHELLBOT_INIT_ ]] && MessageError API "$_ERR_BOT_ALREADY_INIT_"
- local param=$(getopt --name "$FUNCNAME" \
- --options 't:mfsu:l:o:r:d:' \
- --longoptions 'token:,
- monitor,
- flush,
- service,
- user:,
- log_file:,
- log_format:,
- return:,
- delimiter:' \
- -- "$@")
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -t|--token)
- CheckArgType token "$1" "$2"
- token=$2
- shift 2
- ;;
- -m|--monitor)
- # Ativa modo monitor
- monitor=true
- shift
- ;;
- -f|--flush)
- # Define a FLAG flush para o método 'ShellBot.getUpdates'. Se ativada, faz com que
- # o método obtenha somente as atualizações disponíveis, ignorando a extração dos
- # objetos JSON e a inicialização das variáveis.
- flush=true
- shift
- ;;
- -s|--service)
- service=true
- shift
- ;;
- -u|--user)
- CheckArgType user "$1" "$2"
- user=$2
- shift 2
- ;;
- -l|--log_file)
- logfile=$2
- shift 2
- ;;
- -o|--log_format)
- logfmt=$2
- shift 2
- ;;
- -r|--return)
- CheckArgType return "$1" "$2"
- ret=$2
- shift 2
- ;;
- -d|--delimiter)
- delm=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Parâmetro obrigatório.
- [[ $token ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --token]"
- [[ $user && ! $service ]] && MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --service]"
- [[ $service ]] && CreateUnitService "$_BOT_SCRIPT_" "${user:-$USER}"
-
- declare -gr _TOKEN_=$token # TOKEN
- declare -gr _API_TELEGRAM_="https://api.telegram.org/bot$_TOKEN_" # API
- # Testa conexão.
- curl -s "$_API_TELEGRAM_" &>- || MessageError API "$_ERR_CONNECTION_"
- # Um método simples para testar o token de autenticação do seu bot.
- # Não requer parâmetros. Retorna informações básicas sobre o bot em forma de um objeto Usuário.
- ShellBot.getMe()
- {
- # Chama o método getMe passando o endereço da API, seguido do nome do método.
- jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.})
- # Verifica o status de retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
- }
- ShellBot.getMe &>- || MessageError API "$_ERR_TOKEN_UNAUTHORIZED_" '[-t, --token]'
-
- # Salva as informações do bot.
- declare -gr _BOT_INFO_=(
- [0]=$_TOKEN_
- [1]=$(Json '.result.id' $jq_obj)
- [2]=$(Json '.result.first_name' $jq_obj)
- [3]=$(Json '.result.username' $jq_obj)
- )
- # Configurações.
- declare -gr _BOT_FLUSH_=$flush
- declare -gr _BOT_MONITOR_=$monitor
- declare -gr _BOT_SERVICE_=$service
- declare -gr _BOT_USER_SERVICE_=$user
- declare -gr _BOT_TYPE_RETURN_=${ret:-value}
- declare -gr _BOT_DELM_=${delm:-|}
- declare -gr _BOT_LOG_FILE_=${logfile}
- declare -gr _BOT_LOG_FORMAT_=${logfmt:-%(%d/%m/%Y %H:%M:%S)T: \{BASENAME\}: \{BOT_USERNAME\}: \{UPDATE_ID\}: \{METHOD\}: \{CHAT_TYPE\}: \{FROM_USERNAME\}: \{OBJECT_TYPE\}: \{OBJECT_ID\}: \{MESSAGE_TEXT\}}
- declare -gr _SHELLBOT_INIT_=1
- # SHELLBOT (FUNÇÕES)
- # Inicializa as funções para chamadas aos métodos da API do telegram.
- ShellBot.ListUpdates(){ echo ${!update_id[@]}; }
- ShellBot.TotalUpdates(){ echo ${#update_id[@]}; }
- ShellBot.OffsetEnd(){ local -i offset=${update_id[@]: -1}; echo $offset; }
- ShellBot.OffsetNext(){ echo $((${update_id[@]: -1}+1)); }
-
- ShellBot.token() { echo "${_BOT_INFO_[0]}"; }
- ShellBot.id() { echo "${_BOT_INFO_[1]}"; }
- ShellBot.first_name() { echo "${_BOT_INFO_[2]}"; }
- ShellBot.username() { echo "${_BOT_INFO_[3]}"; }
-
- ShellBot.getConfig()
- {
- local jq_obj
- printf -v jq_obj '{"monitor":%s,"flush":%s,"service":%s,"return":"%s","delimiter":"%s","user":"%s","log_file":"%s","log_format":"%s"}' \
- "${_BOT_MONITOR_:-false}" \
- "${_BOT_FLUSH_:-false}" \
- "${_BOT_SERVICE_:-false}" \
- "${_BOT_TYPE_RETURN_}" \
- "${_BOT_DELM_}" \
- "${_BOT_USER_SERVICE_}" \
- "${_BOT_LOG_FILE_}" \
- "${_BOT_LOG_FORMAT_}"
- MethodReturn "$jq_obj"
- return $?
- }
- ShellBot.regHandleFunction()
- {
- local function data handle args
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'f:a:d:' \
- --longoptions 'function:,
- args:,
- callback_data:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -f|--function)
- CheckArgType func "$1" "$2"
- function=$2
- shift 2
- ;;
- -a|--args)
- args=$2
- shift 2
- ;;
- -d|--callback_data)
- data=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
- [[ $function ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-f, --function]"
- [[ $data ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-d, --callback_data]"
- [[ ${_BOT_HANDLE_[$data]} ]] && MessageError API "$_ERR_HANDLE_EXISTS_" '[-d, --callback_data]'
- _BOT_HANDLE_[$data]=func:$function' '$args
- return 0
- }
-
- ShellBot.regHandleExec()
- {
- local cmd data
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:d:' \
- --longoptions 'command:,
- callback_data:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--command)
- cmd=$2
- shift 2
- ;;
- -d|--callback_data)
- data=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
- [[ $cmd ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --command]"
- [[ $data ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-d, --callback_data]"
- [[ ${_BOT_HANDLE_[$data]} ]] && MessageError API "$_ERR_HANDLE_EXISTS_" "[-d, --callback_data]"
- _BOT_HANDLE_[$data]=exec:$cmd
- return 0
- }
-
- ShellBot.watchHandle()
- {
- local data flag cmd
- local param=$(getopt --name "$FUNCNAME" \
- --options 'd' \
- --longoptions 'callback_data' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -d|--callback_data)
- shift 2
- data=$1
- ;;
- *)
- shift
- break
- ;;
- esac
- done
-
- # Handles (somente-leitura)
- readonly _BOT_HANDLE_
- [[ $data ]] || return 1 # vazio
-
- IFS=':' read -r flag cmd <<< "${_BOT_HANDLE_[$data]}"
- case $flag in
- func) $cmd;;
- exec) eval "$cmd";;
- esac
-
- # retorno
- return 0
- }
-
- ShellBot.getWebhookInfo()
- {
- # Variável local
- local jq_obj
-
- # Chama o método getMe passando o endereço da API, seguido do nome do método.
- jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.})
-
- # Verifica o status de retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
- }
-
- ShellBot.deleteWebhook()
- {
- # Variável local
- local jq_obj
-
- # Chama o método getMe passando o endereço da API, seguido do nome do método.
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.})
-
- # Verifica o status de retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
- }
-
- ShellBot.setWebhook()
- {
- local url certificate max_connections allowed_updates jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'u:c:m:a:' \
- --longoptions 'url:,
- certificate:,
- max_connections:,
- allowed_updates:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -u|--url)
- url=$2
- shift 2
- ;;
- -c|--certificate)
- CheckArgType file "$1" "$2"
- certificate=$2
- shift 2
- ;;
- -m|--max_connections)
- CheckArgType int "$1" "$2"
- max_connections=$2
- shift 2
- ;;
- -a|--allowed_updates)
- allowed_updates=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $url ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --url]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${url:+-d url="$url"} \
- ${certificate:+-d certificate="$certificate"} \
- ${max_connections:+-d max_connections="$max_connections"} \
- ${allowed_updates:+-d allowed_updates="$allowed_updates"})
-
- # Testa o retorno do método.
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- ShellBot.setChatPhoto()
- {
- local chat_id photo jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:p:' \
- --longoptions 'chat_id:,photo:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -p|--photo)
- CheckArgType file "$1" "$2"
- photo=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $photo ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-p, --photo]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-F chat_id="$chat_id"} \
- ${photo:+-F photo="$photo"})
-
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- ShellBot.deleteChatPhoto()
- {
- local chat_id jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:' \
- --longoptions 'chat_id:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"})
-
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
-
- }
-
- ShellBot.setChatTitle()
- {
-
- local chat_id title jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:t:' \
- --longoptions 'chat_id:,title:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -t|--title)
- title=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $title ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --title]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${title:+-d title="$title"})
-
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
-
- ShellBot.setChatDescription()
- {
-
- local chat_id description jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:d:' \
- --longoptions 'chat_id:,description:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -d|--description)
- description=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $description ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-d, --description]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${description:+-d description="$description"})
-
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- ShellBot.pinChatMessage()
- {
-
- local chat_id message_id disable_notification jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:m:n:' \
- --longoptions 'chat_id:,
- message_id:,
- disable_notification:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -m|--message_id)
- CheckArgType int "$1" "$2"
- message_id=$2
- shift 2
- ;;
- -n|--disable_notification)
- CheckArgType bool "$1" "$2"
- disable_notification=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --message_id]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${message_id:+-d message_id="$message_id"} \
- ${disable_notification:+-d disable_notification="$disable_notification"})
-
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- ShellBot.unpinChatMessage()
- {
- local chat_id jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:' \
- --longoptions 'chat_id:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"})
-
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- ShellBot.restrictChatMember()
- {
- local chat_id user_id until_date permissions jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:u:d:p:' \
- --longoptions 'chat_id:,
- user_id:,
- until_date:,
- permissions:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -u|--user_id)
- CheckArgType int "$1" "$2"
- user_id=$2
- shift 2
- ;;
- -d|--until_date)
- CheckArgType int "$1" "$2"
- until_date=$2
- shift 2
- ;;
- -p|--permissions)
- permissions=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
- [[ $permissions ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-p, --permissions]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${user_id:+-d user_id="$user_id"} \
- ${until_date:+-d until_date="$until_date"} \
- ${permissions:+-d permissions="$permissions"})
-
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
-
- }
-
-
- ShellBot.promoteChatMember()
- {
- local chat_id user_id can_change_info can_post_messages \
- can_edit_messages can_delete_messages can_invite_users \
- can_restrict_members can_pin_messages can_promote_members \
- jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:u:i:p:e:d:v:r:f:m:' \
- --longoptions 'chat_id:,
- user_id:,
- can_change_info:,
- can_post_messages:,
- can_edit_messages:,
- can_delete_messages:,
- can_invite_users:,
- can_restrict_members:,
- can_pin_messages:,
- can_promote_members:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -u|--user_id)
- CheckArgType int "$1" "$2"
- user_id=$2
- shift 2
- ;;
- -i|--can_change_info)
- CheckArgType bool "$1" "$2"
- can_change_info=$2
- shift 2
- ;;
- -p|--can_post_messages)
- CheckArgType bool "$1" "$2"
- can_post_messages=$2
- shift 2
- ;;
- -e|--can_edit_messages)
- CheckArgType bool "$1" "$2"
- can_edit_messages=$2
- shift 2
- ;;
- -d|--can_delete_messages)
- CheckArgType bool "$1" "$2"
- can_delete_messages=$2
- shift 2
- ;;
- -v|--can_invite_users)
- CheckArgType bool "$1" "$2"
- can_invite_users=$2
- shift 2
- ;;
- -r|--can_restrict_members)
- CheckArgType bool "$1" "$2"
- can_restrict_members=$2
- shift 2
- ;;
- -f|--can_pin_messages)
- CheckArgType bool "$1" "$2"
- can_pin_messages=$2
- shift 2
- ;;
- -m|--can_promote_members)
- CheckArgType bool "$1" "$2"
- can_promote_members=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --user_id]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${user_id:+-d user_id="$user_id"} \
- ${can_change_info:+-d can_change_info="$can_change_info"} \
- ${can_post_messages:+-d can_post_messages="$can_post_messages"} \
- ${can_edit_messages:+-d can_edit_messages="$can_edit_messages"} \
- ${can_delete_messages:+-d can_delete_messages="$can_delete_messages"} \
- ${can_invite_users:+-d can_invite_users="$can_invite_users"} \
- ${can_restrict_members:+-d can_restrict_members="$can_restrict_members"} \
- ${can_pin_messages:+-d can_pin_messages="$can_pin_messages"} \
- ${can_promote_members:+-d can_promote_members="$can_promote_members"})
-
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- ShellBot.exportChatInviteLink()
- {
- local chat_id jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:' \
- --longoptions 'chat_id:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
-
- jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"})
-
- # Testa o retorno do método.
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- ShellBot.sendVideoNote()
- {
- local chat_id video_note duration length disable_notification \
- reply_to_message_id reply_markup jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:v:t:l:n:r:k:' \
- --longoptions 'chat_id:,
- video_note:,
- duration:,
- length:,
- disable_notification:,
- reply_to_message_id:,
- reply_markup:' \
- -- "$@")
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -v|--video_note)
- CheckArgType file "$1" "$2"
- video_note=$2
- shift 2
- ;;
- -t|--duration)
- CheckArgType int "$1" "$2"
- duration=$2
- shift 2
- ;;
- -l|--length)
- CheckArgType int "$1" "$2"
- length=$2
- shift 2
- ;;
- -n|--disable_notification)
- CheckArgType bool "$1" "$2"
- disable_notification=$2
- shift 2
- ;;
- -r|--reply_to_message_id)
- CheckArgType int "$1" "$2"
- reply_to_message_id=$2
- shift 2
- ;;
- -k|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $video_note ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-v, --video_note]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-F chat_id="$chat_id"} \
- ${video_note:+-F video_note="$video_note"} \
- ${duration:+-F duration="$duration"} \
- ${length:+-F length="$length"} \
- ${disable_notification:+-F disable_notification="$disable_notification"} \
- ${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
- ${reply_markup:+-F reply_markup="$reply_markup"})
-
- # Testa o retorno do método.
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
-
- ShellBot.InlineKeyboardButton()
- {
- local __button __line __text __url __callback_data \
- __switch_inline_query __switch_inline_query_current_chat
-
- local __param=$(getopt --name "$FUNCNAME" \
- --options 'b:l:t:u:c:q:s:' \
- --longoptions 'button:,
- line:,
- text:,
- url:,
- callback_data:,
- switch_inline_query:,
- switch_inline_query_chat:' \
- -- "$@")
-
- eval set -- "$__param"
-
- while :
- do
- case $1 in
- -b|--button)
- # Ponteiro que recebe o endereço de "button" com as definições
- # da configuração do botão inserido.
- CheckArgType var "$1" "$2"
- __button=$2
- shift 2
- ;;
- -l|--line)
- CheckArgType int "$1" "$2"
- __line=$(($2-1))
- shift 2
- ;;
- -t|--text)
- __text=$(echo -e "$2")
- shift 2
- ;;
- -u|--url)
- __url=$2
- shift 2
- ;;
- -c|--callback_data)
- __callback_data=$2
- shift 2
- ;;
- -q|--switch_inline_query)
- __switch_inline_query=$2
- shift 2
- ;;
- -s|--switch_inline_query_current_chat)
- __switch_inline_query_current_chat=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $__button ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-b, --button]"
- [[ $__text ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --text]"
- [[ $__callback_data ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --callback_data]"
- [[ $__line ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-l, --line]"
-
- __button=$__button[$__line]
- printf -v $__button '%s' "${!__button#[}"
- printf -v $__button '%s' "${!__button%]}"
-
- printf -v $__button '%s {"text": "%s", "callback_data": "%s", "url": "%s", "switch_inline_query": "%s", "switch_inline_query_current_chat": "%s"}' \
- "${!__button:+${!__button},}" \
- "${__text}" \
- "${__callback_data}" \
- "${__url}" \
- "${__switch_inline_query}" \
- "${__switch_inline_query_current_chat}"
- printf -v $__button '%s' "[${!__button}]"
- return $?
- }
-
- ShellBot.InlineKeyboardMarkup()
- {
- local __button __keyboard
- local __param=$(getopt --name "$FUNCNAME" \
- --options 'b:' \
- --longoptions 'button:' \
- -- "$@")
-
- eval set -- "$__param"
-
- while :
- do
- case $1 in
- -b|--button)
- # Ponteiro que recebe o endereço da variável "teclado" com as definições
- # de configuração do botão inserido.
- CheckArgType var "$1" "$2"
- __button="$2"
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $__button ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-b, --button]"
-
- __button=$__button[@]
- printf -v __keyboard '%s,' "${!__button}"
- printf -v __keyboard '%s' "${__keyboard%,}"
- # Constroi a estrutura dos objetos + array keyboard, define os valores e salva as configurações.
- # Por padrão todos os valores são 'false' até que seja definido.
- printf '{"inline_keyboard": [%s]}' "${__keyboard}"
-
- return $?
- }
-
- ShellBot.answerCallbackQuery()
- {
- local callback_query_id text show_alert url cache_time jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:t:s:u:e:' \
- --longoptions 'callback_query_id:,
- text:,
- show_alert:,
- url:,
- cache_time:' \
- -- "$@")
-
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--callback_query_id)
- callback_query_id=$2
- shift 2
- ;;
- -t|--text)
- text=$(echo -e "$2")
- shift 2
- ;;
- -s|--show_alert)
- # boolean
- CheckArgType bool "$1" "$2"
- show_alert=$2
- shift 2
- ;;
- -u|--url)
- url=$2
- shift 2
- ;;
- -e|--cache_time)
- # inteiro
- CheckArgType int "$1" "$2"
- cache_time=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $callback_query_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --callback_query_id]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${callback_query_id:+-d callback_query_id="$callback_query_id"} \
- ${text:+-d text="$text"} \
- ${show_alert:+-d show_alert="$show_alert"} \
- ${url:+-d url="$url"} \
- ${cache_time:+-d cache_time="$cache_time"})
-
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
- }
-
- # Cria objeto que representa um teclado personalizado com opções de resposta
- ShellBot.ReplyKeyboardMarkup()
- {
- # Variáveis locais
- local __button __resize_keyboard __on_time_keyboard __selective __keyboard
-
- # Lê os parâmetros da função.
- local __param=$(getopt --name "$FUNCNAME" \
- --options 'b:r:t:s:' \
- --longoptions 'button:,
- resize_keyboard:,
- one_time_keyboard:,
- selective:' \
- -- "$@")
-
- # Transforma os parâmetros da função em parâmetros posicionais
- #
- # Exemplo:
- # --param1 arg1 --param2 arg2 --param3 arg3 ...
- # $1 $2 $3
- eval set -- "$__param"
-
- # Aguarda leitura dos parâmetros
- while :
- do
- # Lê o parâmetro da primeira posição "$1"; Se for um parâmetro válido,
- # salva o valor do argumento na posição '$2' e desloca duas posições a esquerda (shift 2); Repete o processo
- # até que o valor de '$1' seja igual '--' e finaliza o loop.
- case $1 in
- -b|--button)
- CheckArgType var "$1" "$2"
- __button=$2
- shift 2
- ;;
- -r|--resize_keyboard)
- # Tipo: boolean
- CheckArgType bool "$1" "$2"
- __resize_keyboard=$2
- shift 2
- ;;
- -t|--one_time_keyboard)
- # Tipo: boolean
- CheckArgType bool "$1" "$2"
- __on_time_keyboard=$2
- shift 2
- ;;
- -s|--selective)
- # Tipo: boolean
- CheckArgType bool "$1" "$2"
- __selective=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Imprime mensagem de erro se o parâmetro obrigatório for omitido.
- [[ $__button ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-b, --button]"
-
- __button=$__button[@]
- printf -v __keyboard '%s,' "${!__button}"
- printf -v __keyboard '%s' "${__keyboard%,}"
- # Constroi a estrutura dos objetos + array keyboard, define os valores e salva as configurações.
- # Por padrão todos os valores são 'false' até que seja definido.
- printf '{"keyboard": [%s], "resize_keyboard": %s, "one_time_keyboard": %s, "selective": %s}' \
- "${__keyboard}" \
- "${__resize_keyboard:-false}" \
- "${__on_time_keyboard:-false}" \
- "${__selective:-false}"
- # status
- return $?
- }
- ShellBot.KeyboardButton()
- {
- local __text __contact __location __button __line __request_poll
- local __param=$(getopt --name "$FUNCNAME" \
- --options 'b:l:t:c:o:r:' \
- --longoptions 'button:,
- line:,
- text:,
- request_contact:,
- request_location:,
- request_poll:' \
- -- "$@")
-
- eval set -- "$__param"
-
- while :
- do
- case $1 in
- -b|--button)
- CheckArgType var "$1" "$2"
- __button=$2
- shift 2
- ;;
- -l|--line)
- CheckArgType int "$1" "$2"
- __line=$(($2-1))
- shift 2
- ;;
- -t|--text)
- __text=$(echo -e "$2")
- shift 2
- ;;
- -c|--request_contact)
- CheckArgType bool "$1" "$2"
- __contact=$2
- shift 2
- ;;
- -o|--request_location)
- CheckArgType bool "$1" "$2"
- __location=$2
- shift 2
- ;;
- -r|--request_poll)
- __request_poll=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
- [[ $__button ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-b, --button]"
- [[ $__text ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --text]"
- [[ $__line ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-l, --line]"
-
- __button=$__button[$__line]
- printf -v $__button '%s' "${!__button#[}"
- printf -v $__button '%s' "${!__button%]}"
-
- printf -v $__button '%s {"text": "%s", "request_contact": %s, "request_location": %s, "request_poll": %s}' \
- "${!__button:+${!__button},}" \
- "${__text}" \
- "${__contact:-false}" \
- "${__location:-false}" \
- "${__request_poll:-\"\"}"
- printf -v $__button '%s' "[${!__button}]"
- return $?
- }
-
- ShellBot.ForceReply()
- {
- local selective
- local param=$(getopt --name "$FUNCNAME" \
- --options 's:' \
- --longoptions 'selective:' \
- -- "$@")
- eval set -- "$param"
- while :
- do
- case $1 in
- -s|--selective)
- CheckArgType bool "$1" "$2"
- selective=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
- printf '{"force_reply": true, "selective": %s}' ${selective:-false}
- return $?
- }
- ShellBot.ReplyKeyboardRemove()
- {
- local selective
- local param=$(getopt --name "$FUNCNAME" \
- --options 's:' \
- --longoptions 'selective:' \
- -- "$@")
- eval set -- "$param"
- while :
- do
- case $1 in
- -s|--selective)
- CheckArgType bool "$1" "$2"
- selective=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
- printf '{"remove_keyboard": true, "selective": %s}' ${selective:-false}
- return $?
- }
- # Envia mensagens
- ShellBot.sendMessage()
- {
- # Variáveis locais
- local chat_id text parse_mode disable_web_page_preview
- local disable_notification reply_to_message_id reply_markup jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:t:p:w:n:r:k:' \
- --longoptions 'chat_id:,
- text:,
- parse_mode:,
- disable_web_page_preview:,
- disable_notification:,
- reply_to_message_id:,
- reply_markup:' \
- -- "$@")
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -t|--text)
- text=$(echo -e "$2")
- shift 2
- ;;
- -p|--parse_mode)
- # Tipo: "markdown" ou "html"
- parse_mode=$2
- shift 2
- ;;
- -w|--disable_web_page_preview)
- # Tipo: boolean
- CheckArgType bool "$1" "$2"
- disable_web_page_preview=$2
- shift 2
- ;;
- -n|--disable_notification)
- # Tipo: boolean
- CheckArgType bool "$1" "$2"
- disable_notification=$2
- shift 2
- ;;
- -r|--reply_to_message_id)
- # Tipo: inteiro
- CheckArgType int "$1" "$2"
- reply_to_message_id=$2
- shift 2
- ;;
- -k|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Parâmetros obrigatórios.
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $text ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --text]"
-
- # Chama o método da API, utilizando o comando request especificado; Os parâmetros
- # e valores são passados no form e lidos pelo método. O retorno do método é redirecionado para o arquivo 'update.Json'.
- # Variáveis com valores nulos são ignoradas e consequentemente os respectivos parâmetros omitidos.
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${text:+-d text="$text"} \
- ${parse_mode:+-d parse_mode="$parse_mode"} \
- ${disable_web_page_preview:+-d disable_web_page_preview="$disable_web_page_preview"} \
- ${disable_notification:+-d disable_notification="$disable_notification"} \
- ${reply_to_message_id:+-d reply_to_message_id="$reply_to_message_id"} \
- ${reply_markup:+-d reply_markup="$reply_markup"})
-
- # Testa o retorno do método.
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- # Função para reencaminhar mensagens de qualquer tipo.
- ShellBot.forwardMessage()
- {
- # Variáveis locais
- local chat_id form_chat_id disable_notification message_id jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:f:n:m:' \
- --longoptions 'chat_id:,
- from_chat_id:,
- disable_notification:,
- message_id:' \
- -- "$@")
-
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id="$2"
- shift 2
- ;;
- -f|--from_chat_id)
- from_chat_id="$2"
- shift 2
- ;;
- -n|--disable_notification)
- # Tipo: boolean
- CheckArgType bool "$1" "$2"
- disable_notification="$2"
- shift 2
- ;;
- -m|--message_id)
- # Tipo: inteiro
- CheckArgType int "$1" "$2"
- message_id="$2"
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Parâmetros obrigatórios.
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $from_chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-f, --from_chat_id]"
- [[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --message_id]"
-
- # Chama o método
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${from_chat_id:+-d from_chat_id="$from_chat_id"} \
- ${disable_notification:+-d disable_notification="$disable_notification"} \
- ${message_id:+-d message_id="$message_id"})
-
- # Retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # status
- return $?
- }
-
- # Utilize essa função para enviar fotos.
- ShellBot.sendPhoto()
- {
- # Variáveis locais
- local chat_id photo caption disable_notification
- local parse_mode reply_to_message_id reply_markup jq_obj
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:p:t:m:n:r:k:' \
- --longoptions 'chat_id:,
- photo:,
- caption:,
- parse_mode:,
- disable_notification:,
- reply_to_message_id:,
- reply_markup:' \
- -- "$@")
-
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -p|--photo)
- CheckArgType file "$1" "$2"
- photo=$2
- shift 2
- ;;
- -t|--caption)
- # Limite máximo de caracteres: 200
- caption=$(echo -e "$2")
- shift 2
- ;;
- -m|--parse_mode)
- parse_mode=$2
- shift 2
- ;;
- -n|--disable_notification)
- # Tipo: boolean
- CheckArgType bool "$1" "$2"
- disable_notification=$2
- shift 2
- ;;
- -r|--reply_to_message_id)
- # Tipo: inteiro
- CheckArgType int "$1" "$2"
- reply_to_message_id=$2
- shift 2
- ;;
- -k|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Parâmetros obrigatórios
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $photo ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-p, --photo]"
-
- # Chama o método
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-F chat_id="$chat_id"} \
- ${photo:+-F photo="$photo"} \
- ${caption:+-F caption="$caption"} \
- ${parse_mode:+-F parse_mode="$parse_mode"} \
- ${disable_notification:+-F disable_notification="$disable_notification"} \
- ${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
- ${reply_markup:+-F reply_markup="$reply_markup"})
-
- # Retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- # Utilize essa função para enviar arquivos de audio.
- ShellBot.sendAudio()
- {
- # Variáveis locais
- local chat_id audio caption duration performer title
- local parse_mode disable_notification reply_to_message_id reply_markup jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:a:t:m:d:e:i:n:r:k' \
- --longoptions 'chat_id:,
- audio:,
- caption:,
- parse_mode:,
- duration:,
- performer:,
- title:,
- disable_notification:,
- reply_to_message_id:,
- reply_markup:' \
- -- "$@")
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -a|--audio)
- CheckArgType file "$1" "$2"
- audio=$2
- shift 2
- ;;
- -t|--caption)
- caption=$(echo -e "$2")
- shift 2
- ;;
- -m|--parse_mode)
- parse_mode=$2
- shift 2
- ;;
- -d|--duration)
- # Tipo: inteiro
- CheckArgType int "$1" "$2"
- duration=$2
- shift 2
- ;;
- -e|--performer)
- performer=$2
- shift 2
- ;;
- -i|--title)
- title=$2
- shift 2
- ;;
- -n|--disable_notification)
- # Tipo: boolean
- CheckArgType bool "$1" "$2"
- disable_notification=$2
- shift 2
- ;;
- -r|--reply_to_message_id)
- # Tipo: inteiro
- CheckArgType int "$1" "$2"
- reply_to_message_id=$2
- shift 2
- ;;
- -k|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Parâmetros obrigatórios
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $audio ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-a, --audio]"
-
- # Chama o método
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-F chat_id="$chat_id"} \
- ${audio:+-F audio="$audio"} \
- ${caption:+-F caption="$caption"} \
- ${parse_mode:+-F parse_mode="$parse_mode"} \
- ${duration:+-F duration="$duration"} \
- ${performer:+-F performer="$performer"} \
- ${title:+-F title="$title"} \
- ${disable_notification:+-F disable_notification="$disable_notification"} \
- ${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
- ${reply_markup:+-F reply_markup="$reply_markup"})
-
- # Retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
-
- }
-
- # Utilize essa função para enviar documentos.
- ShellBot.sendDocument()
- {
- # Variáveis locais
- local chat_id document caption disable_notification
- local parse_mode reply_to_message_id reply_markup jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:d:t:m:n:r:k:' \
- --longoptions 'chat_id:,
- document:,
- caption:,
- parse_mode:,
- disable_notification:,
- reply_to_message_id:,
- reply_markup:' \
- -- "$@")
-
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -d|--document)
- CheckArgType file "$1" "$2"
- document=$2
- shift 2
- ;;
- -t|--caption)
- caption=$(echo -e "$2")
- shift 2
- ;;
- -m|--parse_mode)
- parse_mode=$2
- shift 2
- ;;
- -n|--disable_notification)
- CheckArgType bool "$1" "$2"
- disable_notification=$2
- shift 2
- ;;
- -r|--reply_to_message_id)
- CheckArgType int "$1" "$2"
- reply_to_message_id=$2
- shift 2
- ;;
- -k|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Parâmetros obrigatórios
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $document ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-d, --document]"
-
- # Chama o método
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-F chat_id="$chat_id"} \
- ${document:+-F document="$document"} \
- ${caption:+-F caption="$caption"} \
- ${parse_mode:+-F parse_mode="$parse_mode"} \
- ${disable_notification:+-F disable_notification="$disable_notification"} \
- ${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
- ${reply_markup:+-F reply_markup="$reply_markup"})
-
- # Retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
-
- }
-
- # Utilize essa função para enviat stickers
- ShellBot.sendSticker()
- {
- # Variáveis locais
- local chat_id sticker disable_notification reply_to_message_id reply_markup jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:s:n:r:k:' \
- --longoptions 'chat_id:,
- sticker:,
- disable_notification:,
- reply_to_message_id:,
- reply_markup:' \
- -- "$@")
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -s|--sticker)
- CheckArgType file "$1" "$2"
- sticker=$2
- shift 2
- ;;
- -n|--disable_notification)
- # Tipo: boolean
- CheckArgType bool "$1" "$2"
- disable_notification=$2
- shift 2
- ;;
- -r|--reply_to_message_id)
- # Tipo: inteiro
- CheckArgType int "$1" "$2"
- reply_to_message_id=$2
- shift 2
- ;;
- -k|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Parâmetros obrigatórios
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $sticker ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --sticker]"
-
- # Chama o método
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-F chat_id="$chat_id"} \
- ${sticker:+-F sticker="$sticker"} \
- ${disable_notification:+-F disable_notification="$disable_notification"} \
- ${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
- ${reply_markup:+-F reply_markup="$reply_markup"})
-
- # Testa o retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- ShellBot.getStickerSet()
- {
- local name jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'n:' \
- --longoptions 'name:' \
- -- "$@")
-
- # parâmetros posicionais
- eval set -- "$param"
- while :
- do
- case $1 in
- -n|--name)
- name=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $name ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-n, --name]"
-
- jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.} ${name:+-d name="$name"})
-
- # Testa o retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- ShellBot.uploadStickerFile()
- {
- local user_id png_sticker jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'u:s:' \
- --longoptions 'user_id:,
- png_sticker:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -u|--user_id)
- CheckArgType int "$1" "$2"
- user_id=$2
- shift 2
- ;;
- -s|--png_sticker)
- CheckArgType file "$1" "$2"
- png_sticker=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
- [[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
- [[ $png_sticker ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --png_sticker]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${user_id:+-F user_id="$user_id"} \
- ${png_sticker:+-F png_sticker="$png_sticker"})
-
- # Testa o retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
-
- }
- ShellBot.setStickerPositionInSet()
- {
- local sticker position jq_obj
- local param=$(getopt --name "$FUNCNAME" \
- --options 's:p:' \
- --longoptions 'sticker:,
- position:' \
- -- "$@")
-
- eval set -- "$param"
- while :
- do
- case $1 in
- -s|--sticker)
- sticker=$2
- shift 2
- ;;
- -p|--position)
- CheckArgType int "$1" "$2"
- position=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $sticker ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --sticker]"
- [[ $position ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-p, --position]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${sticker:+-d sticker="$sticker"} \
- ${position:+-d position="$position"})
-
- # Testa o retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
-
- }
-
- ShellBot.deleteStickerFromSet()
- {
- local sticker jq_obj
- local param=$(getopt --name "$FUNCNAME" \
- --options 's:' \
- --longoptions 'sticker:' \
- -- "$@")
-
- eval set -- "$param"
- while :
- do
- case $1 in
- -s|--sticker)
- sticker=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $sticker ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --sticker]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${sticker:+-d sticker="$sticker"})
-
- # Testa o retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
-
- }
-
- ShellBot.stickerMaskPosition()
- {
- local point x_shift y_shift scale zoom
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'p:x:y:s:z:' \
- --longoptions 'point:,
- x_shift:,
- y_shift:,
- scale:,
- zoom:' \
- -- "$@")
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -p|--point)
- point=$2
- shift 2
- ;;
- -x|--x_shift)
- CheckArgType float "$1" "$2"
- x_shift=$2
- shift 2
- ;;
- -y|--y_shift)
- CheckArgType float "$1" "$2"
- y_shift=$2
- shift 2
- ;;
- -s|--scale)
- CheckArgType float "$1" "$2"
- scale=$2
- shift 2
- ;;
- -z|--zoom)
- CheckArgType float "$1" "$2"
- zoom=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $point ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-p, --point]"
- [[ $x_shift ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-x, --x_shift]"
- [[ $y_shift ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-y, --y_shift]"
- [[ $scale ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --scale]"
- [[ $zoom ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-z, --zoom]"
-
- cat << _EOF
- { "point": "$point", "x_shift": $x_shift, "y_shift": $y_shift, "scale": $scale, "zoom": $zoom }
- _EOF
- return 0
- }
- ShellBot.createNewStickerSet()
- {
- local user_id name title png_sticker emojis contains_masks mask_position jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'u:n:t:s:e:c:m:' \
- --longoptions 'user_id:,
- name:,
- title:,
- png_sticker:,
- emojis:,
- contains_mask:,
- mask_position:' \
- -- "$@")
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -u|--user_id)
- CheckArgType int "$1" "$2"
- user_id=$2
- shift 2
- ;;
- -n|--name)
- name=$2
- shift 2
- ;;
- -t|--title)
- title=$2
- shift 2
- ;;
- -s|--png_sticker)
- CheckArgType file "$1" "$2"
- png_sticker=$2
- shift 2
- ;;
- -e|--emojis)
- emojis=$2
- shift 2
- ;;
- -c|--contains_masks)
- CheckArgType bool "$1" "$2"
- contains_masks=$2
- shift 2
- ;;
- -m|--mask_position)
- mask_position=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
- [[ $name ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-n, --name]"
- [[ $title ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --title]"
- [[ $png_sticker ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --png_sticker]"
- [[ $emojis ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-e, --emojis]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${user_id:+-F user_id="$user_id"} \
- ${name:+-F name="$name"} \
- ${title:+-F title="$title"} \
- ${png_sticker:+-F png_sticker="$png_sticker"} \
- ${emojis:+-F emojis="$emojis"} \
- ${contains_masks:+-F contains_masks="$contains_masks"} \
- ${mask_position:+-F mask_position="$mask_position"})
-
- # Testa o retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
-
- }
-
- ShellBot.addStickerToSet()
- {
- local user_id name png_sticker emojis mask_position jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'u:n:s:e:m:' \
- --longoptions 'user_id:,
- name:,
- png_sticker:,
- emojis:,
- mask_position:' \
- -- "$@")
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -u|--user_id)
- CheckArgType int "$1" "$2"
- user_id=$2
- shift 2
- ;;
- -n|--name)
- name=$2
- shift 2
- ;;
- -s|--png_sticker)
- CheckArgType file "$1" "$2"
- png_sticker=$2
- shift 2
- ;;
- -e|--emojis)
- emojis=$2
- shift 2
- ;;
- -m|--mask_position)
- mask_position=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
- [[ $name ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-n, --name]"
- [[ $png_sticker ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --png_sticker]"
- [[ $emojis ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-e, --emojis]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${user_id:+-F user_id="$user_id"} \
- ${name:+-F name="$name"} \
- ${png_sticker:+-F png_sticker="$png_sticker"} \
- ${emojis:+-F emojis="$emojis"} \
- ${mask_position:+-F mask_position="$mask_position"})
-
- # Testa o retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
-
- }
- # Função para enviar arquivos de vídeo.
- ShellBot.sendVideo()
- {
- # Variáveis locais
- local chat_id video duration width height caption disable_notification
- local parse_mode reply_to_message_id reply_markup jq_obj supports_streaming
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:v:d:w:h:t:m:n:r:k:s:' \
- --longoptions 'chat_id:,
- video:,
- duration:,
- width:,
- height:,
- caption:,
- parse_mode:,
- disable_notification:,
- reply_to_message_id:,
- reply_markup:,
- supports_streaming:' \
- -- "$@")
-
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -v|--video)
- CheckArgType file "$1" "$2"
- video=$2
- shift 2
- ;;
- -d|--duration)
- # Tipo: inteiro
- CheckArgType int "$1" "$2"
- duration=$2
- shift 2
- ;;
- -w|--width)
- # Tipo: inteiro
- CheckArgType int "$1" "$2"
- width=$2
- shift 2
- ;;
- -h|--height)
- # Tipo: inteiro
- CheckArgType int "$1" "$2"
- height=$2
- shift 2
- ;;
- -t|--caption)
- caption=$(echo -e "$2")
- shift 2
- ;;
- -m|--parse_mode)
- parse_mode=$2
- shift 2
- ;;
- -n|--disable_notification)
- # Tipo: boolean
- CheckArgType bool "$1" "$2"
- disable_notification=$2
- shift 2
- ;;
- -r|--reply_to_message_id)
- CheckArgType int "$1" "$2"
- reply_to_message_id=$2
- shift 2
- ;;
- -k|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- -s|--supports_streaming)
- CheckArgType bool "$1" "$2"
- supports_streaming=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Parâmetros obrigatórios.
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $video ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-v, --video]"
-
- # Chama o método
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-F chat_id="$chat_id"} \
- ${video:+-F video="$video"} \
- ${duration:+-F duration="$duration"} \
- ${width:+-F width="$width"} \
- ${height:+-F height="$height"} \
- ${caption:+-F caption="$caption"} \
- ${parse_mode:+-F parse_mode="$parse_mode"} \
- ${disable_notification:+-F disable_notification="$disable_notification"} \
- ${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
- ${reply_markup:+-F reply_markup="$reply_markup"} \
- ${supports_streaming:+-F supports_streaming="$supports_streaming"})
-
- # Testa o retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
-
- }
-
- # Função para enviar audio.
- ShellBot.sendVoice()
- {
- # Variáveis locais
- local chat_id voice caption duration disable_notification
- local parse_mode reply_to_message_id reply_markup jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:v:t:m:d:n:r:k:' \
- --longoptions 'chat_id:,
- voice:,
- caption:,
- parse_mode:,
- duration:,
- disable_notification:,
- reply_to_message_id:,
- reply_markup:' \
- -- "$@")
-
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -v|--voice)
- CheckArgType file "$1" "$2"
- voice=$2
- shift 2
- ;;
- -t|--caption)
- caption=$(echo -e "$2")
- shift 2
- ;;
- -m|--parse_mode)
- parse_mode=$2
- shift 2
- ;;
- -d|--duration)
- # Tipo: inteiro
- CheckArgType int "$1" "$2"
- duration=$2
- shift 2
- ;;
- -n|--disable_notification)
- # Tipo: boolean
- CheckArgType bool "$1" "$2"
- disable_notification=$2
- shift 2
- ;;
- -r|--reply_to_message_id)
- # Tipo: inteiro
- CheckArgType int "$1" "$2"
- reply_to_message_id=$2
- shift 2
- ;;
- -k|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Parâmetros obrigatórios.
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $voice ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-v, --voice]"
-
- # Chama o método
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-F chat_id="$chat_id"} \
- ${voice:+-F voice="$voice"} \
- ${caption:+-F caption="$caption"} \
- ${parse_mode:+-F parse_mode="$parse_mode"} \
- ${duration:+-F duration="$duration"} \
- ${disable_notification:+-F disable_notification="$disable_notification"} \
- ${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
- ${reply_markup:+-F reply_markup="$reply_markup"})
-
- # Testa o retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
-
- }
-
- # Função utilizada para enviar uma localidade utilizando coordenadas de latitude e longitude.
- ShellBot.sendLocation()
- {
- # Variáveis locais
- local chat_id latitude longitude live_period
- local disable_notification reply_to_message_id reply_markup jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:l:g:p:n:r:k:' \
- --longoptions 'chat_id:,
- latitude:,
- longitude:,
- live_period:,
- disable_notification:,
- reply_to_message_id:,
- reply_markup:' \
- -- "$@")
-
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -l|--latitude)
- # Tipo: float
- CheckArgType float "$1" "$2"
- latitude=$2
- shift 2
- ;;
- -g|--longitude)
- # Tipo: float
- CheckArgType float "$1" "$2"
- longitude=$2
- shift 2
- ;;
- -p|--live_period)
- CheckArgType int "$1" "$2"
- live_period=$2
- shift 2
- ;;
- -n|--disable_notification)
- # Tipo: boolean
- CheckArgType bool "$1" "$2"
- disable_notification=$2
- shift 2
- ;;
- -r|--reply_to_message_id)
- # Tipo: inteiro
- CheckArgType int "$1" "$2"
- reply_to_message_id=$2
- shift 2
- ;;
- -k|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Parâmetros obrigatórios
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $latitude ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-l, --latitude]"
- [[ $longitude ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-g, --longitude]"
-
- # Chama o método
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-F chat_id="$chat_id"} \
- ${latitude:+-F latitude="$latitude"} \
- ${longitude:+-F longitude="$longitude"} \
- ${live_period:+-F live_period="$live_period"} \
- ${disable_notification:+-F disable_notification="$disable_notification"} \
- ${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
- ${reply_markup:+-F reply_markup="$reply_markup"})
-
- # Testa o retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
-
- }
-
- # Função utlizada para enviar detalhes de um local.
- ShellBot.sendVenue()
- {
- # Variáveis locais
- local chat_id latitude longitude title address foursquare_id disable_notification reply_to_message_id reply_markup jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:l:g:i:a:f:n:r:k:' \
- --longoptions 'chat_id:,
- latitude:,
- longitude:,
- title:,
- address:,
- foursquare_id:,
- disable_notification:,
- reply_to_message_id:,
- reply_markup:' \
- -- "$@")
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -l|--latitude)
- # Tipo: float
- CheckArgType float "$1" "$2"
- latitude=$2
- shift 2
- ;;
- -g|--longitude)
- # Tipo: float
- CheckArgType float "$1" "$2"
- longitude=$2
- shift 2
- ;;
- -i|--title)
- title=$2
- shift 2
- ;;
- -a|--address)
- address=$2
- shift 2
- ;;
- -f|--foursquare_id)
- foursquare_id=$2
- shift 2
- ;;
- -n|--disable_notification)
- # Tipo: boolean
- CheckArgType bool "$1" "$2"
- disable_notification=$2
- shift 2
- ;;
- -r|--reply_to_message_id)
- # Tipo: inteiro
- CheckArgType int "$1" "$2"
- reply_to_message_id=$2
- shift 2
- ;;
- -k|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Parâmetros obrigatórios.
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $latitude ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-l, --latitude]"
- [[ $longitude ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-g, --longitude]"
- [[ $title ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-i, --title]"
- [[ $address ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-a, --address]"
-
- # Chama o método
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-F chat_id="$chat_id"} \
- ${latitude:+-F latitude="$latitude"} \
- ${longitude:+-F longitude="$longitude"} \
- ${title:+-F title="$title"} \
- ${address:+-F address="$address"} \
- ${foursquare_id:+-F foursquare_id="$foursquare_id"} \
- ${disable_notification:+-F disable_notification="$disable_notification"} \
- ${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
- ${reply_markup:+-F reply_markup="$reply_markup"})
-
- # Testa o retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- # Utilize essa função para enviar um contato + numero
- ShellBot.sendContact()
- {
- # Variáveis locais
- local chat_id phone_number first_name last_name disable_notification reply_to_message_id reply_markup jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:p:f:l:n:r:k:' \
- --longoptions 'chat_id:,
- phone_number:,
- first_name:,
- last_name:,
- disable_notification:,
- reply_to_message_id:,
- reply_markup:' \
- -- "$@")
-
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -p|--phone_number)
- phone_number=$2
- shift 2
- ;;
- -f|--first_name)
- first_name=$2
- shift 2
- ;;
- -l|--last_name)
- last_name=$2
- shift 2
- ;;
- -n|--disable_notification)
- # Tipo: boolean
- CheckArgType bool "$1" "$2"
- disable_notification=$2
- shift 2
- ;;
- -r|--reply_to_message_id)
- # Tipo: inteiro
- CheckArgType int "$1" "$2"
- reply_to_message_id=$2
- shift 2
- ;;
- -k|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Parâmetros obrigatórios.
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $phone_number ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-p, --phone_number]"
- [[ $first_name ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-f, --first_name]"
-
- # Chama o método
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-F chat_id="$chat_id"} \
- ${phone_number:+-F phone_number="$phone_number"} \
- ${first_name:+-F first_name="$first_name"} \
- ${last_name:+-F last_name="$last_name"} \
- ${disable_notification:+-F disable_notification="$disable_notification"} \
- ${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
- ${reply_markup:+-F reply_markup="$reply_markup"})
-
- # Testa o retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- # Envia uma ação para bot.
- ShellBot.sendChatAction()
- {
- # Variáveis locais
- local chat_id action jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:a:' \
- --longoptions 'chat_id:,
- action:' \
- -- "$@")
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -a|--action)
- action=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Parâmetros obrigatórios.
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $action ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-a, --action]"
-
- # Chama o método
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${action:+-d action="$action"})
-
- # Testa o retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- # Utilize essa função para obter as fotos de um determinado usuário.
- ShellBot.getUserProfilePhotos()
- {
- # Variáveis locais
- local user_id offset limit ind last index max item total jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'u:o:l:' \
- --longoptions 'user_id:,
- offset:,
- limit:' \
- -- "$@")
-
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -u|--user_id)
- CheckArgType int "$1" "$2"
- user_id=$2
- shift 2
- ;;
- -o|--offset)
- CheckArgType int "$1" "$2"
- offset=$2
- shift 2
- ;;
- -l|--limit)
- CheckArgType int "$1" "$2"
- limit=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Parâmetros obrigatórios.
- [[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
-
- # Chama o método
- jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${user_id:+-d user_id="$user_id"} \
- ${offset:+-d offset="$offset"} \
- ${limit:+-d limit="$limit"})
-
- # Verifica se ocorreu erros durante a chamada do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- # Função para listar informações do arquivo especificado.
- ShellBot.getFile()
- {
- # Variáveis locais
- local file_id jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'f:' \
- --longoptions 'file_id:' \
- -- "$@")
-
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -f|--file_id)
- file_id=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Parâmetros obrigatórios.
- [[ $file_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-f, --file_id]"
-
- # Chama o método.
- jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.} ${file_id:+-d file_id="$file_id"})
-
- # Testa o retorno do método.
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- # Essa função kicka o usuário do chat ou canal. (somente administradores)
- ShellBot.kickChatMember()
- {
- # Variáveis locais
- local chat_id user_id until_date jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:u:d:' \
- --longoptions 'chat_id:,
- user_id:,
- until_date:' \
- -- "$@")
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- # Trata os parâmetros
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -u|--user_id)
- CheckArgType int "$1" "$2"
- user_id=$2
- shift 2
- ;;
- -d|--until_date)
- CheckArgType int "$1" "$2"
- until_date=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- # Parametros obrigatórios.
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
-
- # Chama o método
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${user_id:+-d user_id="$user_id"} \
- ${until_date:+-d until_date="$until_date"})
-
- # Verifica se ocorreu erros durante a chamada do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- # Utilize essa função para remove o bot do grupo ou canal.
- ShellBot.leaveChat()
- {
- # Variáveis locais
- local chat_id jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:' \
- --longoptions 'chat_id:' \
- -- "$@")
-
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"})
-
- # Verifica se ocorreu erros durante a chamada do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
-
- }
-
- ShellBot.unbanChatMember()
- {
- local chat_id user_id jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:u:' \
- --longoptions 'chat_id:,
- user_id:' \
- -- "$@")
-
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -u|--user_id)
- CheckArgType int "$1" "$2"
- user_id=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${user_id:+-d user_id="$user_id"})
-
- # Verifica se ocorreu erros durante a chamada do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
- }
-
- ShellBot.getChat()
- {
- # Variáveis locais
- local chat_id jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:' \
- --longoptions 'chat_id:' \
- -- "$@")
-
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
-
- jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"})
-
- # Verifica se ocorreu erros durante a chamada do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- ShellBot.getChatAdministrators()
- {
- local chat_id total key index jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:' \
- --longoptions 'chat_id:' \
- -- "$@")
-
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
-
- jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"})
-
- # Verifica se ocorreu erros durante a chamada do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- ShellBot.getChatMembersCount()
- {
- local chat_id jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:' \
- --longoptions 'chat_id:' \
- -- "$@")
-
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
-
- jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"})
-
- # Verifica se ocorreu erros durante a chamada do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
- }
-
- ShellBot.getChatMember()
- {
- # Variáveis locais
- local chat_id user_id jq_obj
-
- # Lê os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:u:' \
- --longoptions 'chat_id:,
- user_id:' \
- -- "$@")
-
-
- # Define os parâmetros posicionais
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -u|--user_id)
- CheckArgType int "$1" "$2"
- user_id=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
-
- jq_obj=$(curl $_CURL_OPT_ GET $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${user_id:+-d user_id="$user_id"})
-
- # Verifica se ocorreu erros durante a chamada do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
- }
-
- ShellBot.editMessageText()
- {
- local chat_id message_id inline_message_id text parse_mode disable_web_page_preview reply_markup jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:m:i:t:p:w:r:' \
- --longoptions 'chat_id:,
- message_id:,
- inline_message_id:,
- text:,
- parse_mode:,
- disable_web_page_preview:,
- reply_markup:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -m|--message_id)
- CheckArgType int "$1" "$2"
- message_id=$2
- shift 2
- ;;
- -i|--inline_message_id)
- CheckArgType int "$1" "$2"
- inline_message_id=$2
- shift 2
- ;;
- -t|--text)
- text=$(echo -e "$2")
- shift 2
- ;;
- -p|--parse_mode)
- parse_mode=$2
- shift 2
- ;;
- -w|--disable_web_page_preview)
- CheckArgType bool "$1" "$2"
- disable_web_page_preview=$2
- shift 2
- ;;
- -r|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $text ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --text]"
- [[ $inline_message_id ]] && unset chat_id message_id || {
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --message_id]"
- }
-
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${message_id:+-d message_id="$message_id"} \
- ${inline_message_id:+-d inline_message_id="$inline_message_id"} \
- ${text:+-d text="$text"} \
- ${parse_mode:+-d parse_mode="$parse_mode"} \
- ${disable_web_page_preview:+-d disable_web_page_preview="$disable_web_page_preview"} \
- ${reply_markup:+-d reply_markup="$reply_markup"})
-
- # Verifica se ocorreu erros durante a chamada do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
-
- }
-
- ShellBot.editMessageCaption()
- {
- local chat_id message_id inline_message_id
- local parse_mode caption reply_markup jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:m:i:t:p:r:' \
- --longoptions 'chat_id:,
- message_id:,
- inline_message_id:,
- caption:,
- parse_mode:,
- reply_markup:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -m|--message_id)
- CheckArgType int "$1" "$2"
- message_id=$2
- shift 2
- ;;
- -i|--inline_message_id)
- CheckArgType int "$1" "$2"
- inline_message_id=$2
- shift 2
- ;;
- -t|--caption)
- caption=$(echo -e "$2")
- shift 2
- ;;
- -p|--parse_mode)
- parse_mode=$2
- shift 2
- ;;
- -r|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --message_id]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${message_id:+-d message_id="$message_id"} \
- ${inline_message_id:+-d inline_message_id="$inline_message_id"} \
- ${caption:+-d caption="$caption"} \
- ${parse_mode:+-d parse_mode="$parse_mode"} \
- ${reply_markup:+-d reply_markup="$reply_markup"})
-
- # Verifica se ocorreu erros durante a chamada do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
-
- }
-
- ShellBot.editMessageReplyMarkup()
- {
- local chat_id message_id inline_message_id reply_markup jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:m:i:r:' \
- --longoptions 'chat_id:,
- message_id:,
- inline_message_id:,
- reply_markup:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -m|--message_id)
- CheckArgType int "$1" "$2"
- message_id=$2
- shift 2
- ;;
- -i|--inline_message_id)
- CheckArgType int "$1" "$2"
- inline_message_id=$2
- shift 2
- ;;
- -r|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $inline_message_id ]] && unset chat_id message_id || {
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --message_id]"
- }
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${message_id:+-d message_id="$message_id"} \
- ${inline_message_id:+-d inline_message_id="$inline_message_id"} \
- ${reply_markup:+-d reply_markup="$reply_markup"})
-
- # Verifica se ocorreu erros durante a chamada do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
-
- }
-
- ShellBot.deleteMessage()
- {
- local chat_id message_id jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:m:' \
- --longoptions 'chat_id:,
- message_id:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -m|--message_id)
- CheckArgType int "$1" "$2"
- message_id=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --message_id]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${message_id:+-d message_id="$message_id"})
-
- # Verifica se ocorreu erros durante a chamada do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
-
- }
-
- ShellBot.downloadFile()
- {
- local file_path dir ext file jq_obj
- local uri="https://api.telegram.org/file/bot$_TOKEN_"
- local param=$(getopt --name "$FUNCNAME" \
- --options 'f:d:' \
- --longoptions 'file_path:,
- dir:' \
- -- "$@")
-
- eval set -- "$param"
- while :
- do
- case $1 in
- -f|--file_path)
- [[ $2 =~ \.[^.]+$ ]]
- ext=$BASH_REMATCH
- file_path=$2
- shift 2
- ;;
- -d|--dir)
- [[ -d $2 ]] || MessageError API "$_ERR_DIR_NOT_FOUND_" "$1" "$2"
- [[ -w $2 ]] || MessageError API "$_ERR_DIR_WRITE_DENIED_" "$1" "$2"
- dir=${2%/}
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
- [[ $file_path ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-f, --file_path]"
- [[ $dir ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-d, --dir]"
- # Gera o nome do arquivo anexando o horário de criação.
- file=file$(date +%d%m%Y%H%M%S%N)${ext:-.dat}
- # Executa o download da uri especificada e retorna um objeto json
- # com as informações do processo. Se tiver sucesso o diretório de
- # destino é retornado, caso contrário uma mensagem de erro é apresentada.
- if wget -qO "$dir/$file" "$uri/$file_path"; then
- # Sucesso
- printf -v jq_obj '{"ok":true,"result":{"file_path":"%s"}}' "$dir/$file"
- else
- # Falha
- printf -v jq_obj '{"ok":false,"error_code":404,"description":"Bad Request: file not found"}'
- rm -f "$dir/$file" 2>/dev/null # Remove arquivo inválido.
- fi
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
- return $?
- }
- ShellBot.editMessageLiveLocation()
- {
- local chat_id message_id inline_message_id
- local latitude longitude reply_markup jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:m:i:l:g:r:' \
- --longoptions 'chat_id:,
- message_id:,
- inline_message_id:,
- latitude:,
- longitude:,
- reply_markup:' \
- -- "$@")
-
- eval set -- "$param"
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -m|--message_id)
- CheckArgType int "$1" "$2"
- message_id=$2
- shift 2
- ;;
- -i|--inline_message_id)
- CheckArgType int "$1" "$2"
- inline_message_id=$2
- shift 2
- ;;
- -l|--latitude)
- # Tipo: float
- CheckArgType float "$1" "$2"
- latitude=$2
- shift 2
- ;;
- -g|--longitude)
- # Tipo: float
- CheckArgType float "$1" "$2"
- longitude=$2
- shift 2
- ;;
- -r|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $inline_message_id ]] && unset chat_id message_id || {
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --message_id]"
- }
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${message_id:+-d message_id="$message_id"} \
- ${inline_message_id:+-d inline_message_id="$inline_message_id"} \
- ${latitude:+-d latitude="$latitude"} \
- ${longitude:+-d longitude="$longitude"} \
- ${reply_markup:+-d reply_markup="$reply_markup"})
-
- # Testa o retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
- }
- ShellBot.stopMessageLiveLocation()
- {
- local chat_id message_id inline_message_id reply_markup jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:m:i:r:' \
- --longoptions 'chat_id:,
- message_id:,
- inline_message_id:,
- reply_markup:' \
- -- "$@")
-
- eval set -- "$param"
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -m|--message_id)
- CheckArgType int "$1" "$2"
- message_id=$2
- shift 2
- ;;
- -i|--inline_message_id)
- CheckArgType int "$1" "$2"
- inline_message_id=$2
- shift 2
- ;;
- -r|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $inline_message_id ]] && unset chat_id message_id || {
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --message_id]"
- }
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${message_id:+-d message_id="$message_id"} \
- ${inline_message_id:+-d inline_message_id="$inline_message_id"} \
- ${reply_markup:+-d reply_markup="$reply_markup"})
-
- # Testa o retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
- }
- ShellBot.setChatStickerSet()
- {
- local chat_id sticker_set_name jq_obj
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:s:' \
- --longoptions 'chat_id:,
- sticker_set_name:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -s|--sticker_set_name)
- sticker_set_name=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $sticker_set_name ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --sticker_set_name]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${sticker_set_name:+-d sticker_set_name="$sticker_set_name"})
-
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
- }
- ShellBot.deleteChatStickerSet()
- {
- local chat_id jq_obj
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:' \
- --longoptions 'chat_id:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${chat_id:+-d chat_id="$chat_id"})
-
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- return $?
- }
-
- ShellBot.inputMedia()
- {
- local __type __input __media __caption __parse_mode __thumb __width
- local __height __duration __supports_streaming __performer __title
- local __param=$(getopt --name "$FUNCNAME" \
- --options 't:i:m:c:p:b:w:h:d:s:f:e:' \
- --longoptions 'type:,
- input:,
- media:,
- caption:,
- parse_mode:,
- thumb:,
- witdh:,
- height:,
- duration:,
- supports_streaming:,
- performer:,
- title:' \
- -- "$@")
-
-
- eval set -- "$__param"
-
- while :
- do
- case $1 in
- -t|--type)
- __type=$2
- shift 2
- ;;
- -i|--input)
- CheckArgType var "$1" "$2"
- __input=$2
- shift 2
- ;;
- -m|--media)
- CheckArgType file "$1" "$2"
- __media=$2
- shift 2
- ;;
- -c|--caption)
- __caption=$(echo -e "$2")
- shift 2
- ;;
- -p|--parse_mode)
- __parse_mode=$2
- shift 2
- ;;
- -b|--thumb)
- CheckArgType file "$1" "$2"
- __thumb=$2
- shift 2
- ;;
- -w|--width)
- CheckArgType int "$1" "$2"
- __width=$2
- shift 2
- ;;
- -h|--height)
- CheckArgType int "$1" "$2"
- __height=$2
- shift 2
- ;;
- -d|--duration)
- CheckArgType int "$1" "$2"
- __duration=$2
- shift 2
- ;;
- -s|--supports_streaming)
- CheckArgType bool "$1" "$2"
- __supports_streaming=$2
- shift 2
- ;;
- -f|--performer)
- __performer=$2
- shift 2
- ;;
- -e|--title)
- __title=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
- [[ $__type ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --type]"
- [[ $__input ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-i, --input]"
- [[ $__media ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --media]"
- local -n __input=$__input
-
- __input=${__input:+$__input,}{\"type\":\"$__type\",
- __input+=\"media\":\"$__media\"
- __input+=${__caption:+,\"caption\":\"$__caption\"}
- __input+=${__parse_mode:+,\"parse_mode\":\"$__parse_mode\"}
- __input+=${__thumb:+,\"thumb\":\"$__thumb\"}
- __input+=${__width:+,\"width\":$__width}
- __input+=${__height:+,\"height\":$__height}
- __input+=${__duration:+,\"duration\":$__duration}
- __input+=${__supports_streaming:+,\"supports_streaming\":$__supports_streaming}
- __input+=${__performer:+,\"performer\":\"$__performer\"}
- __input+=${__title:+,\"title\":\"$__title\"}}
- return $?
- }
- ShellBot.sendMediaGroup()
- {
- local chat_id media disable_notification reply_to_message_id jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:m:n:r:' \
- --longoptions 'chat_id:,
- media:,
- disable_notification:,
- reply_to_message_id:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -m|--media)
- media=[$2]
- shift 2
- ;;
- -n|--disable_notification)
- CheckArgType bool "$1" "$2"
- disable_notification=$2
- shift 2
- ;;
- -r|--reply_to_message_id)
- CheckArgType int "$1" "$2"
- reply_to_message_id=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $media ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --media]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-F chat_id="$chat_id"} \
- ${media:+-F media="$media"} \
- ${disable_notification:+-F disable_notification="$disable_notification"} \
- ${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"})
-
- # Retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
- ShellBot.editMessageMedia()
- {
- local chat_id message_id inline_message_id media reply_markup jq_obj
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:i:n:m:k:' \
- --longoptions 'chat_id:,
- message_id:,
- inline_message_id:,
- media:,
- reply_markup:' \
- -- "$@")
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -i|--message_id)
- CheckArgType int "$1" "$2"
- message_id=$2
- shift 2
- ;;
- -n|--inline_message_id)
- CheckArgType int "$1" "$2"
- inline_message_id=$2
- shift 2
- ;;
- -m|--media)
- media=$2
- shift 2
- ;;
- -k|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
- [[ $inline_message_id ]] || {
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $message_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-i, --message_id]"
- }
-
- [[ $media ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-m, --media]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-F chat_id="$chat_id"} \
- ${message_id:+-F message_id="$message_id"} \
- ${inline_message_id:+-F inline_message_id="$inline_message_id"} \
- ${media:+-F media="$media"} \
- ${reply_markup:+-F reply_markup="$reply_markup"})
-
- # Retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
- ShellBot.sendAnimation()
- {
- local chat_id animation duration width height
- local thumb caption parse_mode disable_notification
- local reply_to_message_id reply_markup jq_obj
-
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:a:d:w:h:b:o:p:n:r:k:' \
- --longoptions 'chat_id:,
- animation:,
- duration:,
- width:,
- height:,
- thumb:,
- caption:,
- parse_mode:,
- disable_notification:,
- reply_to_message_id:,
- reply_markup:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -c|--chat_id)
- chat_id=$2
- shift 2
- ;;
- -a|--animation)
- CheckArgType file "$1" "$2"
- animation=$2
- shift 2
- ;;
- -d|--duration)
- CheckArgType int "$1" "$2"
- duartion=$2
- shift 2
- ;;
- -w|--width)
- CheckArgType int "$1" "$2"
- width=$2
- shift 2
- ;;
- -h|--height)
- CheckArgType int "$1" "$2"
- height=$2
- shift 2
- ;;
- -b|--thumb)
- CheckArgType file "$1" "$2"
- thumb=$2
- shift 2
- ;;
- -o|--caption)
- caption=$(echo -e "$2")
- shift 2
- ;;
- -p|--parse_mode)
- parse_mode=$2
- shift 2
- ;;
- -n|--disable_notification)
- CheckArgType bool "$1" "$2"
- disable_notification=$2
- shift 2
- ;;
- -r|--reply_to_message_id)
- CheckArgType int "$1" "$2"
- reply_to_message_id=$2
- shift 2
- ;;
- -k|--reply_markup)
- reply_markup=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $animation ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-a, --animation]"
-
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-F chat_id="$chat_id"} \
- ${animation:+-F animation="$animation"} \
- ${duration:+-F duration="$duration"} \
- ${width:+-F width="$width"} \
- ${height:+-F height="$height"} \
- ${thumb:+-F thumb="$thumb"} \
- ${caption:+-F caption="$caption"} \
- ${parse_mode:+-F parse_mode="$parse_mode"} \
- ${disable_notification:+-F disable_notification="$disable_notification"} \
- ${reply_to_message_id:+-F reply_to_message_id="$reply_to_message_id"} \
- ${reply_markup:+-F reply_markup="$reply_markup"})
-
- # Retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- ShellBot.answerInlineQuery()
- {
- local inline_query_id results cache_time is_personal
- local next_offset switch_pm_text switch_pm_parameter
- local jq_obj
- local param=$(getopt --name "$FUNCNAME" \
- --options 'i:r:c:p:o:s:m:' \
- --longoptions 'inline_query_id:,
- results:,
- cache_time:,
- is_personal:,
- next_offset:,
- switch_pm_text:,
- switch_pm_parameter:' \
- -- "$@")
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -i|--inline_query_id) inline_query_id=$2; shift 2;;
- -r|--results) results=[$2]; shift 2;;
- -c|--cache_time) cache_time=$2; shift 2;;
- -p|--is_personal) cache_time=$2; shift 2;;
- -o|--next_offset) next_offset=$2; shift 2;;
- -s|--switch_pm_text) switch_pm_text=$2; shift 2;;
- -m|--switch_pm_parameter) switch_pm_parameter=$2; shift 2;;
- --) shift; break;;
- esac
- done
-
- [[ $inline_query_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-i, --inline_query_id]"
- [[ $results ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-r, --results]"
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${inline_query_id:+-F inline_query_id="$inline_query_id"} \
- ${results:+-F results="$results"} \
- ${cache_time:+-F cache_time="$cache_time"} \
- ${is_personal:+-F is_personal="$is_personal"} \
- ${next_offset:+-F next_offset="$next_offset"} \
- ${switch_pm_text:+-F switch_pm_text="$switch_pm_text"} \
- ${switch_pm_parameter:+-F switch_pm_parameter="$switch_pm_parameter"})
-
- # Retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
-
- }
-
- ShellBot.InlineQueryResult()
- {
- local __input __type __title __caption __reply_markup __parse_mode
- local __description __input_message_content __address __audio_duration
- local __audio_file_id __audio_url __document_file_id __document_url
- local __first_name __foursquare_id __foursquare_type __gif_duration
- local __gif_file_id __gif_height __gif_url __gif_width __hide_url
- local __last_name __latitude __live_period __longitude __mime_type
- local __mpeg4_duration __mpeg4_file_id __mpeg4_height __mpeg4_url
- local __mpeg4_width __performer __photo_file_id __photo_height
- local __photo_url __photo_width __sticker_file_id __vcard __phone_number
- local __thumb_height __thumb_url __thumb_width __url __id
- local __video_duration __video_file_id __video_height __video_url
- local __video_width __voice_duration __voice_file_id __voice_url
- local __param=$(getopt --name "$FUNCNAME" \
- --options 'i:t:l:c:k:p:r:d:m:b:s:x:w:v:z:y:q:a:f:u:g:o:n:h:j:e:
- N:R:D:A:X:G:C:Q:L:Y:E:V:H:Z:T:F:U:M:S:O:I:K:B:P:J:W:' \
- --longoptions 'input:,
- type:,
- title:,
- caption:,
- reply_markup:,
- parse_mode:,
- id:,
- description:,
- input_message_content:,
- address:,
- audio_duration:,
- audio_file_id:,
- audio_url:,
- document_file_id:,
- document_url:,
- first_name:,
- foursquare_id:,
- foursquare_type:,
- gif_duration:,
- gif_file_id:,
- gif_height:,
- gif_url:,
- gif_width:,
- hide_url:,
- last_name:,
- latitude:,
- live_period:,
- longitude:,
- mime_type:,
- mpeg4_duration:,
- mpeg4_file_id:,
- mpeg4_height:,
- mpeg4_url:,
- mpeg4_width:,
- performer:,
- photo_file_id:,
- photo_height:,
- photo_url:,
- photo_width:,
- sticker_file_id:,
- thumb_height:,
- thumb_url:,
- thumb_width:,
- url:,
- vcard:,
- video_duration:,
- video_file_id:,
- video_height:,
- video_url:,
- video_width:,
- voice_duration:,
- voice_file_id:,
- voice_url:,
- phone_number:' \
- -- "$@")
- eval set -- "$__param"
- while :
- do
- case $1 in
- -i|--input) CheckArgType var "$1" "$2"
- __input=$2; shift 2;;
- -t|--type) __type=$2; shift 2;;
- -l|--title) __title=$2; shift 2;;
- -c|--caption) __caption=$2; shift 2;;
- -k|--reply_markup) __reply_markup=$2; shift 2;;
- -p|--parse_mode) __parse_mode=$2; shift 2;;
- -r|--id) __id=$2; shift 2;;
- -d|--description) __description=$2; shift 2;;
- -m|--input_message_content) __input_message_content=$2; shift 2;;
- -b|--address) __address=$2; shift 2;;
- -s|--audio_duration) __audio_duration=$2; shift 2;;
- -x|--audio_file_id) __audio_file_id=$2; shift 2;;
- -w|--audio_url) __audio_url=$2; shift 2;;
- -v|--document_file_id) __document_file_id=$2; shift 2;;
- -z|--document_url) __document_url=$2; shift 2;;
- -y|--first_name) __first_name=$2; shift 2;;
- -q|--foursquare_id) __foursquare_id=$2; shift 2;;
- -a|--foursquare_type) __foursquare_type=$2; shift 2;;
- -f|--gif_duration) __gif_duration=$2; shift 2;;
- -u|--gif_file_id) __gif_file_id=$2 shift 2;;
- -g|--gif_height) __gif_height=$2; shift 2;;
- -o|--gif_url) __gif_url=$2; shift 2;;
- -n|--gif_width) __gif_width=$2; shift 2;;
- -h|--hide_url) __hide_url=$2; shift 2;;
- -j|--last_name) __last_name=$2; shift 2;;
- -e|--latitude) __latitude=$2; shift 2;;
- -N|--live_period) __live_period=$2; shift 2;;
- -R|--longitude) __longitude=$2; shift 2;;
- -D|--mime_type) __mime_type=$2; shift 2;;
- -A|--mpeg4_duration) __mpeg4_duration=$2; shift 2;;
- -X|--mpeg4_file_id) __mpeg4_file_id=$2; shift 2;;
- -G|--mpeg4_height) __mpeg4_height=$2; shift 2;;
- -C|--mpeg4_url) __mpeg4_url=$2; shift 2;;
- -Q|--mpeg4_width) __mpeg4_width=$2; shift 2;;
- -L|--performer) __performer=$2; shift 2;;
- -Y|--photo_file_id) __photo_file_id=$2; shift 2;;
- -E|--photo_height) __photo_height=$2; shift 2;;
- -V|--photo_url) __photo_url=$2; shift 2;;
- -H|--photo_width) __photo_width=$2; shift 2;;
- -Z|--sticker_file_id) __sticker_file_id=$2; shift 2;;
- -T|--thumb_height) __thumb_height=$2; shift 2;;
- -F|--thumb_url) __thumb_url=$2; shift 2;;
- -U|--thumb_width) __thumb_width=$2; shift 2;;
- -M|--url) __url=$2; shift 2;;
- -S|--vcard) __vcard=$2; shift 2;;
- -O|--video_duration) __video_duration=$2; shift 2;;
- -I|--video_file_id) __video_file_id=$2; shift 2;;
- -K|--video_height) __video_height=$2; shift 2;;
- -B|--video_url) __video_url=$2; shift 2;;
- -P|--video_width) __video_width=$2; shift 2;;
- -J|--voice_duration) __voice_duration=$2; shift 2;;
- -W|--voice_file_id) __voice_file_id=$2; shift 2;;
- --phone_number) __phone_number=$2; shift 2;;
- --voice_url) __voice_url=$2; shift 2;;
- --) shift; break;;
- esac
- done
- [[ $__input ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-i, --input]"
- local -n __input=$__input
- __input=${__input:+$__input,}{\"type\":\"$__type\"
- __input+=${__title:+,\"title\":\"$__title\"}
- __input+=${__caption:+,\"caption\":\"$__caption\"}
- __input+=${__reply_markup:+,\"reply_markup\":\"$__reply_markup\"}
- __input+=${__parse_mode:+,\"parse_mode\":\"$__parse_mode\"}
- __input+=${__id:+,\"id\":\"$__id\"}
- __input+=${__description:+,\"description\":\"$__description\"}
- __input+=${__input_message_content:+,\"input_message_content\":$__input_message_content}
- __input+=${__address:+,\"address\":\"$__address\"}
- __input+=${__audio_duration:+,\"audio_duration\":$__audio_duration}
- __input+=${__audio_file_id:+,\"audio_file_id\":\"$__audio_file_id\"}
- __input+=${__audio_url:+,\"audio_url\":\"$__audio_url\"}
- __input+=${__document_file_id:+,\"document_file_id\":\"$__document_file_id\"}
- __input+=${__document_url:+,\"document_url\":\"$__document_url\"}
- __input+=${__first_name:+,\"first_name\":\"$__first_name\"}
- __input+=${__foursquare_id:+,\"foursquare_id\":\"$__foursquare_id\"}
- __input+=${__foursquare_type:+,\"foursquare_type\":\"$__foursquare_type\"}
- __input+=${__gif_duration:+,\"gif_duration\":$__gif_duration}
- __input+=${__gif_file_id:+,\"gif_file_id\":\"$__gif_file_id\"}
- __input+=${__gif_height:+,\"gif_height\":$__gif_height}
- __input+=${__gif_url:+,\"gif_url\":\"$__gif_url\"}
- __input+=${__gif_width:+,\"gif_width\":$__gif_width}
- __input+=${__hide_url:+,\"hide_url\":\"$__hide_url\"}
- __input+=${__last_name:+,\"last_name\":\"$__last_name\"}
- __input+=${__latitude:+,\"latitude\":$__latitude}
- __input+=${__live_period:+,\"live_period\":$__live_period}
- __input+=${__longitude:+,\"longitude\":$__longitude}
- __input+=${__mime_type:+,\"mime_type\":\"$__mime_type\"}
- __input+=${__mpeg4_duration:+,\"mpeg4_duration\":$__mpeg4_duration}
- __input+=${__mpeg4_file_id:+,\"mpeg4_file_id\":\"$__mpeg4_file_id\"}
- __input+=${__mpeg4_height:+,\"mpeg4_height\":$__mpeg4_height}
- __input+=${__mpeg4_url:+,\"mpeg4_url\":\"$__mpeg4_url\"}
- __input+=${__mpeg4_width:+,\"mpeg4_width\":$__mpeg4_width}
- __input+=${__performer:+,\"performer\":\"$__performer\"}
- __input+=${__photo_file_id:+,\"photo_file_id\":\"$__photo_file_id\"}
- __input+=${__photo_height:+,\"photo_height\":$__photo_height}
- __input+=${__photo_url:+,\"photo_url\":\"$__photo_url\"}
- __input+=${__photo_width:+,\"photo_width\":$__photo_width}
- __input+=${__sticker_file_id:+,\"sticker_file_id\":\"$__sticker_file_id\"}
- __input+=${__thumb_height:+,\"thumb_height\":$__thumb_height}
- __input+=${__thumb_url:+,\"thumb_url\":\"$__thumb_url\"}
- __input+=${__thumb_width:+,\"thumb_width\":$__thumb_width}
- __input+=${__url:+,\"url\":\"$__url\"}
- __input+=${__vcard:+,\"vcard\":\"$__vcard\"}
- __input+=${__video_duration:+,\"video_duration\":$__video_duration}
- __input+=${__video_file_id:+,\"video_file_id\":\"$__video_file_id\"}
- __input+=${__video_height:+,\"video_height\":$__video_height}
- __input+=${__video_url:+,\"video_url\":\"$__video_url\"}
- __input+=${__video_width:+,\"video_width\":$__video_width}
- __input+=${__voice_duration:+,\"voice_duration\":$__voice_duration}
- __input+=${__voice_file_id:+,\"voice_file_id\":\"$__voice_file_id\"}
- __input+=${__voice_url:+,\"voice_url\":\"$__voice_url\"}
- __input+=${__phone_number:+,\"phone_number\":\"$__phone_number\"}}
- return $?
- }
- ShellBot.InputMessageContent()
- {
- local message_text parse_mode disable_web_page_preview json
- local latitude longitude live_period title address foursquare_id
- local foursquare_type phone_number first_name last_name vcard
- local param=$(getopt --name "$FUNCNAME" \
- --options 't:p:w:l:v:e:a:f:q:n:m:s:d:' \
- --longoptions 'message_text:,
- parse_mode:,
- disable_web_page_preview:,
- latitude:,
- longitude:,
- live_period:,
- title:,
- address:,
- foursquare_id:,
- foursquare_type:,
- phone_number:,
- first_name:,
- last_name:,
- vcard:' \
- -- "$@")
- eval set -- "$param"
- while :
- do
- case $1 in
- -t|--message_text) message_text=$(echo -e "$2"); shift 2;;
- -p|--parse_mode) parse_mode=$2; shift 2;;
- -w|--disable_web_page_preview) disable_web_page_preview=$2; shift 2;;
- -l|--latitude) latitude=$2; shift 2;;
- -g|--longitude) longitude=$2; shift 2;;
- -v|--live_period) live_period=$2; shift 2;;
- -e|--title) title=$2; shift 2;;
- -a|--address) address=$2; shift 2;;
- -f|--foursquare_id) foursquare_id=$2; shift 2;;
- -q|--foursquare_type) foursquare_type=$2; shift 2;;
- -n|--phone_number) phone_number=$2; shift 2;;
- -m|--first_name) first_name=$2; shift 2;;
- -s|--last_name) last_name=$2; shift 2;;
- -d|--vcard) vcard=$2; shift 2;;
- --) shift; break;;
- esac
- done
-
- json=${message_text:+\"message_text\":\"$message_text\"}
- json+=${parse_mode:+,\"parse_mode\":\"$parse_mode\"}
- json+=${disable_web_page_preview:+,\"disable_web_page_preview\":$disable_web_page_preview}
- json+=${latitude:+,\"latitude\":$latitude}
- json+=${longitude:+,\"longtitude\":$longitude}
- json+=${live_period:+,\"live_period\":$live_period}
- json+=${title:+,\"title\":\"$title\"}
- json+=${address:+,\"address\":\"$address\"}
- json+=${foursquare_id:+,\"foursquare_id\":\"$foursquare_id\"}
- json+=${foursquare_type:+,\"foursquare_type\":\"$foursquare_type\"}
- json+=${phone_number:+,\"phone_number\":\"$phone_number\"}
- json+=${first_name:+,\"first_name\":\"$first_name\"}
- json+=${last_name:+,\"last_name\":\"$last_name\"}
- json+=${vcard:+,\"vcard\":\"$vcard\"}
-
- echo "{${json#,}}"
- return $?
- }
- ShellBot.ChatPermissions()
- {
- local can_send_messages can_send_media_messages can_send_polls
- local can_send_other_messages can_add_web_page_previews json
- local can_change_info can_invite_users can_pin_messages
- local param=$(getopt --name "$FUNCNAME" \
- --options 'm:d:l:o:w:c:i:p:' \
- --longoptions 'can_send_messages:,
- can_send_media_messages:,
- can_send_polls:,
- can_send_other_messages:,
- can_add_web_page_previews:,
- can_change_info:,
- can_invite_users:,
- can_pin_messages:' \
- -- "$@")
- eval set -- "$param"
- while :
- do
- case $1 in
- -m|--can_send_messages) can_send_messages=$2;;
- -d|--can_send_media_messages) can_send_media_messages=$2;;
- -l|--can_send_polls) can_send_polls=$2;;
- -o|--can_send_other_messages) can_send_other_messages=$2;;
- -w|--can_add_web_page_previews) can_add_web_page_previews=$2;;
- -c|--can_change_info) can_change_info=$2;;
- -i|--can_invite_users) can_invite_users=$2;;
- -p|--can_pin_messages) can_pin_messages=$2;;
- --) shift; break;;
- esac
- shift 2
- done
-
- json=${can_send_messages:+\"can_send_messages\":$can_send_messages,}
- json+=${can_send_media_messages:+\"can_send_media_messages\":$can_send_media_messages,}
- json+=${can_send_polls:+\"can_send_polls\":$can_send_polls,}
- json+=${can_send_other_messages:+\"can_send_other_messages\":$can_send_other_messages,}
- json+=${can_add_web_page_previews:+\"can_add_web_page_previews\":$can_add_web_page_previews,}
- json+=${can_change_info:+\"can_change_info\":$can_change_info,}
- json+=${can_invite_users:+\"can_invite_users\":$can_invite_users,}
- json+=${can_pin_messages:+\"can_pin_messages\":$can_pin_messages,}
-
- # Retorna o objeto de permissões.
- echo "{${json%,}}"
- # Status
- return $?
- }
- ShellBot.setChatPermissions()
- {
- local chat_id permissions jq_obj
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:p:' \
- --longoptions 'chat_id:,permissions:' \
- -- "$@")
- eval set -- "$param"
- while :
- do
- case $1 in
- -c|--chat_id) chat_id=$2;;
- -p|--permissions) permissions=$2;;
- --) shift; break;;
- esac
- shift 2
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $permissions ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-p, --permissions]"
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${permissions:+-d permissions="$permissions"})
-
- # Retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
-
- ShellBot.setChatAdministratorCustomTitle()
- {
- local chat_id user_id custom_title jq_obj
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:u:t:' \
- --longoptions 'chat_id:,
- user_id:,
- custom_title:' \
- -- "$@")
- eval set -- "$param"
- while :
- do
- case $1 in
- -c|--chat_id) chat_id=$2;;
- -u|--user_id) user_id=$2;;
- -t|--custom_title) custom_title=$2;;
- --) shift; break;;
- esac
- shift 2
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $user_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --user_id]"
- [[ $custom_title ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --custom_title]"
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${user_id:+-d user_id="$user_id"} \
- ${custom_tilte:+-d custom_title="$custom_title"})
-
- # Retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
- ShellBot.sendPoll()
- {
- local chat_id question options is_anonymous reply_markup
- local type allows_multiple_answers correct_option_id jq_obj
- local is_closed disable_notification reply_to_message_id
- local explanation explanation_parse_mode open_period close_date
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:q:o:a:k:t:m:i:x:z:p:d:l:n:r:' \
- --longoptions 'chat_id:,
- question:,
- options:,
- is_anonymous:,
- reply_markup:,
- type:,
- allows_multiple_answers:,
- correct_option_id:,
- explanation:,
- explanation_parse_mode:,
- open_period:,
- close_date:,
- is_closed:,
- disable_notification:,
- reply_to_message_id:' \
- -- "$@")
- eval set -- "$param"
- while :
- do
- case $1 in
- -c|--chat_id) chat_id=$2;;
- -q|--question) question=$(echo -e "$2");;
- -o|--options) options=$(echo -e "$2");;
- -a|--is_anonymous) is_anonymous=$2;;
- -k|--reply_markup) reply_markup=$2;;
- -t|--type) type=$2;;
- -m|--allows_multiple_answers) allows_multiple_answers=$2;;
- -i|--correct_option_id) correct_option_id=$2;;
- -x|--explanation) explanation=$2;;
- -z|--explanation_parse_mode) explanation_parse_mode=$2;;
- -p|--open_period) open_period=$2;;
- -d|--close_date) close_date=$2;;
- -l|--is_closed) is_closed=$2;;
- -n|--disable_notification) disable_notification=$2;;
- -r|--reply_to_message_id) reply_to_message_id=$2;;
- --) shift; break;;
- esac
- shift 2
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- [[ $question ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-q, --question]"
- [[ $options ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-o, --options]"
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${question:+-d question="$question"} \
- ${options:+-d options="$options"} \
- ${is_anonymous:+-d is_anonymous="$is_anonymous"} \
- ${reply_markup:+-d reply_markup="$reply_markup"} \
- ${type:+-d type="$type"} \
- ${allows_multiple_answers:+-d allows_multiple_answers="$allows_multiple_answers"} \
- ${correct_option_id:+-d correct_option_id="$correct_option_id"} \
- ${explanation:+-d explanation="$explanation"} \
- ${explanation_parse_mode:+-d explanation_parse_mode="$explanation_parse_mode"} \
- ${open_period:+-d open_period="$open_period"} \
- ${close_date:+-d close_date="$close_date"} \
- ${is_closed:+-d is_closed="$is_closed"} \
- ${disable_notification:+-d disable_notification="$disable_notification"} \
- ${reply_to_message_id:+-d reply_to_message_id="$reply_to_message_id"})
-
- # Retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
- ShellBot.KeyboardButtonPollType()
- {
- local type
- local param=$(getopt --name "$FUNCNAME" --options 't:' --longoptions 'type:' -- "$@")
- eval set -- "$param"
- while :
- do
- case $1 in
- -t|--type) type=$2;;
- --) shift; break;;
- esac
- shift 2
- done
- [[ $type ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-t, --type]"
- printf '{"type": "%s"}' "$type"
- return 0
- }
-
- ShellBot.sendDice()
- {
- local chat_id disable_notification reply_to_message_id
- local reply_markup jq_obj emoji
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:e:n:r:k:' \
- --longoptions 'chat_id:,
- emoji:,
- disable_notification:,
- reply_to_message_id:,
- reply_markup:' \
- -- "$@")
- eval set -- "$param"
- while :
- do
- case $1 in
- -c|--chat_id) chat_id=$2;;
- -e|--emoji) emoji=$2;;
- -n|--disable_notification) disable_notification=$2;;
- -r|--reply_to_message_id) reply_to_message_id=$2;;
- -k|--reply_markup) reply_markup=$2;;
- --) shift; break;;
- esac
- shift 2
- done
-
- [[ $chat_id ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --chat_id]"
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${chat_id:+-d chat_id="$chat_id"} \
- ${emoji:+-d emoji="$emoji"} \
- ${disable_notification:+-d disable_notification="$disable_notification"} \
- ${reply_to_message_id:+-d reply_to_message_id="$reply_to_message_id"} \
- ${reply_markup:+-d reply_markup="$reply_markup"})
- # Retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
- ShellBot.getMyCommands()
- {
- local jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.})
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
- return $?
- }
- ShellBot.setMyCommands()
- {
- local jq_obj commands
- local param=$(getopt --name "$FUNCNAME" \
- --options 'c:' \
- --longoptions 'commands:' \
- -- "$@")
- eval set -- "$param"
- while :
- do
- case $1 in
- -c|--commands) commands=$2;;
- --) break;;
- esac
- shift 2
- done
-
- [[ $commands ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --commands]"
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} ${commands:+-d commands="$commands"})
- # Retorno do método
- MethodReturn "$jq_obj" || MessageError TG "$jq_obj"
-
- # Status
- return $?
- }
- ShellBot.BotCommand()
- {
- local __command __description __list
-
- local __param=$(getopt --name "$FUNCNAME" \
- --options 'l:c:d:' \
- --longoptions 'list:,
- command:,
- description:' \
- -- "$@")
- eval set -- "$__param"
- while :
- do
- case $1 in
- -l|--list) CheckArgType var "$1" "$2"; __list=$2;;
- -c|--command) __command=$2;;
- -d|--description) __description=$2;;
- --) break;;
- esac
- shift 2
- done
- [[ $__list ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-l, --list]"
- [[ $__command ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-c, --command]"
- [[ $__description ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-d, --description]"
- printf -v $__list '%s' "${!__list#[}"
- printf -v $__list '%s' "${!__list%]}"
-
- printf -v $__list '%s{"command": "%s", "description": "%s"}' \
- "${!__list:+${!__list},}" \
- "$__command" \
- "$__description"
- printf -v $__list '%s' "[${!__list}]"
- return $?
- }
- ShellBot.setMessageRules()
- {
- local action command user_id username chat_id
- local chat_type time date language message_id
- local is_bot text entities_type file_type name
- local query_data query_id query_text send_message
- local chat_member mime_type num_args exec rule
- local action_args weekday user_status chat_name
- local message_status reply_message parse_mode
- local forward_message reply_markup continue i
- local author_signature bot_action auth_file
- local param=$(getopt --name "$FUNCNAME" \
- --options 's:a:z:c:i:u:h:v:y:l:m:b:t:n:f:p:q:r:g:o:e:d:w:j:x:R:S:F:K:P:E:A:C:B:T:' \
- --longoptions 'name:,
- action:,
- action_args:,
- command:,
- user_id:,
- username:,
- chat_id:,
- chat_name:,
- chat_type:,
- language_code:,
- message_id:,
- is_bot:,
- text:,
- entitie_type:,
- file_type:,
- mime_type:,
- query_data:,
- query_id:,
- chat_member:,
- num_args:,
- time:,
- date:,
- weekday:,
- user_status:,
- message_status:,
- exec:,
- auth_file:,
- bot_reply_message:,
- bot_send_message:,
- bot_forward_message:,
- bot_reply_markup:,
- bot_parse_mode:,
- bot_action:,
- author_signature:,
- continue' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -s|--name)
- CheckArgType flag "$1" "$2"
- name=$2
- shift 2
- ;;
- -a|--action)
- CheckArgType func "$1" "$2"
- action=$2
- shift 2
- ;;
- -z|--action_args)
- action_args=$2
- shift 2
- ;;
- -c|--command)
- CheckArgType cmd "$1" "$2"
- command=$2
- shift 2
- ;;
- -i|--user_id)
- user_id=${user_id:+$user_id|}${2//[,$'\n']/|}
- shift 2
- ;;
- -u|--username)
- username=${username:+$username|}${2//[,$'\n']/|}
- shift 2
- ;;
- -h|--chat_id)
- chat_id=${chat_id:+$chat_id|}${2//[,$'\n']/|}
- shift 2
- ;;
- -v|--chat_name)
- chat_name=${chat_name:+$chat_name|}${2//[,$'\n']/|}
- shift 2
- ;;
- -y|--chat_type)
- chat_type=${chat_type:+$chat_type|}${2//[,$'\n']/|}
- shift 2
- ;;
- -e|--time)
- time=${time:+$time|}${2//[,$'\n']/|}
- shift 2
- ;;
- -d|--date)
- date=${date:+$date|}${2//[,$'\n']/|}
- shift 2
- ;;
- -l|--laguage_code)
- language=${language:+$language|}${2//[,$'\n']/|}
- shift 2
- ;;
- -m|--message_id)
- message_id=${message_id:+$message_id|}${2//[,$'\n']/|}
- shift 2
- ;;
- -b|--is_bot)
- is_bot=${is_bot:+$is_bot|}${2//[,$'\n']/|}
- shift 2
- ;;
- -t|--text)
- text=${2//$'\n'/|}
- shift 2
- ;;
- -n|--entitie_type)
- entities_type=${entities_type:+$entities_type|}${2//[,$'\n']/|}
- shift 2
- ;;
- -f|--file_type)
- file_type=${file_type:+$file_type|}${2//[,$'\n']/|}
- shift 2
- ;;
- -p|--mime_type)
- mime_type=${mime_type:+$mime_type|}${2//[,$'\n']/|}
- shift 2
- ;;
- -q|--query_data)
- query_data=${query_data:+$query_data|}${2//[,$'\n']/|}
- shift 2
- ;;
- -r|--query_id)
- query_id=${query_id:+$query_id|}${2//[,$'\n']/|}
- shift 2
- ;;
- -g|--chat_member)
- chat_member=${chat_member:+$chat_member|}${2//[,$'\n']/|}
- shift 2
- ;;
- -o|--num_args)
- num_args=${num_args:+$num_args|}${2//[,$'\n']/|}
- shift 2
- ;;
- -w|--weekday)
- weekday=${weekday:+$weekday|}${2//[,$'\n']/|}
- shift 2
- ;;
- -j|--user_status)
- user_status=${user_status:+$user_status|}${2//[,$'\n']/|}
- shift 2
- ;;
- -x|--message_status)
- message_status=${message_status:+$message_status|}${2//[,$'\n']/|}
- shift 2
- ;;
- -T|--auth_file)
- auth_file=${auth_file:+$auth_file|}${2//[,$'\n']/|}
- shift 2
- ;;
- -R|--bot_reply_message)
- reply_message=$2
- shift 2
- ;;
- -S|--bot_send_message)
- send_message=$2
- shift 2
- ;;
- -F|--bot_forward_message)
- forward_message=${forward_message:+$forward_message|}${2//[,$'\n']/|}
- shift 2
- ;;
- -K|--bot_reply_markup)
- reply_markup=$2
- shift 2
- ;;
- -P|--bot_parse_mode)
- parse_mode=$2
- shift 2
- ;;
- -B|--bot_action)
- bot_action=$2
- shift 2
- ;;
- -E|--exec)
- exec=$2
- shift 2
- ;;
- -A|--author_signature)
- author_signature=${author_signature:+$author_signature|}${2//[,$'\n']/|}
- shift 2
- ;;
- -C|--continue)
- continue=true
- shift
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $name ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-s, --name]"
- [[ ${_BOT_RULES_[$name]} ]] && MessageError API "$_ERR_RULE_ALREADY_EXISTS_" "[-s, --name]" "$name"
- i=${_BOT_RULES_INDEX_:=0}
- _BOT_RULES_[$i:source]=${BASH_SOURCE[1]##*/}
- _BOT_RULES_[$i:line]=${BASH_LINENO}
- _BOT_RULES_[$i:name]=${name}
- _BOT_RULES_[$i:action]=${action}
- _BOT_RULES_[$i:action_args]=${action_args}
- _BOT_RULES_[$i:user_id]=${user_id}
- _BOT_RULES_[$i:username]=${username}
- _BOT_RULES_[$i:chat_id]=${chat_id}
- _BOT_RULES_[$i:chat_name]=${chat_name}
- _BOT_RULES_[$i:chat_type]=${chat_type}
- _BOT_RULES_[$i:language_code]=${language}
- _BOT_RULES_[$i:message_id]=${message_id}
- _BOT_RULES_[$i:is_bot]=${is_bot}
- _BOT_RULES_[$i:command]=${command}
- _BOT_RULES_[$i:text]=${text}
- _BOT_RULES_[$i:entities_type]=${entities_type}
- _BOT_RULES_[$i:file_type]=${file_type}
- _BOT_RULES_[$i:mime_type]=${mime_type}
- _BOT_RULES_[$i:query_data]=${query_data}
- _BOT_RULES_[$i:query_id]=${query_id}
- _BOT_RULES_[$i:chat_member]=${chat_member}
- _BOT_RULES_[$i:num_args]=${num_args}
- _BOT_RULES_[$i:time]=${time}
- _BOT_RULES_[$i:date]=${date}
- _BOT_RULES_[$i:weekday]=${weekday}
- _BOT_RULES_[$i:user_status]=${user_status}
- _BOT_RULES_[$i:message_status]=${message_status}
- _BOT_RULES_[$i:author_signature]=${author_signature}
- _BOT_RULES_[$i:auth_file]=${auth_file}
- _BOT_RULES_[$i:bot_reply_message]=${reply_message}
- _BOT_RULES_[$i:bot_send_message]=${send_message}
- _BOT_RULES_[$i:bot_forward_message]=${forward_message}
- _BOT_RULES_[$i:bot_reply_markup]=${reply_markup}
- _BOT_RULES_[$i:bot_parse_mode]=${parse_mode}
- _BOT_RULES_[$i:bot_action]=${bot_action}
- _BOT_RULES_[$i:exec]=${exec}
- _BOT_RULES_[$i:continue]=${continue}
- _BOT_RULES_[$name]=true
- # Incrementa índice.
- ((_BOT_RULES_INDEX_++))
- return $?
- }
-
- ShellBot.manageRules()
- {
- local uid rule botcmd err tm stime etime ctime mime_type weekday
- local dt sdate edate cdate mem ent type args status out fwid
- local stdout i re match file user line
- local u_message_text u_message_id u_message_from_is_bot
- local u_message_from_id u_message_from_username msgstatus argpos
- local u_message_from_language_code u_message_chat_id message_status
- local u_message_chat_type u_message_date u_message_entities_type
- local u_message_mime_type u_message_author_signature
- local param=$(getopt --name "$FUNCNAME" \
- --options 'u:' \
- --longoptions 'update_id:' \
- -- "$@")
-
- eval set -- "$param"
-
- while :
- do
- case $1 in
- -u|--update_id)
- CheckArgType int "$1" "$2"
- uid=$2
- shift 2
- ;;
- --)
- shift
- break
- ;;
- esac
- done
-
- [[ $uid ]] || MessageError API "$_ERR_PARAM_REQUIRED_" "[-u, --update_id]"
- # Regras (somente-leitura)
- readonly _BOT_RULES_ _BOT_RULES_INDEX_
-
- [[ ${u_message_text:=${message_text[$uid]}} ]] ||
- [[ ${u_message_text:=${edited_message_text[$uid]}} ]] ||
- [[ ${u_message_text:=${callback_query_message_text[$uid]}} ]] ||
- [[ ${u_message_text:=${inline_query_query[$uid]}} ]] ||
- [[ ${u_message_text:=${chosen_inline_result_query[$uid]}} ]] ||
- [[ ${u_message_text:=${channel_post_text[$uid]}} ]] ||
- [[ ${u_message_text:=${edited_channel_post_text[$uid]}} ]]
- [[ ${u_message_id:=${message_message_id[$uid]}} ]] ||
- [[ ${u_message_id:=${edited_message_message_id[$uid]}} ]] ||
- [[ ${u_message_id:=${callback_query_message_message_id[$uid]}} ]] ||
- [[ ${u_message_id:=${inline_query_id[$uid]}} ]] ||
- [[ ${u_message_id:=${chosen_inline_result_result_id[$uid]}} ]] ||
- [[ ${u_message_id:=${channel_post_message_id[$uid]}} ]] ||
- [[ ${u_message_id:=${edited_channel_post_message_id[$uid]}} ]] ||
- [[ ${u_message_id:=${poll_answer_poll_id[$uid]}} ]]
- [[ ${u_message_from_is_bot:=${message_from_is_bot[$uid]}} ]] ||
- [[ ${u_message_from_is_bot:=${edited_message_from_is_bot[$uid]}} ]] ||
- [[ ${u_message_from_is_bot:=${callback_query_from_is_bot[$uid]}} ]] ||
- [[ ${u_message_from_is_bot:=${inline_query_from_is_bot[$uid]}} ]] ||
- [[ ${u_message_from_is_bot:=${chosen_inline_result_from_is_bot[$uid]}} ]] ||
- [[ ${u_message_from_is_bot:=${poll_answer_user_is_bot[$uid]}} ]]
- [[ ${u_message_from_id:=${message_from_id[$uid]}} ]] ||
- [[ ${u_message_from_id:=${edited_message_from_id[$uid]}} ]] ||
- [[ ${u_message_from_id:=${callback_query_from_id[$uid]}} ]] ||
- [[ ${u_message_from_id:=${inline_query_from_id[$uid]}} ]] ||
- [[ ${u_message_from_id:=${chosen_inline_result_from_id[$uid]}} ]] ||
- [[ ${u_message_from_id:=${poll_answer_user_id[$uid]}} ]]
- [[ ${u_message_from_username:=${message_from_username[$uid]}} ]] ||
- [[ ${u_message_from_username:=${edited_message_from_username[$uid]}} ]] ||
- [[ ${u_message_from_username:=${callback_query_from_username[$uid]}} ]] ||
- [[ ${u_message_from_username:=${inline_query_from_username[$uid]}} ]] ||
- [[ ${u_message_from_username:=${chosen_inline_result_from_username[$uid]}} ]] ||
- [[ ${u_message_from_username:=${poll_answer_user_username[$uid]}} ]]
- [[ ${u_message_from_language_code:=${message_from_language_code[$uid]}} ]] ||
- [[ ${u_message_from_language_code:=${edited_message_from_language_code[$uid]}} ]] ||
- [[ ${u_message_from_language_code:=${callback_query_from_language_code[$uid]}} ]] ||
- [[ ${u_message_from_language_code:=${inline_query_from_language_code[$uid]}} ]] ||
- [[ ${u_message_from_language_code:=${chosen_inline_result_from_language_code[$uid]}} ]]
- [[ ${u_message_chat_id:=${message_chat_id[$uid]}} ]] ||
- [[ ${u_message_chat_id:=${edited_message_chat_id[$uid]}} ]] ||
- [[ ${u_message_chat_id:=${callback_query_message_chat_id[$uid]}} ]] ||
- [[ ${u_message_chat_id:=${channel_post_chat_id[$uid]}} ]] ||
- [[ ${u_message_chat_id:=${edited_channel_post_chat_id[$uid]}} ]]
- [[ ${u_message_chat_username:=${message_chat_username[$uid]}} ]] ||
- [[ ${u_message_chat_username:=${edited_message_chat_username[$uid]}} ]] ||
- [[ ${u_message_chat_username:=${callback_query_message_chat_username[$uid]}} ]]
- [[ ${u_message_chat_type:=${message_chat_type[$uid]}} ]] ||
- [[ ${u_message_chat_type:=${edited_message_chat_type[$uid]}} ]] ||
- [[ ${u_message_chat_type:=${callback_query_message_chat_type[$uid]}} ]] ||
- [[ ${u_message_chat_type:=${channel_post_chat_type[$uid]}} ]] ||
- [[ ${u_message_chat_type:=${edited_channel_post_chat_type[$uid]}} ]]
- [[ ${u_message_date:=${message_date[$uid]}} ]] ||
- [[ ${u_message_date:=${edited_message_edit_date[$uid]}} ]] ||
- [[ ${u_message_date:=${callback_query_message_date[$uid]}} ]] ||
- [[ ${u_message_date:=${channel_post_date[$uid]}} ]] ||
- [[ ${u_message_date:=${edited_channel_post_date[$uid]}} ]]
- [[ ${u_message_entities_type:=${message_entities_type[$uid]}} ]] ||
- [[ ${u_message_entities_type:=${edited_message_entities_type[$uid]}} ]] ||
- [[ ${u_message_entities_type:=${callback_query_message_entities_type[$uid]}} ]] ||
- [[ ${u_message_entities_type:=${channel_post_entities_type[$uid]}} ]] ||
- [[ ${u_message_entities_type:=${edited_channel_post_entities_type[$uid]}} ]]
- [[ ${u_message_mime_type:=${message_document_mime_type[$uid]}} ]] ||
- [[ ${u_message_mime_type:=${message_video_mime_type[$uid]}} ]] ||
- [[ ${u_message_mime_type:=${message_audio_mime_type[$uid]}} ]] ||
- [[ ${u_message_mime_type:=${message_voice_mime_type[$uid]}} ]] ||
- [[ ${u_message_mime_type:=${channel_post_document_mime_type[$uid]}} ]]
- [[ ${u_message_author_signature:=${channel_post_author_signature[$uid]}} ]] ||
- [[ ${u_message_author_signature:=${edited_channel_post_author_signature[$uid]}} ]]
- # Regras
- for ((i=0; i < _BOT_RULES_INDEX_; i++)); do
-
- IFS=' ' read -ra args <<< $u_message_text
-
- [[ ! ${_BOT_RULES_[$i:num_args]} || ${#args[@]} == @(${_BOT_RULES_[$i:num_args]}) ]] &&
- [[ ! ${_BOT_RULES_[$i:command]} || ${u_message_text%% *} == @(${_BOT_RULES_[$i:command]})?(@${_BOT_INFO_[3]}) ]] &&
- [[ ! ${_BOT_RULES_[$i:message_id]} || $u_message_id == @(${_BOT_RULES_[$i:message_id]}) ]] &&
- [[ ! ${_BOT_RULES_[$i:is_bot]} || $u_message_from_is_bot == @(${_BOT_RULES_[$i:is_bot]}) ]] &&
- [[ ! ${_BOT_RULES_[$i:user_id]} || $u_message_from_id == @(${_BOT_RULES_[$i:user_id]}) ]] &&
- [[ ! ${_BOT_RULES_[$i:username]} || $u_message_from_username == @(${_BOT_RULES_[$i:username]}) ]] &&
- [[ ! ${_BOT_RULES_[$i:language]} || $u_message_from_language_code == @(${_BOT_RULES_[$i:language]}) ]] &&
- [[ ! ${_BOT_RULES_[$i:chat_id]} || $u_message_chat_id == @(${_BOT_RULES_[$i:chat_id]}) ]] &&
- [[ ! ${_BOT_RULES_[$i:chat_name]} || $u_message_chat_username == @(${_BOT_RULES_[$i:chat_name]}) ]] &&
- [[ ! ${_BOT_RULES_[$i:chat_type]} || $u_message_chat_type == @(${_BOT_RULES_[$i:chat_type]}) ]] &&
- [[ ! ${_BOT_RULES_[$i:author_signature]} || $u_message_author_signature == @(${_BOT_RULES_[$i:author_signature]}) ]] &&
- [[ ! ${_BOT_RULES_[$i:mime_type]} || $u_message_mime_type == @(${_BOT_RULES_[$i:mime_type]}) ]] &&
- [[ ! ${_BOT_RULES_[$i:query_id]} || ${callback_query_id[$uid]} == @(${_BOT_RULES_[$i:query_id]}) ]] &&
- [[ ! ${_BOT_RULES_[$i:query_data]} || ${callback_query_data[$uid]} == @(${_BOT_RULES_[$i:query_data]}) ]] &&
- [[ ! ${_BOT_RULES_[$i:weekday]} || $(printf '%(%u)T' $u_message_date) == @(${_BOT_RULES_[$i:weekday]}) ]] &&
- [[ ! ${_BOT_RULES_[$i:text]} || $u_message_text =~ ${_BOT_RULES_[$i:text]} ]] || continue
- # Extrai os arquivos do conjunto negado. Caso esteja ausente
- # define a expressão padrão.
- # Captura os grupos contidos no padrão, separando o
- # operador de negação '!' (se presente) para determinar o
- # tratamento de valição do intervalo.
- #
- # Exemplo 1:
- #
- # BASH_REMATCH[2]
- # __________|__________
- # | |
- # !(12:00-13:00,15:00-17:00)
- # |
- # |_ BASH_REMATCH[1]
- #
- re='^(!)\(([^)]+)\)$'
- [[ ${_BOT_RULES_[$i:auth_file]} =~ $re ]]
- match=${BASH_REMATCH[2]:-${_BOT_RULES_[$i:auth_file]}}
-
- for file in ${match//|/ }; do
- # Testa acesso ao arquivo.
- if ! [[ -f "$file" && -r "$file" ]]; then
- MessageError API "'$file' $_ERR_FILE_NOT_FOUND_" "${_BOT_RULES_[$i:name]}" '[-T, --auth_file]'
- fi
- # Lê os usuários removendo os comentários complementares
- # e ignora a linha prefixada com hashtag '#'.
- while read -r line; do
- user=${line%%*( )#*}
- [[ $user != *( )#* ]] &&
- [[ $user == $u_message_from_id || $user == $u_message_from_username ]] && break 2
- done < "$file"
- done
- ((${BASH_REMATCH[1]} $?)) && continue
-
- for msgstatus in ${_BOT_RULES_[$i:message_status]//|/ }; do
- [[ $msgstatus == pinned && ${message_pinned_message_message_id[$uid]:-${channel_post_pinned_message_message_id[$uid]}} ]] ||
- [[ $msgstatus == edited && ${edited_message_message_id[$uid]:-${edited_channel_post_message_id[$uid]}} ]] ||
- [[ $msgstatus == forwarded && ${message_forward_from_id[$uid]:-${channel_post_forward_from_chat_id[$uid]}} ]] ||
- [[ $msgstatus == reply && ${message_reply_to_message_message_id[$uid]:-${channel_post_reply_to_message_message_id[$uid]}} ]] ||
- [[ $msgstatus == callback && ${callback_query_message_message_id[$uid]} ]] ||
- [[ $msgstatus == inline && ${inline_query_id[$uid]} ]] ||
- [[ $msgstatus == chosen && ${chosen_inline_result_result_id[$uid]} ]] ||
- [[ $msgstatus == poll && ${poll_answer_poll_id[$uid]} ]] && break
- done
-
- (($?)) && continue
- for ent in ${_BOT_RULES_[$i:entities_type]//|/ }; do
- [[ $ent == @(${u_message_entities_type//$_BOT_DELM_/|}) ]] && break
- done
- (($?)) && continue
-
- for mem in ${_BOT_RULES_[$i:chat_member]//|/ }; do
- [[ $mem == new && ${message_new_chat_member_id[$uid]} ]] ||
- [[ $mem == left && ${message_left_chat_member_id[$uid]} ]] && break
- done
-
- (($?)) && continue
- for type in ${_BOT_RULES_[$i:file_type]//|/ }; do
- [[ $type == document && ${message_document_file_id[$uid]:-${channel_post_document_file_id[$uid]}} &&
- ! ${message_document_thumb_file_id[$uid]:-${channel_post_document_thumb_file_id[$uid]}} ]] ||
- [[ $type == gif && ${message_document_file_id[$uid]:-${channel_post_document_file_id[$uid]}} &&
- ${message_document_thumb_file_id[$uid]:-${channel_post_document_thumb_file_id[$uid]}} ]] ||
- [[ $type == photo && ${message_photo_file_id[$uid]:-${channel_post_photo_file_id[$uid]}} ]] ||
- [[ $type == sticker && ${message_sticker_file_id[$uid]:-${channel_post_sticker_file_id[$uid]}} ]] ||
- [[ $type == video && ${message_video_file_id[$uid]:-${channel_post_video_file_id[$uid]}} ]] ||
- [[ $type == audio && ${message_audio_file_id[$uid]:-${channel_post_audio_file_id[$uid]}} ]] ||
- [[ $type == voice && ${message_voice_file_id[$uid]:-${channel_post_voice_file_id[$uid]}} ]] ||
- [[ $type == contact && ${message_contact_user_id[$uid]:-${channel_post_contact_user_id[$uid]}} ]] ||
- [[ $type == location && ${message_location_latitude[$uid]:-${channel_post_location_latitude[$uid]}} ]] && break
- done
- (($?)) && continue
-
- [[ ${_BOT_RULES_[$i:time]} =~ $re ]]
- match=${BASH_REMATCH[2]:-${_BOT_RULES_[$i:time]}}
- for tm in ${match//|/ }; do
- IFS='-' read stime etime <<< $tm
- printf -v ctime '%(%H:%M)T' $u_message_date
- [[ $ctime == @($stime|$etime) ]] ||
- [[ $ctime > $stime && $ctime < $etime ]] && break
- done
-
- ((${BASH_REMATCH[1]} $?)) && continue
- [[ ${_BOT_RULES_[$i:date]} =~ $re ]]
- match=${BASH_REMATCH[2]:-${_BOT_RULES_[$i:date]}}
- for dt in ${match//|/ }; do
- IFS='-' read sdate edate <<< $dt
- IFS='/' read -a sdate <<< $sdate
- IFS='/' read -a edate <<< $edate
-
- sdate=${sdate[2]}/${sdate[1]}/${sdate[0]}
- edate=${edate[2]}/${edate[1]}/${edate[0]}
- printf -v cdate '%(%Y/%m/%d)T' $u_message_date
-
- [[ $cdate == @($sdate|$edate) ]] ||
- [[ $cdate > $sdate && $cdate < $edate ]] && break
- done
-
- ((${BASH_REMATCH[1]} $?)) && continue
- if [[ ${_BOT_RULES_[$i:user_status]} ]]; then
- case $_BOT_TYPE_RETURN_ in
- value)
- out=$(ShellBot.getChatMember --chat_id $u_message_chat_id \
- --user_id $u_message_from_id 2>/dev/null)
-
- IFS=$_BOT_DELM_ read -a out <<< $out
- [[ ${out[2]} == true ]]
- status=${out[$(($? ? 6 : 5))]}
- ;;
- json)
- out=$(ShellBot.getChatMember --chat_id $u_message_chat_id \
- --user_id $u_message_from_id 2>/dev/null)
-
- status=$(Json '.result.status' $out)
- ;;
- map)
- ShellBot.getChatMember --chat_id $u_message_chat_id \
- --user_id $u_message_from_id &>/dev/null
- status=${return[status]}
- ;;
- esac
- [[ $status == @(${_BOT_RULES_[$i:user_status]}) ]] || continue
- fi
-
- # Monitor
- [[ $_BOT_MONITOR_ ]] && printf '[%s]: %s: %s: %s: %s: %s: %s: %s: %s: %s: %s\n' \
- "${FUNCNAME}" \
- "$((uid+1))" \
- "$(printf '%(%d/%m/%Y %H:%M:%S)T' ${u_message_date})" \
- "${u_message_chat_type}" \
- "${u_message_chat_username:--}" \
- "${u_message_from_username:--}" \
- "${_BOT_RULES_[$i:source]}" \
- "${_BOT_RULES_[$i:line]}" \
- "${_BOT_RULES_[$i:name]}" \
- "${_BOT_RULES_[$i:action]:--}" \
- "${_BOT_RULES_[$i:exec]:--}"
-
- # Log
- [[ $_BOT_LOG_FILE_ ]] && printf '%s: %s: %s: %s: %s: %s: %s\n' \
- "$(printf '%(%d/%m/%Y %H:%M:%S)T')" \
- "${FUNCNAME}" \
- "${_BOT_RULES_[$i:source]}" \
- "${_BOT_RULES_[$i:line]}" \
- "${_BOT_RULES_[$i:name]}" \
- "${_BOT_RULES_[$i:action]:--}" \
- "${_BOT_RULES_[$i:exec]:--}" >> "$_BOT_LOG_FILE_"
- # Anexa tipo da ação. (se presente)
- if [[ ${_BOT_RULES_[$i:bot_action]} ]]; then
- ShellBot.sendChatAction --chat_id $u_message_chat_id --action ${_BOT_RULES_[$i:bot_action]} &>/dev/null
- fi
- if [[ ${_BOT_RULES_[$i:bot_reply_message]} ]]; then
- ShellBot.sendMessage --chat_id $u_message_chat_id \
- --reply_to_message_id $u_message_id \
- --text "$(FlagConv $uid "${_BOT_RULES_[$i:bot_reply_message]}")" \
- ${_BOT_RULES_[$i:bot_reply_markup]:+--reply_markup "${_BOT_RULES_[$i:bot_reply_markup]}"} \
- ${_BOT_RULES_[$i:bot_parse_mode]:+--parse_mode ${_BOT_RULES_[$i:bot_parse_mode]}} &>/dev/null
- fi
-
- if [[ ${_BOT_RULES_[$i:bot_send_message]} ]]; then
- ShellBot.sendMessage --chat_id $u_message_chat_id \
- --text "$(FlagConv $uid "${_BOT_RULES_[$i:bot_send_message]}")" \
- ${_BOT_RULES_[$i:bot_reply_markup]:+--reply_markup "${_BOT_RULES_[$i:bot_reply_markup]}"} \
- ${_BOT_RULES_[$i:bot_parse_mode]:+--parse_mode ${_BOT_RULES_[$i:bot_parse_mode]}} &>/dev/null
- fi
- for fwid in ${_BOT_RULES_[$i:bot_forward_message]//|/ }; do
- ShellBot.forwardMessage --chat_id $fwid \
- --from_chat_id $u_message_chat_id \
- --message_id $u_message_id &>/dev/null
- done
- # Chama a função passando os argumentos posicionais. (se existir)
- ${_BOT_RULES_[$i:action]:+${_BOT_RULES_[$i:action]} ${_BOT_RULES_[$i:action_args]:-${args[*]}}}
-
- # Executa a linha de comando e salva o retorno.
- stdout=${_BOT_RULES_[$i:exec]:+$(set -- ${args[*]}; eval $(FlagConv $uid "${_BOT_RULES_[$i:exec]}") 2>&1)}
- while [[ $stdout ]]; do
- ShellBot.sendMessage --chat_id $u_message_chat_id \
- --reply_to_message_id $u_message_id \
- --text "${stdout:0:4096}" &>/dev/null
- # Atualiza o buffer de saída.
- stdout=${stdout:4096}
-
- # Reenvia ação se ainda houver dados.
- if [[ ${_BOT_RULES_[$i:bot_action]} && $stdout ]]; then
- ShellBot.sendChatAction --chat_id $u_message_chat_id --action ${_BOT_RULES_[$i:bot_action]} &>/dev/null
- fi
- done
- [[ ${_BOT_RULES_[$i:continue]} ]] || return 0
- done
- return 1
- }
- ShellBot.getUpdates()
- {
- local total_keys offset limit timeout allowed_updates jq_obj
- local vet val var obj oldv bar vars vals i
- # Define os parâmetros da função
- local param=$(getopt --name "$FUNCNAME" \
- --options 'o:l:t:a:' \
- --longoptions 'offset:,
- limit:,
- timeout:,
- allowed_updates:' \
- -- "$@")
-
- eval set -- "$param"
- while :
- do
- case $1 in
- -o|--offset)
- CheckArgType int "$1" "$2"
- offset=$2
- shift 2
- ;;
- -l|--limit)
- CheckArgType int "$1" "$2"
- limit=$2
- shift 2
- ;;
- -t|--timeout)
- CheckArgType int "$1" "$2"
- timeout=$2
- shift 2
- ;;
- -a|--allowed_updates)
- allowed_updates=$2
- shift 2
- ;;
- --)
- # Se não houver mais parâmetros
- shift
- break
- ;;
- esac
- done
-
- # Seta os parâmetros
- jq_obj=$(curl $_CURL_OPT_ POST $_API_TELEGRAM_/${FUNCNAME#*.} \
- ${offset:+-d offset="$offset"} \
- ${limit:+-d limit="$limit"} \
- ${timeout:+-d timeout="$timeout"} \
- ${allowed_updates:+-d allowed_updates="$allowed_updates"})
- # Limpa as variáveis inicializadas.
- unset $_VAR_INIT_; _VAR_INIT_=
-
- # Se há atualizações.
- [[ $(jq -r '.result|length' <<< $jq_obj) -eq 0 ]] && return 0
-
- # Se o método 'ShellBot.getUpdates' for invocado a partir de um subshell,
- # as atualizações são retornadas em um estrutura de dados json, o método
- # é finalizado e variáveis não são inicializadas.
- [[ $BASH_SUBSHELL -gt 0 ]] && { echo "$jq_obj"; return 0; }
- if [[ $_BOT_MONITOR_ ]]; then
- printf -v bar '=%.s' {1..50}
- printf "$bar\nData: %(%d/%m/%Y %T)T\n"
- printf 'Script: %s\nBot (nome): %s\nBot (usuario): %s\nBot (id): %s\n' \
- "${_BOT_SCRIPT_}" \
- "${_BOT_INFO_[2]}" \
- "${_BOT_INFO_[3]}" \
- "${_BOT_INFO_[1]}"
- fi
-
- mapfile -t vars <<< $(GetAllKeys "$jq_obj")
- mapfile -t vals <<< $(GetAllValues "$jq_obj")
- for i in ${!vars[@]}; do
-
- [[ ${vars[$i]} =~ [0-9]+ ]]
- vet=${BASH_REMATCH:-0}
-
- var=${vars[$i]//[0-9\[\]]/}
- var=${var#result.}
- var=${var//./_}
-
- declare -g $var
- local -n byref=$var # ponteiro
-
- val=${vals[$i]}
- val=${val#\"}
- val=${val%\"}
- byref[$vet]+=${byref[$vet]:+$_BOT_DELM_}${val}
- if [[ $_BOT_MONITOR_ ]]; then
- [[ $vet -ne ${oldv:--1} ]] && printf "$bar\nMensagem: %d\n$bar\n" $((vet+1))
- printf "[%s]: %s = '%s'\n" "$FUNCNAME" "$var" "$val"
- oldv=$vet
- fi
-
- unset -n byref
- [[ $var != @(${_VAR_INIT_// /|}) ]] && _VAR_INIT_=${_VAR_INIT_:+$_VAR_INIT_ }${var}
- done
-
- # Log (thread)
- [[ $_BOT_LOG_FILE_ ]] && CreateLog "${#update_id[@]}" "$jq_obj"
- # Status
- return $?
- }
-
- # Bot métodos (somente leitura)
- readonly -f ShellBot.token \
- ShellBot.id \
- ShellBot.username \
- ShellBot.first_name \
- ShellBot.getConfig \
- ShellBot.regHandleFunction \
- ShellBot.regHandleExec \
- ShellBot.watchHandle \
- ShellBot.ListUpdates \
- ShellBot.TotalUpdates \
- ShellBot.OffsetEnd \
- ShellBot.OffsetNext \
- ShellBot.getMe \
- ShellBot.getWebhookInfo \
- ShellBot.deleteWebhook \
- ShellBot.setWebhook \
- ShellBot.init \
- ShellBot.ReplyKeyboardMarkup \
- ShellBot.ForceReply \
- ShellBot.ReplyKeyboardRemove \
- ShellBot.KeyboardButton \
- ShellBot.sendMessage \
- ShellBot.forwardMessage \
- ShellBot.sendPhoto \
- ShellBot.sendAudio \
- ShellBot.sendDocument \
- ShellBot.sendSticker \
- ShellBot.sendVideo \
- ShellBot.sendVideoNote \
- ShellBot.sendVoice \
- ShellBot.sendLocation \
- ShellBot.sendVenue \
- ShellBot.sendContact \
- ShellBot.sendChatAction \
- ShellBot.getUserProfilePhotos \
- ShellBot.getFile \
- ShellBot.kickChatMember \
- ShellBot.leaveChat \
- ShellBot.unbanChatMember \
- ShellBot.getChat \
- ShellBot.getChatAdministrators \
- ShellBot.getChatMembersCount \
- ShellBot.getChatMember \
- ShellBot.editMessageText \
- ShellBot.editMessageCaption \
- ShellBot.editMessageReplyMarkup \
- ShellBot.InlineKeyboardMarkup \
- ShellBot.InlineKeyboardButton \
- ShellBot.answerCallbackQuery \
- ShellBot.deleteMessage \
- ShellBot.exportChatInviteLink \
- ShellBot.setChatPhoto \
- ShellBot.deleteChatPhoto \
- ShellBot.setChatTitle \
- ShellBot.setChatDescription \
- ShellBot.pinChatMessage \
- ShellBot.unpinChatMessage \
- ShellBot.promoteChatMember \
- ShellBot.restrictChatMember \
- ShellBot.getStickerSet \
- ShellBot.uploadStickerFile \
- ShellBot.createNewStickerSet \
- ShellBot.addStickerToSet \
- ShellBot.setStickerPositionInSet \
- ShellBot.deleteStickerFromSet \
- ShellBot.stickerMaskPosition \
- ShellBot.downloadFile \
- ShellBot.editMessageLiveLocation \
- ShellBot.stopMessageLiveLocation \
- ShellBot.setChatStickerSet \
- ShellBot.deleteChatStickerSet \
- ShellBot.sendMediaGroup \
- ShellBot.editMessageMedia \
- ShellBot.inputMedia \
- ShellBot.sendAnimation \
- ShellBot.answerInlineQuery \
- ShellBot.InlineQueryResult \
- ShellBot.InputMessageContent \
- ShellBot.ChatPermissions \
- ShellBot.setChatPermissions \
- ShellBot.setChatAdministratorCustomTitle \
- ShellBot.sendPoll \
- ShellBot.KeyboardButtonPollType \
- ShellBot.sendDice \
- ShellBot.getMyCommands \
- ShellBot.setMyCommands \
- ShellBot.BotCommand \
- ShellBot.setMessageRules \
- ShellBot.manageRules \
- ShellBot.getUpdates
- offset=${_BOT_FLUSH_:+$(FlushOffset)} # flush
- printf -v jq_obj '{"token":"%s","id":%d,"first_name":"%s","username":"%s","offset_start":%d,"offset_end":%d}' \
- "${_BOT_INFO_[0]}" \
- "${_BOT_INFO_[1]}" \
- "${_BOT_INFO_[2]}" \
- "${_BOT_INFO_[3]}" \
- "${offset%|*}" \
- "${offset#*|}"
- # Retorna informações do bot.
- MethodReturn "$jq_obj"
- return $?
- }
- # Funções (somente leitura)
- readonly -f MessageError \
- Json \
- FlushOffset \
- CreateUnitService \
- GetAllKeys \
- GetAllValues \
- SetDelmValues \
- MethodReturn \
- CheckArgType \
- CreateLog \
- FlagConv
- # /* SHELLBOT */
|