diff --git a/.replit b/.replit index d409ef8..5042e37 100644 --- a/.replit +++ b/.replit @@ -1,2 +1,2 @@ language = "nodejs" -run = "npm start" \ No newline at end of file +run = "npx node index.js" \ No newline at end of file diff --git a/Genta.ttf b/Genta.ttf deleted file mode 100644 index 44060e0..0000000 Binary files a/Genta.ttf and /dev/null differ diff --git a/assets/json/errors.json b/assets/json/errors.json deleted file mode 100644 index c4dff19..0000000 --- a/assets/json/errors.json +++ /dev/null @@ -1,24 +0,0 @@ -[ - "Este não é um canal NSFW!", - "Este não parece ser um canal NSFW...", - "Eu sinto Muito! Mas isso pertence aos canais NSFW!", - "Isso pertence aos canais NSFW!", - "Não posso postar isso aqui! Por favor, direcione-me para um canal NSFW!", - "Receio que esse tipo de coisa não seja permitido aqui..", - "Este não parece um canal NSFW!", - "Por favor, tente novamente em um canal NSFW!", - "u /// u, acho que não posso postar isso no seu canal normal.", - "Não me faça postar isso aqui ...", - "💢Isso não pertence aqui!", - "O que? Não posso postar isso aqui!", - "Você poderia me direcionar para um canal NSFW?", - "Tente este comando novamente em um canal NSFW!", - "H-ei .. Algumas pessoas podem não querer ver isso aqui!", - "SENSUAL! Baka! Não aqui!", - "Baka! Não posso postar isso aqui!", - "Este não é um canal NSFW! Aprenda a fazer um canal nsfw!", - "Isso foi ruim! Faça isso em um canal NSFW!", - "Que escandaloso! Experimente isso em um canal NSFW!", - "Senpai ... não me faça postar isso aqui ...", - "Use esse comando em uma sala NSFW seu POETERO" - ] \ No newline at end of file diff --git a/assets/json/words.json b/assets/json/words.json deleted file mode 100644 index 299c72b..0000000 --- a/assets/json/words.json +++ /dev/null @@ -1,15480 +0,0 @@ -[ -"ABA", -"ABACATE", -"ABACATEIRO", -"ABACAXI", -"ABACO", -"ABADE", -"ABADESSA", -"ABADIA", -"ABAFA", -"ABAFADO", -"ABAFAMENTO", -"ABAFAR", -"ABAFO", -"ABAIANADO", -"ABAIXADO", -"ABAIXAR", -"ABAIXO", -"ABAJUR", -"ABALADO", -"ABALAMENTO", -"ABALAR", -"ABALAVEL", -"ABALO", -"ABALROAMENTO", -"ABALROAR", -"ABANADOR", -"ABANAR", -"ABANDONADO", -"ABANDONAR", -"ABANDONO", -"ABANO", -"ABARCAR", -"ABARROTADO", -"ABARROTAMENTO", -"ABARROTAR", -"ABASTADO", -"ABASTANCA", -"ABASTAR", -"ABASTECEDOR", -"ABASTECER", -"ABASTECIDO", -"ABASTECIMENTO", -"ABATE", -"ABATEDOURO", -"ABATER", -"ABATIDO", -"ABATIMENTO", -"ABAULADO", -"ABAULAMENTO", -"ABAULAR", -"ABDICACAO", -"ABDICAR", -"ABDICAVEL", -"ABDOME", -"ABDOMEN", -"ABDOMINAL", -"ABECEDARIO", -"ABELHA", -"ABELHUDO", -"ABELIANO", -"ABENCOAR", -"ABERRACAO", -"ABERTA", -"ABERTO", -"ABERTURA", -"ABESTALHADO", -"ABETO", -"ABILOLADO", -"ABILOLAR", -"ABISCOITAR", -"ABISMADO", -"ABISMAR", -"ABISMO", -"ABISSAL", -"ABISSINIO", -"ABJETO", -"ABLACAO", -"ABLATIVO", -"ABLAUT", -"ABLUCAO", -"ABNEGACAO", -"ABNEGADO", -"ABNEGAR", -"ABOBADA", -"ABOBADADO", -"ABOBADAR", -"ABOBADO", -"ABOBAR", -"ABOBORA", -"ABOBORAL", -"ABOBOREIRA", -"ABOBRINHA", -"ABOCANHAR", -"ABOLICAO", -"ABOLICIONISMO", -"ABOLICIONISTA", -"ABOLIR", -"ABOMINACAO", -"ABOMINAR", -"ABOMINAVEL", -"ABONACAO", -"ABONADO", -"ABONAR", -"ABONO", -"ABORDAGEM", -"ABORDAR", -"ABORDAVEL", -"ABORIGINE", -"ABORRECER", -"ABORRECIMENTO", -"ABORTAR", -"ABORTO", -"ABOTOAR", -"ABRACADABRA", -"ABRACAR", -"ABRACO", -"ABRANDAMENTO", -"ABRANDAR", -"ABRANGENCIA", -"ABRANGENTE", -"ABRANGER", -"ABRASADOR", -"ABRASILEIRADO", -"ABRASILEIRAR", -"ABRASIVO", -"ABREUGRAFIA", -"ABREUGRAFICO", -"ABREVIACAO", -"ABREVIADO", -"ABREVIAMENTO", -"ABREVIAR", -"ABREVIATURA", -"ABRICO", -"ABRICOTEIRO", -"ABRIDOR", -"ABRIGAR", -"ABRIGO", -"ABRIL", -"ABRILHANTAR", -"ABRIR", -"ABRUPTO", -"ABRUTALHADO", -"ABRUTALHAR", -"ABSCESSO", -"ABSCISSA", -"ABSENTEISMO", -"ABSENTEISTA", -"ABSENTIA", -"ABSINTO", -"ABSOLUTA", -"ABSOLUTAMENTE", -"ABSOLUTISMO", -"ABSOLUTISTA", -"ABSOLUTO", -"ABSOLVER", -"ABSOLVICAO", -"ABSORCAO", -"ABSORTO", -"ABSORVE", -"ABSORVENTE", -"ABSORVER", -"ABSTEMIO", -"ABSTENCAO", -"ABSTER", -"ABSTINENCIA", -"ABSTRACAO", -"ABSTRACIONISMO", -"ABSTRACIONISTA", -"ABSTRATA", -"ABSTRATO", -"ABSURDO", -"ABUNDANCIA", -"ABUNDANTE", -"ABURGUESADO", -"ABURGUESAMENTO", -"ABURGUESAR", -"ABUSADO", -"ABUSAR", -"ABUSIVO", -"ABUSO", -"ABUTRE", -"AC", -"ACABADO", -"ACABAMENTO", -"ACABAR", -"ACABAVEL", -"ACABRUNHADO", -"ACABRUNHAMENTO", -"ACABRUNHAR", -"ACACIA", -"ACADEMIA", -"ACADEMICISMO", -"ACADEMICO", -"ACADIANO", -"ACAFAJESTADO", -"ACAFAJESTAMENTO", -"ACAFRAO", -"ACAI", -"ACAJU", -"ACALCAR", -"ACALENTAR", -"ACALMADO", -"ACALMAR", -"ACALORADO", -"ACALORAR", -"ACAMADO", -"ACAMAR", -"ACAMBARCAR", -"ACAMPADO", -"ACAMPAMENTO", -"ACAMPAR", -"ACANALHADO", -"ACANALHAR", -"ACANHADO", -"ACANHAMENTO", -"ACANHAR", -"ACAO", -"ACARAJE", -"ACAREACAO", -"ACAREAR", -"ACARICIAR", -"ACARO", -"ACARPETADO", -"ACARPETAR", -"ACARRETAR", -"ACASALAMENTO", -"ACASALAR", -"ACASO", -"ACATAMENTO", -"ACATAR", -"ACATO", -"ACAUTELADO", -"ACAUTELAMENTO", -"ACAUTELAR", -"ACCESSORIOS", -"ACE", -"ACEBOLADO", -"ACEBOLAR", -"ACEDER", -"ACEFALO", -"ACEITACAO", -"ACEITAR", -"ACEITAVEL", -"ACEITO", -"ACELARACAO", -"ACELERACAO", -"ACELERADO", -"ACELERADOR", -"ACELERAR", -"ACELGA", -"ACEM", -"ACENAR", -"ACENDEDOR", -"ACENDER", -"ACENO", -"ACENTO", -"ACENTUACAO", -"ACENTUADO", -"ACENTUAR", -"ACEPCAO", -"ACEPIPE", -"ACERBAR", -"ACERCA", -"ACERCAR", -"ACEROLA", -"ACERTADO", -"ACERTAR", -"ACERTO", -"ACESO", -"ACESSADO", -"ACESSAR", -"ACESSIBILIDADE", -"ACESSIVEL", -"ACESSO", -"ACESSORIO", -"ACESSORIOS", -"ACETALDEIDO", -"ACETATO", -"ACETICO", -"ACETILCOLINA", -"ACETILENO", -"ACETILSALICILICO", -"ACETINADO", -"ACETINAR", -"ACETONA", -"ACHA", -"ACHADICO", -"ACHADO", -"ACHAR", -"ACHATADO", -"ACHATAMENTO", -"ACHATAR", -"ACHAVA", -"ACHINCALHAMENTO", -"ACHINCALHANTE", -"ACHINCALHAR", -"ACHINCALHE", -"ACHOCOLATADO", -"ACIDA", -"ACIDENTADO", -"ACIDENTAL", -"ACIDENTAR", -"ACIDENTE", -"ACIDENTES", -"ACIDEZ", -"ACIDO", -"ACIMA", -"ACINTE", -"ACINTOSO", -"ACINZENTADO", -"ACINZENTAR", -"ACIONADO", -"ACIONADOR", -"ACIONAMENTO", -"ACIONAR", -"ACIONARIO", -"ACIONISTA", -"ACIRRADO", -"ACIRRAMENTO", -"ACIRRAR", -"ACLAMACAO", -"ACLAMAR", -"ACLARADO", -"ACLARAMENTO", -"ACLARAR", -"ACLIMATACAO", -"ACLIMATADO", -"ACLIMATAR", -"ACLIVE", -"ACNE", -"ACO", -"ACOBERTADO", -"ACOBERTAR", -"ACOCORADO", -"ACOCORAR", -"ACOITAR", -"ACOITE", -"ACOLA", -"ACOLCHOADO", -"ACOLCHOAR", -"ACOLHEDOR", -"ACOLHER", -"ACOLHIDA", -"ACOLHIDO", -"ACOLHIMENTO", -"ACOMETER", -"ACOMODACAO", -"ACOMODADO", -"ACOMODAR", -"ACOMPANHA", -"ACOMPANHAMENTO", -"ACOMPANHAMENTOS", -"ACOMPANHANTE", -"ACOMPANHAR", -"ACONCHEGANTE", -"ACONCHEGAR", -"ACONCHEGO", -"ACONDICIONADO", -"ACONDICIONAR", -"ACONSELHA", -"ACONSELHADO", -"ACONSELHAMENTO", -"ACONSELHAR", -"ACONSELHAVEL", -"ACONTECER", -"ACONTECIDO", -"ACONTECIMENTO", -"ACONTECIMENTOS", -"ACOPLADO", -"ACOPLAGEM", -"ACOPLAMENTO", -"ACOPLAR", -"ACORDADO", -"ACORDAR", -"ACORDE", -"ACORDEAO", -"ACORDEOM", -"ACORDEONISTA", -"ACORDO", -"ACORIANO", -"ACORRENTADO", -"ACORRENTAR", -"ACORRER", -"ACOSSADO", -"ACOSSAR", -"ACOSTAMENTO", -"ACOSTAR", -"ACOSTUMADO", -"ACOSTUMAR", -"ACOTOVELAMENTO", -"ACOTOVELAR", -"ACOUGUE", -"ACOVARDADO", -"ACOVARDAR", -"ACRE", -"ACREDITADO", -"ACREDITAR", -"ACREDITAVEL", -"ACRESCENTAR", -"ACRESCER", -"ACRESCIMO", -"ACRIANO", -"ACRIDEZ", -"ACRILICO", -"ACRIMONIA", -"ACRIMONIOSO", -"ACROBACIA", -"ACROBATA", -"ACROBATICO", -"ACROFOBIA", -"ACROMATICO", -"ACRONIMO", -"ACROPOLE", -"ACROSTICO", -"ACTINIDEO", -"ACTINIO", -"ACTINOMICETE", -"ACUADO", -"ACUAR", -"ACUCAR", -"ACUCARADO", -"ACUCARAR", -"ACUCAREIRO", -"ACUCENA", -"ACUDE", -"ACUDIR", -"ACUIDADE", -"ACULTURACAO", -"ACULTURADO", -"ACULTURAR", -"ACUMULACAO", -"ACUMULADO", -"ACUMULADOR", -"ACUMULAR", -"ACUMULO", -"ACUPUNTURA", -"ACUSACAO", -"ACUSADO", -"ACUSAR", -"ACUSATIVO", -"ACUSTICA", -"ACUSTICO", -"AD", -"ADA", -"ADAGA", -"ADAGIO", -"ADAPTABILIDADE", -"ADAPTACAO", -"ADAPTADO", -"ADAPTADOR", -"ADAPTAR", -"ADAPTAVEL", -"ADEGA", -"ADELGACADO", -"ADELGACAR", -"ADEMAIS", -"ADENDO", -"ADENINA", -"ADENSAMENTO", -"ADENSAR", -"ADENTRAR", -"ADENTRO", -"ADEPTO", -"ADEQUABILIDADE", -"ADEQUACAO", -"ADEQUADAMENTE", -"ADEQUADO", -"ADEQUAR", -"ADEQUAVEL", -"ADERECO", -"ADERENCIA", -"ADERENTE", -"ADERIR", -"ADERNETA", -"ADESAO", -"ADESIVO", -"ADESTRADO", -"ADESTRADOR", -"ADESTRAMENTO", -"ADESTRAR", -"ADEUS", -"ADIABILIDADE", -"ADIAMENTO", -"ADIANTADO", -"ADIANTAMENTO", -"ADIANTANDO", -"ADIANTAR", -"ADIANTE", -"ADIAR", -"ADIAVEL", -"ADICAO", -"ADICIONADO", -"ADICIONAL", -"ADICIONAR", -"ADIDO", -"ADIMENSIONAL", -"ADIPOSIDADE", -"ADIPOSO", -"ADITIVO", -"ADIVINHA", -"ADIVINHACAO", -"ADIVINHAR", -"ADIVINHO", -"ADJACENCIA", -"ADJACENTE", -"ADJETIVACAO", -"ADJETIVADO", -"ADJETIVAL", -"ADJETIVAR", -"ADJETIVO", -"ADJETIVOS", -"ADJUDICACAO", -"ADJUDICAR", -"ADJUNTO", -"ADMINISTRACAO", -"ADMINISTRADOR", -"ADMINISTRAR", -"ADMINISTRATIVO", -"ADMIRACAO", -"ADMIRADOR", -"ADMIRAR", -"ADMIRAVEL", -"ADMISSAO", -"ADMISSIBILIDADE", -"ADMISSIVEL", -"ADMITIDO", -"ADMITIR", -"ADMOESTACAO", -"ADMOESTAR", -"ADN", -"ADNOMINAL", -"ADOBE", -"ADOCADO", -"ADOCANTE", -"ADOCAO", -"ADOCAR", -"ADOCICADO", -"ADOCICAR", -"ADOECER", -"ADOECIMENTO", -"ADOENTADO", -"ADOENTAR", -"ADOIDADO", -"ADOIDAR", -"ADOLESCENCIA", -"ADOLESCENTE", -"ADONDE", -"ADONIS", -"ADORACAO", -"ADORADO", -"ADORADOR", -"ADORAR", -"ADORAVEL", -"ADORMECER", -"ADORMECIDO", -"ADORMECIMENTO", -"ADORNAR", -"ADORNO", -"ADOTAR", -"ADOTIVO", -"ADQUIRIDA", -"ADQUIRIDO", -"ADQUIRIR", -"ADRENALINA", -"ADRIATICO", -"ADSORCAO", -"ADUANEIRO", -"ADUBACAO", -"ADUBAR", -"ADUBO", -"ADULACAO", -"ADULADOR", -"ADULAR", -"ADULTERA", -"ADULTERACAO", -"ADULTERADO", -"ADULTERAR", -"ADULTERIO", -"ADULTERO", -"ADULTO", -"ADUNCO", -"ADUTORA", -"ADVENTISMO", -"ADVENTISTA", -"ADVENTO", -"ADVERBIAL", -"ADVERBIO", -"ADVERSARIO", -"ADVERSATIVA", -"ADVERSATIVO", -"ADVERSIDADE", -"ADVERSO", -"ADVERTENCIA", -"ADVERTIDO", -"ADVERTIR", -"ADVINDO", -"ADVIR", -"ADVOCACIA", -"ADVOGADO", -"ADVOGAR", -"AE", -"AEREA", -"AEREO", -"AEROBICA", -"AEROBICO", -"AEROCLUBE", -"AERODINAMICA", -"AERODINAMICO", -"AERODROMO", -"AEROESPACIAL", -"AEROMOCA", -"AEROMOCO", -"AEROMODELISMO", -"AEROMODELISTA", -"AERONAUTICA", -"AERONAUTICO", -"AEROPORTO", -"AEROPORTUARIO", -"AEROSSOL", -"AF", -"AFA", -"AFABILIDADE", -"AFAGAR", -"AFAGO", -"AFAMADO", -"AFAMAR", -"AFANAR", -"AFANO", -"AFASIA", -"AFASICO", -"AFASTADO", -"AFASTAMENTO", -"AFASTAR", -"AFAVEL", -"AFAZERES", -"AFECCAO", -"AFEGANE", -"AFEGAO", -"AFEICAO", -"AFEICOADO", -"AFEICOAR", -"AFELIO", -"AFEMINADO", -"AFEMINAR", -"AFERENTE", -"AFERICAO", -"AFERIDO", -"AFERIR", -"AFERRADO", -"AFERRAR", -"AFETACAO", -"AFETADO", -"AFETAR", -"AFETIVA", -"AFETIVIDADE", -"AFETIVO", -"AFETO", -"AFETUOSO", -"AFIADA", -"AFIADO", -"AFIANCAR", -"AFIANCAVEL", -"AFIAR", -"AFILADO", -"AFILHADO", -"AFILIADA", -"AFILIADO", -"AFILIAR", -"AFINACAO", -"AFINADO", -"AFINADOR", -"AFINAL", -"AFINAR", -"AFINCO", -"AFINIDADE", -"AFIRMACAO", -"AFIRMAR", -"AFIRMATIVA", -"AFIRMATIVO", -"AFIVELADO", -"AFIVELAR", -"AFIXACAO", -"AFIXAR", -"AFIXO", -"AFLICAO", -"AFLIGIR", -"AFLITO", -"AFLORAR", -"AFLUENCIA", -"AFLUENTE", -"AFLUIR", -"AFOBACAO", -"AFOBADO", -"AFOBAMENTO", -"AFOBAR", -"AFOFAR", -"AFOGADO", -"AFOGADOR", -"AFOGAMENTO", -"AFOGAR", -"AFOITO", -"AFONICO", -"AFORA", -"AFORISMO", -"AFORTUNADO", -"AFORTUNAR", -"AFRANCESADO", -"AFRANCESAR", -"AFRESCO", -"AFRICANER", -"AFRICANO", -"AFRIKAANS", -"AFRO", -"AFRODISIACO", -"AFRODISIACOS", -"AFRONTA", -"AFRONTAR", -"AFROUXAR", -"AFTA", -"AFTOSA", -"AFUGENTAR", -"AFUNDADO", -"AFUNDAR", -"AFUNILADO", -"AFUNILAMENTO", -"AFUNILAR", -"AG", -"AGA", -"AGACHADO", -"AGACHAMENTO", -"AGARRADO", -"AGARRAMENTO", -"AGARRAR", -"AGASALHADO", -"AGASALHAR", -"AGASALHO", -"AGASTADO", -"AGASTAR", -"AGATA", -"AGAUCHADO", -"AGENCIA", -"AGENCIAR", -"AGENDA", -"AGENDAR", -"AGENTE", -"AGENTES", -"AGIGANTADO", -"AGIGANTAR", -"AGIL", -"AGILIDADE", -"AGILIZACAO", -"AGILIZAR", -"AGIO", -"AGIOTA", -"AGIOTAGEM", -"AGIR", -"AGITACAO", -"AGITADO", -"AGITADOR", -"AGITAR", -"AGITO", -"AGLOMERACAO", -"AGLOMERADO", -"AGLOMERAR", -"AGLUTINACAO", -"AGLUTINADO", -"AGLUTINANTE", -"AGLUTINAR", -"AGNOSTICISMO", -"AGNOSTICO", -"AGNUS", -"AGOGO", -"AGONIA", -"AGONIADO", -"AGONIAR", -"AGONIZANTE", -"AGONIZAR", -"AGORA", -"AGORAFOBIA", -"AGORAFOBICO", -"AGORINHA", -"AGOSTINIANO", -"AGOSTO", -"AGOURAR", -"AGOUREIRO", -"AGOURENTO", -"AGOURO", -"AGRACIACAO", -"AGRACIADO", -"AGRACIAR", -"AGRADABILISSIMO", -"AGRADAR", -"AGRADAVEL", -"AGRADECER", -"AGRADECIDO", -"AGRADECIMENTO", -"AGRADO", -"AGRADOS", -"AGRAMATICAL", -"AGRARIA", -"AGRARIO", -"AGRAVADO", -"AGRAVAMENTO", -"AGRAVANTE", -"AGRAVAR", -"AGREDIDO", -"AGREDIR", -"AGREGACAO", -"AGREGADO", -"AGREGAR", -"AGREMIACAO", -"AGREMIAR", -"AGRESSAO", -"AGRESSIVIDADE", -"AGRESSIVO", -"AGRESSOR", -"AGRESTE", -"AGRIAO", -"AGRICOLA", -"AGRICULTOR", -"AGRICULTURA", -"AGRIDOCE", -"AGRIMENSOR", -"AGROINDUSTRIA", -"AGRONOMIA", -"AGRONOMICO", -"AGRONOMO", -"AGROPECUARIA", -"AGROPECUARIO", -"AGROPECUARISTA", -"AGROTOXICO", -"AGRUPADO", -"AGRUPAMENTO", -"AGRUPAR", -"AGRURA", -"AGUA", -"AGUACEIRO", -"AGUADO", -"AGUAR", -"AGUARDAR", -"AGUARDENTE", -"AGUARRAS", -"AGUAS", -"AGUCADO", -"AGUCAR", -"AGUDEZA", -"AGUDO", -"AGUENTAR", -"AGUERRIDO", -"AGUERRIR", -"AGUIA", -"AGULHA", -"AGULHADA", -"AGULHAS", -"AI", -"AIA", -"AIATOLA", -"AIDETICO", -"AIDS", -"AIMORE", -"AINDA", -"AINO", -"AIPIM", -"AIPO", -"AIROSO", -"AJ", -"AJEITADO", -"AJEITAR", -"AJOELHAR", -"AJUDA", -"AJUDADA", -"AJUDANTE", -"AJUDAR", -"AJUIZADO", -"AJUIZAR", -"AJUNTAMENTO", -"AJUNTAR", -"AJUSTADO", -"AJUSTAMENTO", -"AJUSTAR", -"AJUSTE", -"AL", -"ALA", -"ALABARDA", -"ALADO", -"ALAGADICO", -"ALAGADO", -"ALAGAMENTO", -"ALAGAR", -"ALAGOANO", -"ALAMBIQUE", -"ALAMBRADO", -"ALAMBRE", -"ALAMEDA", -"ALAMO", -"ALANINA", -"ALARANJADO", -"ALARANJAR", -"ALARDE", -"ALARDEAR", -"ALARGAMENTO", -"ALARGAR", -"ALARIDO", -"ALARMANTE", -"ALARMAR", -"ALARME", -"ALARMISMO", -"ALARMISTA", -"ALASQUIANO", -"ALASTRAMENTO", -"ALASTRAR", -"ALATALIZACAO", -"ALATIVO", -"ALAUDE", -"ALAVANCA", -"ALAZAO", -"ALBANES", -"ALBATROZ", -"ALBEDO", -"ALBERGUE", -"ALBINISMO", -"ALBINO", -"ALBUM", -"ALBUME", -"ALBUMEN", -"ALBUMINA", -"ALCA", -"ALCACHOFRA", -"ALCACUZ", -"ALCADA", -"ALCADO", -"ALCAGUETAR", -"ALCAGUETE", -"ALCAIDE", -"ALCALI", -"ALCALINIDADE", -"ALCALINO", -"ALCALOIDE", -"ALCAMENTO", -"ALCANCADO", -"ALCANCAR", -"ALCANCAVEL", -"ALCANCE", -"ALCAPAO", -"ALCAPARRA", -"ALCAR", -"ALCATEIA", -"ALCATRA", -"ALCATRAO", -"ALCE", -"ALCENO", -"ALCINO", -"ALCOOL", -"ALCOOLATRA", -"ALCOOLICAS", -"ALCOOLICO", -"ALCOOLISMO", -"ALCOOLIZAR", -"ALCORAO", -"ALCOVA", -"ALCOVITEIRO", -"ALCUNHA", -"ALDEAMENTO", -"ALDEAO", -"ALDEBARA", -"ALDEIA", -"ALDEIDO", -"ALDRAVA", -"ALEA", -"ALEATORIA", -"ALEATORIEDADE", -"ALEATORIO", -"ALEATORIOS", -"ALECRIM", -"ALEF", -"ALEGACAO", -"ALEGAR", -"ALEGORIA", -"ALEGORICO", -"ALEGRAR", -"ALEGRE", -"ALEGRIA", -"ALEIA", -"ALEIJADO", -"ALEIJAO", -"ALEIJAR", -"ALEITAMENTO", -"ALEITAR", -"ALEIVOSIA", -"ALELUIA", -"ALEM", -"ALEMANHA", -"ALEMAO", -"ALENCARIANO", -"ALENO", -"ALENTADOR", -"ALENTAR", -"ALENTEJANO", -"ALENTO", -"ALERGENICO", -"ALERGIA", -"ALERGICA", -"ALERGICO", -"ALERTA", -"ALERTAR", -"ALETRIA", -"ALEVINO", -"ALEXANDRINO", -"ALFA", -"ALFABETICA", -"ALFABETICO", -"ALFABETIZACAO", -"ALFABETIZADO", -"ALFABETIZANDO", -"ALFABETIZAR", -"ALFABETO", -"ALFACE", -"ALFAFA", -"ALFAIATARIA", -"ALFAIATE", -"ALFANDEGA", -"ALFANDEGARIA", -"ALFANDEGARIO", -"ALFANJE", -"ALFANUMERICO", -"ALFARRABIO", -"ALFAZEMA", -"ALFERES", -"ALFINETADA", -"ALFINETAR", -"ALFINETE", -"ALFORJE", -"ALFORRIA", -"ALFORRIADO", -"ALFORRIAR", -"ALGA", -"ALGARAVIA", -"ALGARISMO", -"ALGAZARRA", -"ALGEBRA", -"ALGEBRICA", -"ALGEBRICO", -"ALGEMA", -"ALGEMAR", -"ALGEMAS", -"ALGIBEIRA", -"ALGO", -"ALGODAO", -"ALGODOAL", -"ALGODOEIRO", -"ALGOL", -"ALGONQUIANO", -"ALGONQUINO", -"ALGORITMICO", -"ALGORITMO", -"ALGOZ", -"ALGUEM", -"ALGUM", -"ALGUMA", -"ALGUMAS", -"ALGUNS", -"ALHEIO", -"ALHO", -"ALHOS", -"ALHURES", -"ALI", -"ALIADO", -"ALIANCA", -"ALIAR", -"ALIAS", -"ALIBI", -"ALICATE", -"ALICERCE", -"ALICIADOR", -"ALICIAMENTO", -"ALICIAR", -"ALIENACAO", -"ALIENADO", -"ALIENAR", -"ALIENAVEL", -"ALIENIGENA", -"ALII", -"ALIJAR", -"ALIMENTACAO", -"ALIMENTAR", -"ALIMENTICIO", -"ALIMENTO", -"ALIMENTOS", -"ALINEA", -"ALINHADO", -"ALINHAMENTO", -"ALINHAR", -"ALINHAVADO", -"ALINHAVAR", -"ALINHAVO", -"ALINHO", -"ALIQUOTA", -"ALISADO", -"ALISAR", -"ALISIO", -"ALISTAMENTO", -"ALISTAR", -"ALITERACAO", -"ALITERAR", -"ALIVIADO", -"ALIVIAR", -"ALIVIO", -"ALJAVA", -"ALLEN", -"ALMA", -"ALMANAQUE", -"ALMEJAR", -"ALMEJAVEL", -"ALMEJO", -"ALMIRANTADO", -"ALMIRANTE", -"ALMISCAR", -"ALMISCARADO", -"ALMISCARAR", -"ALMISCAREIRO", -"ALMOCAR", -"ALMOCO", -"ALMOFADA", -"ALMOFADADO", -"ALMOFADAO", -"ALMOFADINHA", -"ALMONDEGA", -"ALMOXARIFADO", -"ALMOXARIFE", -"ALO", -"ALOCACAO", -"ALOCADO", -"ALOCAR", -"ALOCUCAO", -"ALOE", -"ALOFONE", -"ALOFONIA", -"ALOFONICO", -"ALOGICO", -"ALOGISMO", -"ALOGRAFO", -"ALOIRADO", -"ALOIRAR", -"ALOJAMENTO", -"ALOJAR", -"ALOMORFE", -"ALOMORFICO", -"ALONGADO", -"ALONGAMENTO", -"ALONGAR", -"ALOPATA", -"ALOPATIA", -"ALOPATICO", -"ALOPRADO", -"ALOPRAR", -"ALOPTERO", -"ALOSSAURO", -"ALOTROPIA", -"ALOTROPICO", -"ALPACA", -"ALPARGATA", -"ALPENDRE", -"ALPINISMO", -"ALPINISTA", -"ALPINO", -"ALPISTE", -"ALQUEBRADO", -"ALQUEBRAMENTO", -"ALQUEBRAR", -"ALQUEIRE", -"ALQUIMIA", -"ALQUIMISTA", -"ALSACIANO", -"ALTA", -"ALTAICO", -"ALTANEIRO", -"ALTAR", -"ALTAS", -"ALTER", -"ALTERABILIDADE", -"ALTERACAO", -"ALTERADO", -"ALTERAR", -"ALTERAVEL", -"ALTERCACAO", -"ALTERCAR", -"ALTERNADA", -"ALTERNADAS", -"ALTERNADO", -"ALTERNADOR", -"ALTERNANCIA", -"ALTERNAR", -"ALTERNATIVA", -"ALTERNATIVO", -"ALTEROSAS", -"ALTEZA", -"ALTIMETRO", -"ALTITUDE", -"ALTIVEZ", -"ALTIVO", -"ALTO", -"ALTOS", -"ALTRUISMO", -"ALTRUISTA", -"ALTRUISTICO", -"ALTURA", -"ALUA", -"ALUCINACAO", -"ALUCINADO", -"ALUCINAMENTO", -"ALUCINANTE", -"ALUCINAR", -"ALUCINOGENO", -"ALUDIDO", -"ALUDIR", -"ALUGADO", -"ALUGAR", -"ALUGUEL", -"ALUMIADO", -"ALUMIAR", -"ALUMINIFERO", -"ALUMINIO", -"ALUNISSAGEM", -"ALUNISSAR", -"ALUNO", -"ALUNOS", -"ALUSAO", -"ALUSIVO", -"ALUVIAL", -"ALUVIAO", -"ALVARA", -"ALVEJAMENTO", -"ALVEJAR", -"ALVENARIA", -"ALVEOLADO", -"ALVEOLAR", -"ALVEOLO", -"ALVINEGRO", -"ALVISSARAR", -"ALVISSARAS", -"ALVISSAREIRO", -"ALVIVERDE", -"ALVO", -"ALVORADA", -"ALVORECER", -"ALVOROCADO", -"ALVOROCAMENTO", -"ALVOROCAR", -"ALVOROCO", -"ALVURA", -"AM", -"AMA", -"AMABILIDADE", -"AMABILISSIMO", -"AMACACADO", -"AMACACAR", -"AMACIAMENTO", -"AMACIAR", -"AMADO", -"AMADOR", -"AMADORISMO", -"AMADORISTA", -"AMADORISTICO", -"AMADRINHADO", -"AMADRINHAR", -"AMADURECER", -"AMADURECIDO", -"AMADURECIMENTO", -"AMAGO", -"AMALDICOADO", -"AMALDICOAR", -"AMALGAMA", -"AMALGAMAR", -"AMALUCADO", -"AMALUCAR", -"AMAMENTACAO", -"AMAMENTAR", -"AMANCEBADO", -"AMANHA", -"AMANHECER", -"AMANSAR", -"AMANTE", -"AMANTEIGADO", -"AMANTEIGAR", -"AMANUENSE", -"AMAPAENSE", -"AMAR", -"AMARELA", -"AMARELADO", -"AMARELAO", -"AMARELAR", -"AMARELINHA", -"AMARELO", -"AMARFANHAR", -"AMARGADO", -"AMARGAR", -"AMARGO", -"AMARGOR", -"AMARGURA", -"AMARGURADO", -"AMARGURAR", -"AMARICADO", -"AMARICO", -"AMARRA", -"AMARRACAO", -"AMARRADO", -"AMARRAR", -"AMARRAVA", -"AMARROTADO", -"AMARROTAR", -"AMASIA", -"AMASIO", -"AMASSADO", -"AMASSAMENTO", -"AMASSAR", -"AMASSOU", -"AMAVEL", -"AMAZONA", -"AMAZONENSE", -"AMAZONICO", -"AMBAR", -"AMBICAO", -"AMBICIONAR", -"AMBICIOSO", -"AMBIDESTRO", -"AMBIENCIA", -"AMBIENTAL", -"AMBIENTAR", -"AMBIENTE", -"AMBIGUIDADE", -"AMBIGUO", -"AMBITO", -"AMBIVALENCIA", -"AMBIVALENTE", -"AMBOS", -"AMBROSIA", -"AMBULANCIA", -"AMBULANTE", -"AMBULATORIAL", -"AMBULATORIO", -"AMEACAM", -"AMEACANTE", -"AMEACAR", -"AMEALHAR", -"AMEBA", -"AMEBIASE", -"AMEDRONTADOR", -"AMEDRONTAR", -"AMEDRONTRAR", -"AMEIXA", -"AMEIXEIRA", -"AMELIA", -"AMEM", -"AMENDOA", -"AMENDOADO", -"AMENDOEIRA", -"AMENDOIM", -"AMENIDADE", -"AMENIDADES", -"AMENIZADO", -"AMENIZAR", -"AMENO", -"AMERICANISMO", -"AMERICANISTA", -"AMERICANIZAR", -"AMERICANO", -"AMERICAS", -"AMERICIO", -"AMERINDIO", -"AMESQUINHADO", -"AMESQUINHAMENTO", -"AMESQUINHAR", -"AMESTRADO", -"AMESTRADOR", -"AMESTRAMENTO", -"AMESTRAR", -"AMETISTA", -"AMETODICO", -"AMIANTO", -"AMICAL", -"AMICISSIMO", -"AMIDO", -"AMIGADO", -"AMIGAVEL", -"AMIGAVELMENTE", -"AMIGDALA", -"AMIGDALITE", -"AMIGO", -"AMIGOS", -"AMIGUISSIMO", -"AMINA", -"AMINOACIDO", -"AMISTOSAMENTE", -"AMISTOSO", -"AMIUDE", -"AMIZADE", -"AMIZADES", -"AMNESIA", -"AMNESICO", -"AMNIOTICO", -"AMO", -"AMOFINACAO", -"AMOFINADO", -"AMOFINAR", -"AMOLACAO", -"AMOLADO", -"AMOLADOR", -"AMOLAR", -"AMOLECER", -"AMOLECIDO", -"AMOLECIMENTO", -"AMONIA", -"AMONIACO", -"AMONIO", -"AMONTOADO", -"AMONTOAMENTO", -"AMONTOAR", -"AMOR", -"AMORA", -"AMORAL", -"AMORALIDADE", -"AMORDACAMENTO", -"AMORDACAR", -"AMORECO", -"AMOREIRA", -"AMORENADO", -"AMORENAR", -"AMORFO", -"AMORICO", -"AMORNADO", -"AMORNAR", -"AMOROSO", -"AMORTALHADO", -"AMORTALHAR", -"AMORTECEDOR", -"AMORTECER", -"AMORTECIDO", -"AMORTECIMENTO", -"AMORTIZACAO", -"AMORTIZAR", -"AMORTIZAVEL", -"AMOSTRA", -"AMOSTRAGEM", -"AMOTINACAO", -"AMOTINADO", -"AMOTINAMENTO", -"AMOTINAR", -"AMOVIVEL", -"AMPARADO", -"AMPARAR", -"AMPARO", -"AMPERAGEM", -"AMPERE", -"AMPERIMETRO", -"AMPERSAND", -"AMPLEXO", -"AMPLIACAO", -"AMPLIADO", -"AMPLIAR", -"AMPLIDAO", -"AMPLIFICACAO", -"AMPLIFICADOR", -"AMPLIFICADORA", -"AMPLIFICAR", -"AMPLIFICAVEL", -"AMPLITUDE", -"AMPLO", -"AMPOLA", -"AMPULHETA", -"AMPUTACAO", -"AMPUTADO", -"AMPUTAR", -"AMUADO", -"AMUAR", -"AMULETO", -"AMURADA", -"AN", -"ANA", -"ANABATISMO", -"ANABATISTA", -"ANABOLICO", -"ANABOLIZANTE", -"ANACOLUTO", -"ANACONDA", -"ANACORETA", -"ANACRONICO", -"ANACRONISMO", -"ANAEROBICO", -"ANAEROBIO", -"ANAFASE", -"ANAFILATICO", -"ANAFILAXIA", -"ANAFORA", -"ANAGLIFO", -"ANAGRAMA", -"ANAGUA", -"ANAIS", -"ANAL", -"ANALFABETISMO", -"ANALFABETO", -"ANALGESICO", -"ANALISADO", -"ANALISAR", -"ANALISE", -"ANALISTA", -"ANALITICA", -"ANALITICO", -"ANALOGIA", -"ANALOGICO", -"ANALOGO", -"ANAO", -"ANARQUIA", -"ANARQUICO", -"ANARQUISMO", -"ANARQUISTA", -"ANARQUIZAR", -"ANASTROFE", -"ANATEMA", -"ANATOMIA", -"ANATOMICO", -"ANCA", -"ANCESTRAL", -"ANCHO", -"ANCHOVA", -"ANCIAO", -"ANCILOSSAURO", -"ANCINHO", -"ANCONEO", -"ANCORA", -"ANCORADOURO", -"ANCORAR", -"ANDA", -"ANDADA", -"ANDADOR", -"ANDAIME", -"ANDALUZ", -"ANDAMENTO", -"ANDANCA", -"ANDANTE", -"ANDAR", -"ANDARILHO", -"ANDINO", -"ANDOR", -"ANDORINHA", -"ANDORRANO", -"ANDRAJO", -"ANDRAJOSO", -"ANDROCEU", -"ANDROGINIA", -"ANDROGINO", -"ANDROIDE", -"ANDROLOGIA", -"ANDROLOGISTA", -"ANDROMEDA", -"ANDROSPERMA", -"ANEDOTA", -"ANEDOTARIO", -"ANEDOTISTA", -"ANEL", -"ANELADO", -"ANELAR", -"ANELIDEO", -"ANEMIA", -"ANEMICO", -"ANEMONA", -"ANESTESIA", -"ANESTESIANTE", -"ANESTESIAR", -"ANESTESICO", -"ANESTESIOLOGIA", -"ANESTESIOLOGICO", -"ANESTESIOLOGISTA", -"ANESTESISTA", -"ANEURISMA", -"ANEXACAO", -"ANEXADO", -"ANEXAR", -"ANEXO", -"ANFETAMINA", -"ANFIBIO", -"ANFIBOLOGIA", -"ANFITEATRO", -"ANFITRIAO", -"ANFORA", -"ANGARIAR", -"ANGELICAL", -"ANGELICO", -"ANGELUS", -"ANGINA", -"ANGIOMA", -"ANGIOSPERMA", -"ANGLICANISMO", -"ANGLICANO", -"ANGLICISMO", -"ANGLO", -"ANGLOFONO", -"ANGOLANO", -"ANGORA", -"ANGRA", -"ANGSTROM", -"ANGU", -"ANGULAR", -"ANGULO", -"ANGULOSO", -"ANGUSTIA", -"ANGUSTIADO", -"ANGUSTIANTE", -"ANGUSTIAR", -"ANHANGA", -"ANHANGUERA", -"ANIDRIDO", -"ANIL", -"ANILINA", -"ANIMACAO", -"ANIMADO", -"ANIMADOR", -"ANIMAIS", -"ANIMAL", -"ANIMALESCO", -"ANIMAR", -"ANIMISMO", -"ANIMISTA", -"ANIMO", -"ANIMOSIDADE", -"ANIMOSO", -"ANINHAR", -"ANION", -"ANIQUILACAO", -"ANIQUILADO", -"ANIQUILAMENTO", -"ANIQUILAR", -"ANIS", -"ANISTIA", -"ANISTIADO", -"ANISTIAR", -"ANISTIAVEL", -"ANIVERSARIANTE", -"ANIVERSARIAR", -"ANIVERSARIO", -"ANJO", -"ANO", -"ANODINO", -"ANODO", -"ANOITECER", -"ANOMALIA", -"ANOMALO", -"ANONIMA", -"ANONIMATO", -"ANONIMO", -"ANORAQUE", -"ANOREXIA", -"ANOREXICO", -"ANORMAL", -"ANORMALIDADE", -"ANOS", -"ANOTACAO", -"ANOTADA", -"ANOTADO", -"ANOTAR", -"ANSEIO", -"ANSIA", -"ANSIAR", -"ANSIEDADE", -"ANSIOSO", -"ANTA", -"ANTAGONICO", -"ANTAGONISMO", -"ANTAGONISTA", -"ANTAGONISTICO", -"ANTAGONIZAR", -"ANTANHO", -"ANTARTICO", -"ANTE", -"ANTEBRACO", -"ANTECAMARA", -"ANTECEDENCIA", -"ANTECEDENTE", -"ANTECEDENTES", -"ANTECEDER", -"ANTECESSOR", -"ANTECIPACAO", -"ANTECIPADO", -"ANTECIPAR", -"ANTEDILUVIANO", -"ANTEGOZAR", -"ANTEGOZO", -"ANTEMAO", -"ANTENA", -"ANTENAS", -"ANTENISTA", -"ANTENUPCIAL", -"ANTEONTEM", -"ANTEPARO", -"ANTEPASSADO", -"ANTEPASTO", -"ANTEPENULTIMO", -"ANTEPOR", -"ANTEPROJETO", -"ANTERIOR", -"ANTERIORIDADE", -"ANTES", -"ANTEVER", -"ANTEVIDENCIA", -"ANTEVISAO", -"ANTEVOCALICO", -"ANTIACIDO", -"ANTIADERENTE", -"ANTIAEREO", -"ANTIALERGICO", -"ANTIANTIDIARREICO", -"ANTIBIOTICO", -"ANTICARIE", -"ANTICASPA", -"ANTICICLONE", -"ANTICOAGULANTE", -"ANTICONCEPCIONAL", -"ANTICONGELANTE", -"ANTICONSTITUCIONAL", -"ANTICORPO", -"ANTICRISTO", -"ANTIDEPRESSIVO", -"ANTIDERRAPANTE", -"ANTIDOPING", -"ANTIDOTO", -"ANTIESPASMODICO", -"ANTIETICO", -"ANTIGENO", -"ANTIGO", -"ANTIGRIPAL", -"ANTIGUIDADE", -"ANTILHANO", -"ANTILOGARITMO", -"ANTILOPE", -"ANTIMATERIA", -"ANTIMISSIL", -"ANTIMONIO", -"ANTIOFIDICO", -"ANTIOXIDANTE", -"ANTIPATIA", -"ANTIPATICO", -"ANTIPATIZAR", -"ANTIPODA", -"ANTIQUADO", -"ANTIQUARIO", -"ANTIQUISSIMO", -"ANTITESE", -"ANTITETANICO", -"ANTITETICO", -"ANTITRUSTE", -"ANTIVIRUS", -"ANTOLOGIA", -"ANTOLOGICO", -"ANTONIMIA", -"ANTONIMO", -"ANTONOMASIA", -"ANTONOMASTICO", -"ANTRACITO", -"ANTRO", -"ANTROPOCENTRICO", -"ANTROPOCENTRISMO", -"ANTROPOCENTRISTA", -"ANTROPOFAGIA", -"ANTROPOFAGICO", -"ANTROPOFAGO", -"ANTROPOIDE", -"ANTROPOLOGIA", -"ANTROPOLOGICO", -"ANTROPOLOGO", -"ANTROPOMORFICO", -"ANTROPOMORFISMO", -"ANTROPOPITECO", -"ANTURIO", -"ANU", -"ANUAL", -"ANUARIO", -"ANUENCIA", -"ANUENIO", -"ANUIDADE", -"ANUIR", -"ANULACAO", -"ANULAR", -"ANUNCIACAO", -"ANUNCIANTE", -"ANUNCIAR", -"ANUNCIO", -"ANURESE", -"ANURETICO", -"ANUS", -"ANUVIADO", -"ANUVIAR", -"ANVERSO", -"ANZOL", -"AO", -"AONDE", -"AORISTO", -"AORTA", -"AOS", -"AP", -"APACHE", -"APADRINHAMENTO", -"APADRINHAR", -"APAGADO", -"APAGADOR", -"APAGAR", -"APAIXONADO", -"APAIXONANTE", -"APAIXONAR", -"APALERMADO", -"APALERMAR", -"APALPACAO", -"APALPADELA", -"APALPAMENTO", -"APALPAR", -"APANAGIO", -"APANHADO", -"APANHAMENTO", -"APANHAR", -"APANIGUADO", -"APANIGUAR", -"APARA", -"APARADOR", -"APARAFUSAR", -"APARAR", -"APARATO", -"APARECE", -"APARECER", -"APARELHAGEM", -"APARELHAMENTO", -"APARELHAR", -"APARELHO", -"APARELHOS", -"APARENCIA", -"APARENTADO", -"APARENTAR", -"APARENTE", -"APARICAO", -"APARTAMENTO", -"APARTAR", -"APARTE", -"APARTHEID", -"APARVALHADO", -"APARVALHAR", -"APASCENTAR", -"APASSIVADO", -"APASSIVADOR", -"APASSIVADORA", -"APASSIVAR", -"APATETADO", -"APATETAR", -"APATIA", -"APATICO", -"APATOSSAURO", -"APATRIDA", -"APAVORADO", -"APAVORANTE", -"APAVORAR", -"APAZIGUADOR", -"APAZIGUAMENTO", -"APAZIGUAR", -"APEAR", -"APEDREJAMENTO", -"APEDREJAR", -"APEGAMENTO", -"APEGAR", -"APEGO", -"APELACAO", -"APELADO", -"APELAMENTO", -"APELANTE", -"APELAR", -"APELATIVA", -"APELATIVO", -"APELATORIO", -"APELAVEL", -"APELIDAR", -"APELIDO", -"APELO", -"APENAS", -"APENDICE", -"APENDICECTOMIA", -"APENDICITE", -"APEPSIA", -"APERFEICOAR", -"APERITIVO", -"APERREACAO", -"APERREADO", -"APERREAMENTO", -"APERREAR", -"APERTADO", -"APERTAR", -"APERTO", -"APESAR", -"APESSOADO", -"APETECER", -"APETITE", -"APETITOSO", -"APETRECHAR", -"APETRECHO", -"APEX", -"APIARIO", -"APICE", -"APICOLA", -"APICULTOR", -"APICULTURA", -"APIEDAR", -"APIMENTADO", -"APIMENTAR", -"APINHAR", -"APIS", -"APITAR", -"APITO", -"APLACAR", -"APLAINAR", -"APLAUDIR", -"APLAUSO", -"APLICABILIDADE", -"APLICACAO", -"APLICADA", -"APLICADO", -"APLICAR", -"APLICATIVO", -"APLICAVEL", -"APNEIA", -"APOCALIPSE", -"APOCALIPTICO", -"APOCOPADO", -"APOCOPAR", -"APOCOPE", -"APOCRIFO", -"APODRECER", -"APODRECIMENTO", -"APOGEU", -"APOIADO", -"APOIAR", -"APOIO", -"APOLICE", -"APOLITICO", -"APOLO", -"APOLOGETICO", -"APOLOGIA", -"APONTADO", -"APONTADOR", -"APONTAMENTO", -"APONTAR", -"APOPLETICO", -"APOPLEXIA", -"APOQUENTACAO", -"APOQUENTADO", -"APOQUENTAR", -"APOR", -"APORRINHACAO", -"APORRINHAR", -"APORTAR", -"APORTE", -"APORTUGUESAMENTO", -"APORTUGUESAR", -"APOS", -"APOSENTADO", -"APOSENTADORIA", -"APOSENTAR", -"APOSENTO", -"APOSICAO", -"APOSITIVO", -"APOSSAR", -"APOSTA", -"APOSTADO", -"APOSTADOR", -"APOSTAR", -"APOSTASE", -"APOSTATA", -"APOSTILA", -"APOSTILAR", -"APOSTO", -"APOSTOLADO", -"APOSTOLAR", -"APOSTOLICO", -"APOSTOLO", -"APOSTROFE", -"APOSTROFO", -"APOTEMA", -"APOTEOSE", -"APOTEOTICO", -"APRAZAMENTO", -"APRAZAR", -"APRAZER", -"APRAZIBILIDADE", -"APRAZIVEL", -"APRE", -"APRECIACAO", -"APRECIADOR", -"APRECIAR", -"APRECIAVEL", -"APRECO", -"APREENDER", -"APREENSAO", -"APREENSIVEL", -"APREENSIVO", -"APREGOADO", -"APREGOAR", -"APRENDER", -"APRENDIZ", -"APRENDIZADO", -"APRENDIZAGEM", -"APRESENTACAO", -"APRESENTADO", -"APRESENTADOR", -"APRESENTAR", -"APRESENTAVEL", -"APRESSADO", -"APRESSAR", -"APRIMORADO", -"APRIMORAMENTO", -"APRIMORAR", -"APRIORISMO", -"APRIORISTA", -"APRIORISTICO", -"APRISIONAMENTO", -"APRISIONAR", -"APROFUNDAMENTO", -"APROFUNDAR", -"APRONTAR", -"APROPRIACAO", -"APROPRIADO", -"APROPRIAR", -"APROVACAO", -"APROVADO", -"APROVAR", -"APROVEITADO", -"APROVEITADOR", -"APROVEITAMENTO", -"APROVEITAR", -"APROVEITAVEL", -"APROVISIONAMENTO", -"APROVISIONAR", -"APROXIMACAO", -"APROXIMADAMENTE", -"APROXIMADO", -"APROXIMAR", -"APRUMADO", -"APRUMAR", -"APRUMO", -"APTIDAO", -"APTO", -"APUNHALADO", -"APUNHALAR", -"APUPAR", -"APUPO", -"APURACAO", -"APURADO", -"APURAR", -"APURO", -"APUROS", -"AQ", -"AQUARELA", -"AQUARELISTA", -"AQUARIO", -"AQUARTELADO", -"AQUARTELAR", -"AQUATICO", -"AQUECER", -"AQUECIMENTO", -"AQUEDUTO", -"AQUELA", -"AQUELE", -"AQUEM", -"AQUI", -"AQUIESCENCIA", -"AQUIESCER", -"AQUIETAR", -"AQUILATACAO", -"AQUILATAR", -"AQUILINO", -"AQUILO", -"AQUINHOAR", -"AQUISICAO", -"AQUISITIVO", -"AQUOSO", -"AR", -"ARABE", -"ARABESCO", -"ARABICO", -"ARACNIDEO", -"ARACNOFOBIA", -"ARADO", -"ARAGEM", -"ARAMAICO", -"ARAME", -"ARANHA", -"ARAPONGA", -"ARAPUCA", -"ARAR", -"ARARA", -"ARARUTA", -"ARAUAQUI", -"ARAUCARIA", -"ARAUTO", -"ARBITRAGEM", -"ARBITRAR", -"ARBITRARIEDADE", -"ARBITRARIO", -"ARBITRIO", -"ARBITRO", -"ARBOREO", -"ARBORESCENCIA", -"ARBORESCENTE", -"ARBORESCER", -"ARBORETO", -"ARBORICOLA", -"ARBORIZACAO", -"ARBORIZADO", -"ARBORIZAR", -"ARBUSTO", -"ARCA", -"ARCABOUCO", -"ARCABUZ", -"ARCADA", -"ARCADISMO", -"ARCADO", -"ARCAICO", -"ARCAISMO", -"ARCANJO", -"ARCANO", -"ARCAR", -"ARCEBISPADO", -"ARCEBISPAL", -"ARCEBISPO", -"ARCHOTE", -"ARCO", -"ARCTURO", -"ARDENCIA", -"ARDENTE", -"ARDER", -"ARDIDO", -"ARDIL", -"ARDILOSO", -"ARDOR", -"ARDOSIA", -"ARDUO", -"ARE", -"AREA", -"AREIA", -"AREJADO", -"AREJAMENTO", -"AREJAR", -"ARENA", -"ARENOSO", -"ARENQUE", -"ARES", -"ARESTA", -"ARFANTE", -"ARFAR", -"ARGAMASSA", -"ARGELINO", -"ARGENTINO", -"ARGILA", -"ARGILOSO", -"ARGO", -"ARGOLA", -"ARGONAUTA", -"ARGONIO", -"ARGOT", -"ARGUCIA", -"ARGUICAO", -"ARGUIDO", -"ARGUIDOT", -"ARGUIR", -"ARGUMENTACAO", -"ARGUMENTAR", -"ARGUMENTATIVO", -"ARGUMENTO", -"ARGUTO", -"ARIA", -"ARIANO", -"ARIDEZ", -"ARIDO", -"ARIES", -"ARIETE", -"ARIRANHA", -"ARISCO", -"ARISTOCRACIA", -"ARISTOCRATA", -"ARISTOCRATICO", -"ARISTOTELICO", -"ARISTOTELISMO", -"ARITMETICA", -"ARITMETICO", -"ARLEQUIM", -"ARMA", -"ARMACAO", -"ARMADA", -"ARMADAS", -"ARMADILHA", -"ARMADO", -"ARMADOR", -"ARMADURA", -"ARMAGEDON", -"ARMAMENTISMO", -"ARMAMENTISTA", -"ARMAMENTO", -"ARMAMENTOS", -"ARMAR", -"ARMARINHO", -"ARMARIO", -"ARMAS", -"ARMAZEM", -"ARMAZENADO", -"ARMAZENAGEM", -"ARMAZENAMENTO", -"ARMAZENAR", -"ARMENIO", -"ARMINHO", -"ARMISTICIO", -"ARO", -"AROEIRA", -"AROMA", -"AROMATERAPIA", -"AROMATICO", -"AROMATIZACAO", -"AROMATIZADO", -"AROMATIZANTE", -"AROMATIZAR", -"ARPAO", -"ARPEJO", -"ARPOAR", -"ARQUEADO", -"ARQUEAMENTO", -"ARQUEAR", -"ARQUEIRO", -"ARQUEJANTE", -"ARQUEJAR", -"ARQUEJO", -"ARQUEOLOGIA", -"ARQUEOLOGICO", -"ARQUEOLOGO", -"ARQUEOPTERIX", -"ARQUETIPICO", -"ARQUETIPO", -"ARQUIBANCADA", -"ARQUIDIOCESANO", -"ARQUIDIOCESE", -"ARQUIDUCADO", -"ARQUIDUCAL", -"ARQUIDUQUE", -"ARQUIDUQUESA", -"ARQUIINIMIGO", -"ARQUIMEDIANO", -"ARQUIPELAGO", -"ARQUITETAR", -"ARQUITETO", -"ARQUITETONICO", -"ARQUITETURA", -"ARQUITETURAL", -"ARQUIVAMENT", -"ARQUIVAMENTO", -"ARQUIVAR", -"ARQUIVISTA", -"ARQUIVO", -"ARRABALDE", -"ARRAIA", -"ARRAIAL", -"ARRAIGADO", -"ARRAIGAR", -"ARRANCADA", -"ARRANCADO", -"ARRANCAR", -"ARRANHADO", -"ARRANHADURA", -"ARRANHAO", -"ARRANHAR", -"ARRANJADO", -"ARRANJAR", -"ARRANJO", -"ARRANQUE", -"ARRASADO", -"ARRASADOR", -"ARRASAMENTO", -"ARRASANTE", -"ARRASAR", -"ARRASTADO", -"ARRASTAO", -"ARRASTAR", -"ARRAZOADO", -"ARRAZOAMENTO", -"ARRAZOAR", -"ARRE", -"ARREBANHAR", -"ARREBATADO", -"ARREBATAMENTO", -"ARREBATAR", -"ARREBENTACAO", -"ARREBENTADO", -"ARREBENTAR", -"ARREBITADO", -"ARREBITAR", -"ARREBITE", -"ARRECADACAO", -"ARRECADAR", -"ARRECIFE", -"ARREDAR", -"ARREDAVEL", -"ARREDONDADO", -"ARREDONDAMENTO", -"ARREDONDAR", -"ARREDOR", -"ARREDORES", -"ARREFECER", -"ARREFECIMENTO", -"ARREGACAR", -"ARREGALADO", -"ARREGALAR", -"ARREGANHADO", -"ARREGANHAR", -"ARREMATAR", -"ARREMATE", -"ARREMESSAR", -"ARREMESSO", -"ARREMETER", -"ARREMETIDA", -"ARRENDADO", -"ARRENDAR", -"ARREPENDIDO", -"ARREPENDIMENTO", -"ARREPIADO", -"ARREPIANTE", -"ARREPIAR", -"ARREPIO", -"ARRETADO", -"ARREVESADO", -"ARREVESAMENTO", -"ARREVESAR", -"ARRIADO", -"ARRIAR", -"ARRIMO", -"ARRISCADO", -"ARRISCAR", -"ARRITMIA", -"ARRITMICO", -"ARROBA", -"ARROCHADO", -"ARROCHAR", -"ARROCHO", -"ARROGANCIA", -"ARROGANTE", -"ARROIO", -"ARROJADO", -"ARROJAMENTO", -"ARROJAR", -"ARROJO", -"ARROLAMENTO", -"ARROLAR", -"ARROMBA", -"ARROMBADOR", -"ARROMBAMENTO", -"ARROMBAR", -"ARROTAR", -"ARROTO", -"ARROUBO", -"ARROZ", -"ARROZAL", -"ARRUACA", -"ARRUACEIRO", -"ARRUDA", -"ARRUELA", -"ARRUINADO", -"ARRUINAR", -"ARRULHAR", -"ARRULHO", -"ARRUMACAO", -"ARRUMADEIRA", -"ARRUMAR", -"ARSENAL", -"ARSENICO", -"ARSENIO", -"ART", -"ARTE", -"ARTEFATO", -"ARTEIRO", -"ARTELHO", -"ARTEMISIA", -"ARTERIA", -"ARTERIAL", -"ARTERIOSCLEROSE", -"ARTES", -"ARTESANAL", -"ARTESANATO", -"ARTESAO", -"ARTESIANO", -"ARTICO", -"ARTICULACAO", -"ARTICULADA", -"ARTICULADO", -"ARTICULADOR", -"ARTICULAR", -"ARTICULISTA", -"ARTIFICE", -"ARTIFICIAL", -"ARTIFICIO", -"ARTIGO", -"ARTILHARIA", -"ARTILHEIRO", -"ARTIMANHA", -"ARTISTA", -"ARTISTICA", -"ARTISTICAS", -"ARTISTICO", -"ARTRITE", -"ARTROPODE", -"ARTURIANO", -"ARUAQUE", -"ARVORE", -"ARVOREDO", -"ARVORES", -"AS", -"ASA", -"ASBESTO", -"ASCENDENCIA", -"ASCENDENTE", -"ASCENDER", -"ASCENSAO", -"ASCENSORISTA", -"ASCETA", -"ASCETICO", -"ASCII", -"ASCO", -"ASCORBICO", -"ASFALTAR", -"ASFALTO", -"ASFIXIA", -"ASFIXIANTE", -"ASFIXIAR", -"ASIATICO", -"ASIATICOS", -"ASILADO", -"ASILAR", -"ASILO", -"ASMA", -"ASMATICO", -"ASNEIRA", -"ASNO", -"ASPARGO", -"ASPARTAME", -"ASPAS", -"ASPECTO", -"ASPEREZA", -"ASPERGIMENTO", -"ASPERGIR", -"ASPERO", -"ASPIRACAO", -"ASPIRADOR", -"ASPIRANTE", -"ASPIRAR", -"ASPIRINA", -"ASQUEROSO", -"ASSADEIRA", -"ASSADO", -"ASSALARIADO", -"ASSALARIAR", -"ASSALTANTE", -"ASSALTAR", -"ASSALTO", -"ASSANHAMENTO", -"ASSANHAR", -"ASSAR", -"ASSASSINAR", -"ASSASSINATO", -"ASSASSINIO", -"ASSASSINO", -"ASSAZ", -"ASSEADO", -"ASSEAR", -"ASSECLA", -"ASSEDIAR", -"ASSEDIO", -"ASSEGURADO", -"ASSEGURAR", -"ASSEIO", -"ASSEMBLEIA", -"ASSEMBLER", -"ASSEMELHAR", -"ASSENTADO", -"ASSENTAMENTO", -"ASSENTAR", -"ASSENTO", -"ASSEPSIA", -"ASSEPTICO", -"ASSERTIVO", -"ASSESSOR", -"ASSESSORAMENTO", -"ASSESSORAR", -"ASSESSORIA", -"ASSEVERAR", -"ASSEXUADO", -"ASSEXUAL", -"ASSIDUIDADE", -"ASSIDUO", -"ASSIM", -"ASSIMETRIA", -"ASSIMETRICO", -"ASSIMILACAO", -"ASSIMILAR", -"ASSIMILAVEL", -"ASSIMPTOTA", -"ASSIMPTOTICO", -"ASSINADO", -"ASSINALACAO", -"ASSINALADO", -"ASSINALAMENTO", -"ASSINALAR", -"ASSINANTE", -"ASSINAR", -"ASSINATURA", -"ASSINCRONO", -"ASSINDETICO", -"ASSINDETO", -"ASSIRIO", -"ASSIRIOLOGIA", -"ASSISTENCIA", -"ASSISTENCIAL", -"ASSISTENTE", -"ASSISTIR", -"ASSOALHO", -"ASSOAR", -"ASSOBERBADO", -"ASSOBERBAMENTO", -"ASSOBERBAR", -"ASSOBIAR", -"ASSOBIO", -"ASSOCIACAO", -"ASSOCIADO", -"ASSOCIAR", -"ASSOCIATIVIDADE", -"ASSOCIATIVO", -"ASSOLAR", -"ASSOMBRACAO", -"ASSOMBRADO", -"ASSOMBRAMENTO", -"ASSOMBRAR", -"ASSOMBRO", -"ASSOMBROSO", -"ASSOMPAR", -"ASSOPRAR", -"ASSOPRO", -"ASSUMIDO", -"ASSUMIR", -"ASSUNCAO", -"ASSUNTAR", -"ASSUNTO", -"ASSUNTOS", -"ASSUSTADICO", -"ASSUSTADO", -"ASSUSTADOR", -"ASSUSTAR", -"ASTATINIO", -"ASTECA", -"ASTERISCO", -"ASTEROIDAL", -"ASTEROIDE", -"ASTIGMATA", -"ASTIGMATICO", -"ASTIGMATISMO", -"ASTRAL", -"ASTRO", -"ASTROFISICA", -"ASTROFISICO", -"ASTROLABIO", -"ASTROLOGIA", -"ASTROLOGICO", -"ASTROLOGO", -"ASTRONAUTA", -"ASTRONAUTICA", -"ASTRONAUTICO", -"ASTRONAVE", -"ASTRONOMIA", -"ASTRONOMICA", -"ASTRONOMICO", -"ASTRONOMICOS", -"ASTRONOMO", -"ASTUCIA", -"ASTUCIOSO", -"ASTUTO", -"AT", -"ATA", -"ATABALHOADO", -"ATABALHOAMENTO", -"ATABALHOAR", -"ATABAQUE", -"ATACADISTA", -"ATACADO", -"ATACANTE", -"ATACAR", -"ATACAVEL", -"ATACHE", -"ATADAS", -"ATADO", -"ATADURA", -"ATALHAR", -"ATALHO", -"ATAPETADO", -"ATAPETAR", -"ATAQUE", -"ATAR", -"ATARANTADO", -"ATARANTAR", -"ATARDAR", -"ATAREFADO", -"ATAREFAMENTO", -"ATAREFAR", -"ATARRACADO", -"ATAUDE", -"ATAVIADO", -"ATAVIAR", -"ATAZANAR", -"ATE", -"ATEAR", -"ATEISMO", -"ATEISTA", -"ATELIE", -"ATELIER", -"ATEMORIZANTE", -"ATEMORIZAR", -"ATEMPORAL", -"ATENCAO", -"ATENCIOSO", -"ATENDENTE", -"ATENDER", -"ATENDIMENTO", -"ATENEU", -"ATENTADO", -"ATENTAR", -"ATENTO", -"ATENUACAO", -"ATENUADO", -"ATENUANTE", -"ATENUAR", -"ATER", -"ATERRADO", -"ATERRADOR", -"ATERRAR", -"ATERRISSAGEM", -"ATERRISSAR", -"ATERRO", -"ATERRORIZADO", -"ATERRORIZANTE", -"ATERRORIZAR", -"ATESTACAO", -"ATESTADO", -"ATESTAR", -"ATEU", -"ATICAR", -"ATIMO", -"ATINADO", -"ATINAR", -"ATINGIDO", -"ATINGIR", -"ATINGIVEL", -"ATIPICO", -"ATIRADEIRA", -"ATIRAR", -"ATITUDE", -"ATIVA", -"ATIVACAO", -"ATIVADO", -"ATIVAR", -"ATIVIDADE", -"ATIVIDADES", -"ATIVISMO", -"ATIVISTA", -"ATIVO", -"ATLANTICO", -"ATLAS", -"ATLETA", -"ATLETICA", -"ATLETICANO", -"ATLETICO", -"ATLETISMO", -"ATMOSFERA", -"ATMOSFERICA", -"ATMOSFERICO", -"ATO", -"ATOL", -"ATOLADO", -"ATOLAR", -"ATOMICA", -"ATOMICO", -"ATOMO", -"ATONA", -"ATONAL", -"ATONALIDADE", -"ATONITO", -"ATONO", -"ATOR", -"ATORDOADO", -"ATORDOAMENTO", -"ATORDOANTE", -"ATORDOAR", -"ATORMENTADO", -"ATORMENTAR", -"ATRACACAO", -"ATRACADOURO", -"ATRACAO", -"ATRACAR", -"ATRAENTE", -"ATRAICOADO", -"ATRAICOAR", -"ATRAIR", -"ATRAPALHACAO", -"ATRAPALHADO", -"ATRAPALHAR", -"ATRAS", -"ATRASADO", -"ATRASAR", -"ATRASO", -"ATRATIVO", -"ATRATIVOS", -"ATRAVANCAMENTO", -"ATRAVANCAR", -"ATRAVES", -"ATRAVESSADO", -"ATRAVESSADOR", -"ATRAVESSAR", -"ATRELAR", -"ATREVIDO", -"ATREVIMENTO", -"ATRIBUICAO", -"ATRIBUIR", -"ATRIBULACAO", -"ATRIBULADO", -"ATRIBULAR", -"ATRIBUTIVO", -"ATRIBUTO", -"ATRIO", -"ATRISTAR", -"ATRITAR", -"ATRITO", -"ATRIZ", -"ATROCIDADE", -"ATROFIA", -"ATROFIADO", -"ATROFIAMENTO", -"ATROFIAR", -"ATROPELACAO", -"ATROPELADO", -"ATROPELAMENTO", -"ATROPELAR", -"ATROPELO", -"ATROZ", -"ATUACAO", -"ATUAL", -"ATUALIDADE", -"ATUALIZACAO", -"ATUALIZADA", -"ATUALIZADO", -"ATUALIZAR", -"ATUALMENTE", -"ATUANTE", -"ATUAR", -"ATUARIAL", -"ATULHADO", -"ATULHAMENTO", -"ATULHAR", -"ATUM", -"ATURAR", -"ATURDIDO", -"ATURDIR", -"AU", -"AUDACIA", -"AUDACIOSO", -"AUDAZ", -"AUDICAO", -"AUDIENCIA", -"AUDIO", -"AUDIOVISUAL", -"AUDITIVO", -"AUDITOR", -"AUDITORAR", -"AUDITORIA", -"AUDITORIO", -"AUDIVEL", -"AUE", -"AUFERIR", -"AUGE", -"AUGURAR", -"AUGURIO", -"AUGUSTO", -"AULA", -"AUMENTADO", -"AUMENTADOS", -"AUMENTAR", -"AUMENTATIVO", -"AUMENTO", -"AURA", -"AUREA", -"AUREO", -"AUREOLA", -"AURICULA", -"AURICULAR", -"AURIFERO", -"AURIVERDE", -"AURORA", -"AUSCULTACAO", -"AUSCULTAR", -"AUSENCIA", -"AUSENTE", -"AUSPICIAR", -"AUSPICIO", -"AUSPICIOSO", -"AUSTERIDADE", -"AUSTERO", -"AUSTRAL", -"AUSTRALASIO", -"AUSTRALIANO", -"AUSTRALOPITECO", -"AUSTRIACO", -"AUTARQUIA", -"AUTENTICACAO", -"AUTENTICADO", -"AUTENTICAR", -"AUTENTICIDADE", -"AUTENTICO", -"AUTHOR", -"AUTISMO", -"AUTISTA", -"AUTISTICO", -"AUTO", -"AUTOBIOGRAFIA", -"AUTOBIOGRAFICO", -"AUTOCLAVE", -"AUTOCOLANTE", -"AUTOCONFIANCA", -"AUTOCONTROLE", -"AUTOCRITICA", -"AUTOCTONE", -"AUTODEFESA", -"AUTODIDATA", -"AUTODISCIPLINA", -"AUTODOMINIO", -"AUTODROMO", -"AUTOGRAFAR", -"AUTOGRAFICO", -"AUTOGRAFO", -"AUTOMACAO", -"AUTOMATICA", -"AUTOMATICO", -"AUTOMATIZACAO", -"AUTOMATIZADO", -"AUTOMATIZAR", -"AUTOMATO", -"AUTOMEDICACAO", -"AUTOMOBILISMO", -"AUTOMOBILISTA", -"AUTOMOBILISTICO", -"AUTOMOTIVO", -"AUTOMOTORES", -"AUTOMOVEL", -"AUTONOMIA", -"AUTONOMO", -"AUTOPECA", -"AUTOPISTA", -"AUTOPSIA", -"AUTOR", -"AUTORAL", -"AUTORAMA", -"AUTORES", -"AUTORIA", -"AUTORIDADE", -"AUTORITARIO", -"AUTORITARISMO", -"AUTORIZACAO", -"AUTORIZADO", -"AUTORIZAR", -"AUTOS", -"AUTUACAO", -"AUTUAR", -"AUXILIAR", -"AUXILIARES", -"AUXILIO", -"AV", -"AVACALHACAO", -"AVACALHADO", -"AVACALHAR", -"AVAL", -"AVALANCHE", -"AVALIACAO", -"AVALIADO", -"AVALIADOR", -"AVALIAR", -"AVALISTA", -"AVALIZADO", -"AVALIZAR", -"AVANCADO", -"AVANCAR", -"AVANCO", -"AVANTAJADO", -"AVANTAJAR", -"AVANTE", -"AVARENTO", -"AVAREZA", -"AVARIA", -"AVARIADO", -"AVARIAR", -"AVARO", -"AVASSALADOR", -"AVASSALAMENTO", -"AVASSALAR", -"AVATAR", -"AVE", -"AVEIA", -"AVELA", -"AVELUDADO", -"AVELUDAR", -"AVENCA", -"AVENIDA", -"AVENTAL", -"AVENTAR", -"AVENTURA", -"AVENTURADO", -"AVENTURAR", -"AVENTUREIRO", -"AVERIGUACAO", -"AVERIGUAR", -"AVERIGUAVEL", -"AVERMELHADO", -"AVERMELHAR", -"AVERSAO", -"AVERSO", -"AVES", -"AVESSAS", -"AVESSO", -"AVESTRUZ", -"AVEXADO", -"AVEXAR", -"AVIACAO", -"AVIADOR", -"AVIAMENTO", -"AVIAO", -"AVIAR", -"AVIARIO", -"AVICOLA", -"AVICULTOR", -"AVICULTURA", -"AVIDEZ", -"AVIDO", -"AVILTADO", -"AVILTAMENTO", -"AVILTANTE", -"AVILTAR", -"AVIOES", -"AVISADO", -"AVISAR", -"AVISO", -"AVISTAR", -"AVITAMINOSE", -"AVIVAMENTO", -"AVIVAR", -"AVIZINHAR", -"AVO", -"AVOADO", -"AVOCAR", -"AVOGRADO", -"AVOLUMAR", -"AVULSO", -"AX", -"AXADREZADO", -"AXADREZAR", -"AXE", -"AXIAL", -"AXILA", -"AXILAR", -"AXIOMA", -"AXIOMATICO", -"AZ", -"AZAFAMA", -"AZALEIA", -"AZAR", -"AZARADO", -"AZARAO", -"AZARAR", -"AZARENTO", -"AZEDADO", -"AZEDAR", -"AZEDO", -"AZEITE", -"AZEITONA", -"AZERBAIJANO", -"AZIA", -"AZIMO", -"AZIMUTE", -"AZOTO", -"AZUCRINADO", -"AZUCRINANTE", -"AZUCRINAR", -"AZUL", -"AZULADO", -"AZULAO", -"AZULEJADOR", -"AZULEJAR", -"AZULEJISTA", -"AZULEJO", -"B", -"BA", -"BABA", -"BABACA", -"BABACU", -"BABADOR", -"BABALAO", -"BABALORIXA", -"BABAQUICE", -"BABAR", -"BABEL", -"BABOSA", -"BABUINO", -"BACALHAU", -"BACALHOADA", -"BACAMARTE", -"BACANA", -"BACANAL", -"BACARA", -"BACHAREL", -"BACHARELADO", -"BACIA", -"BACIADA", -"BACILO", -"BACLAVA", -"BACO", -"BACTERIA", -"BACTERIANO", -"BACTERIOLOGIA", -"BACTERIOLOGICA", -"BACTERIOLOGICO", -"BACTERIOLOGISTA", -"BADALACAO", -"BADALADA", -"BADALADO", -"BADALAR", -"BADALO", -"BADEJO", -"BADERNA", -"BADERNAR", -"BADERNEIRO", -"BADULAQUE", -"BAFAFA", -"BAFO", -"BAFOMETRO", -"BAFORADA", -"BAGACO", -"BAGAGEIRO", -"BAGAGEM", -"BAGATELA", -"BAGRE", -"BAGUETE", -"BAGULHO", -"BAGUNCA", -"BAGUNCADO", -"BAGUNCAR", -"BAGUNCEIRO", -"BAH", -"BAIA", -"BAIANA", -"BAIANO", -"BAIAO", -"BAILADO", -"BAILAR", -"BAILARINO", -"BAILE", -"BAINHA", -"BAIO", -"BAIONETA", -"BAIRRISMO", -"BAIRRISTA", -"BAIRRO", -"BAITA", -"BAIUCA", -"BAIXA", -"BAIXADA", -"BAIXAR", -"BAIXARIA", -"BAIXELA", -"BAIXEZA", -"BAIXINHO", -"BAIXISTA", -"BAIXO", -"BAIXOS", -"BAIXOTE", -"BAJULACAO", -"BAJULADOR", -"BAJULAR", -"BALA", -"BALACO", -"BALADA", -"BALAIO", -"BALALAICA", -"BALANCA", -"BALANCANTE", -"BALANCAR", -"BALANCEADA", -"BALANCEADO", -"BALANCEAMENTO", -"BALANCEAR", -"BALANCETE", -"BALANCO", -"BALANGANDA", -"BALAO", -"BALAS", -"BALAUSTRADA", -"BALBUCIAR", -"BALBUCIO", -"BALBURDIA", -"BALCAO", -"BALCONISTA", -"BALDE", -"BALDEACAO", -"BALDEAR", -"BALDIO", -"BALE", -"BALEADO", -"BALEAR", -"BALEEIRA", -"BALEIA", -"BALEIRO", -"BALELA", -"BALESTRA", -"BALIDO", -"BALINES", -"BALIR", -"BALISTICA", -"BALISTICO", -"BALIZA", -"BALNEARIO", -"BALOFO", -"BALONISMO", -"BALSA", -"BALSAMICO", -"BALSAMO", -"BALTICO", -"BALUARTE", -"BALZAQUIANA", -"BAMBA", -"BAMBO", -"BAMBOLE", -"BAMBOLEAR", -"BAMBU", -"BAMBUZAL", -"BANAL", -"BANALIDADE", -"BANALIZAR", -"BANANA", -"BANANADA", -"BANANAL", -"BANANEIRA", -"BANCA", -"BANCADA", -"BANCAR", -"BANCARIA", -"BANCARIO", -"BANCARROTA", -"BANCO", -"BANDA", -"BANDAGEM", -"BANDALHEIRA", -"BANDAS", -"BANDEIRA", -"BANDEIRADA", -"BANDEIRANTE", -"BANDEIRANTISMO", -"BANDEIRAS", -"BANDEIRINHA", -"BANDEIROLA", -"BANDEJA", -"BANDEJAO", -"BANDIDACO", -"BANDIDAGEM", -"BANDIDO", -"BANDITISMO", -"BANDO", -"BANDOLEIRO", -"BANDONION", -"BANGALO", -"BANGUELA", -"BANHA", -"BANHAR", -"BANHEIRA", -"BANHEIRO", -"BANHISTA", -"BANHO", -"BANIDO", -"BANIMENTO", -"BANIR", -"BANJO", -"BANQUEIRO", -"BANQUETA", -"BANQUETE", -"BANQUISA", -"BANTO", -"BANZE", -"BANZO", -"BAOBA", -"BAQUE", -"BAQUELITA", -"BAQUETA", -"BAR", -"BARAFUNDA", -"BARALHADA", -"BARALHAR", -"BARALHO", -"BARAO", -"BARATA", -"BARATEAMENTO", -"BARATEAR", -"BARATEIRO", -"BARATINADO", -"BARATINAR", -"BARATO", -"BARBA", -"BARBADO", -"BARBANTE", -"BARBARIDADE", -"BARBARIE", -"BARBARISMO", -"BARBARIZAR", -"BARBARO", -"BARBATANA", -"BARBEADO", -"BARBEADOR", -"BARBEAR", -"BARBEARIA", -"BARBEIRAGEM", -"BARBEIRO", -"BARBICHA", -"BARBITURICO", -"BARBUDO", -"BARCA", -"BARCACA", -"BARCO", -"BARDO", -"BARGANHA", -"BARGANHAR", -"BARICENTRO", -"BARIO", -"BARITONO", -"BARLAVENTO", -"BARMAN", -"BAROMETRICO", -"BAROMETRO", -"BARONATO", -"BARONESA", -"BARQUEIRO", -"BARRA", -"BARRACA", -"BARRACAO", -"BARRACO", -"BARRACUDA", -"BARRAGEM", -"BARRANCO", -"BARRANCOS", -"BARRAR", -"BARRAS", -"BARREIRA", -"BARRENTO", -"BARRETE", -"BARRICA", -"BARRICADA", -"BARRICAR", -"BARRIGA", -"BARRIL", -"BARRO", -"BARROCO", -"BARULHEIRA", -"BARULHENTO", -"BARULHO", -"BASALTICO", -"BASALTO", -"BASBAQUICE", -"BASCA", -"BASCO", -"BASE", -"BASEADO", -"BASEAR", -"BASIC", -"BASICA", -"BASICAMENTE", -"BASICAS", -"BASICO", -"BASILAR", -"BASILICA", -"BASQUETE", -"BASQUETEBOL", -"BASQUETEBOLISTA", -"BASQUETEBOLISTICO", -"BASSE", -"BASTA", -"BASTANTE", -"BASTAO", -"BASTAR", -"BASTARDO", -"BASTIAO", -"BASTIDOR", -"BASTONETE", -"BATA", -"BATALHA", -"BATALHADOR", -"BATALHAO", -"BATALHAR", -"BATATA", -"BATATAL", -"BATATINHA", -"BATAVO", -"BATCH", -"BATEDEIRA", -"BATEEIRO", -"BATEIA", -"BATELADA", -"BATENDO", -"BATENTE", -"BATER", -"BATERIA", -"BATERISTA", -"BATIDA", -"BATIDO", -"BATIMENTO", -"BATINA", -"BATIQUE", -"BATISCAFO", -"BATISMAL", -"BATISMO", -"BATISTA", -"BATIZADO", -"BATIZAR", -"BATOM", -"BATRAQUIO", -"BATUCADA", -"BATUCAR", -"BATUQUE", -"BATUTA", -"BAU", -"BAUD", -"BAUHAUS", -"BAUNILHA", -"BAUXITA", -"BAVARO", -"BAZAR", -"BAZOFIA", -"BAZUCA", -"BCREPUSCULAR", -"BE", -"BEAT", -"BEATA", -"BEATIFICACAO", -"BEATIFICADO", -"BEATIFICAR", -"BEATITUDE", -"BEATNIK", -"BEATO", -"BEBACO", -"BEBADO", -"BEBE", -"BEBEDEIRA", -"BEBEDO", -"BEBEDOURO", -"BEBEMORAR", -"BEBER", -"BEBERICAR", -"BEBERRAO", -"BEBES", -"BEBIDA", -"BEBIDAS", -"BEBIVEL", -"BEBUM", -"BECA", -"BECHAMEL", -"BECO", -"BECQUEREL", -"BEDEL", -"BEDELHO", -"BEDUINO", -"BEGE", -"BEGONIA", -"BEHAVIORISMO", -"BEHAVIORISTA", -"BEICO", -"BEIJAR", -"BEIJINHO", -"BEIJO", -"BEIJOCA", -"BEIJOQUEIRO", -"BEIRA", -"BEIRADA", -"BEIRAR", -"BEISEBOL", -"BEL", -"BELADONA", -"BELDADE", -"BELELEU", -"BELEZA", -"BELEZOCA", -"BELGA", -"BELICHE", -"BELICO", -"BELICOSIDADE", -"BELICOSO", -"BELIGERANCIA", -"BELIGERANTE", -"BELISCAO", -"BELISCAR", -"BELO", -"BELONAVE", -"BELTRANO", -"BELVEDERE", -"BELZEBU", -"BEM", -"BEMOL", -"BENCAO", -"BENCAOS", -"BENDENGO", -"BENDITO", -"BENDIZER", -"BENE", -"BENEDICTUS", -"BENEDITINO", -"BENEFICENCIA", -"BENEFICENTE", -"BENEFICIADO", -"BENEFICIAMENTO", -"BENEFICIAR", -"BENEFICIO", -"BENEFICO", -"BENEMERITO", -"BENEPLACITO", -"BENESSE", -"BENEVOLENCIA", -"BENEVOLENTE", -"BENEVOLO", -"BENFEITOR", -"BENFEITORIA", -"BENGALA", -"BENGALADA", -"BENGALI", -"BENIGNIDADE", -"BENIGNO", -"BENJAMIM", -"BENQUISTO", -"BENS", -"BENTA", -"BENTO", -"BENZEDEIRA", -"BENZEDEIRO", -"BENZENO", -"BENZER", -"BENZIDO", -"BEOCIO", -"BEQUE", -"BEQUER", -"BERBER", -"BERBERE", -"BERCARIO", -"BERCO", -"BERGAMOTA", -"BERIBERI", -"BERILIO", -"BERIMBAU", -"BERINJELA", -"BERLINDA", -"BERLINENSE", -"BERLOQUE", -"BERMUDA", -"BERMUDAO", -"BERNE", -"BERQUELIO", -"BERRANTE", -"BERRAR", -"BERREIRO", -"BERRO", -"BESOURO", -"BESSARABIO", -"BESTA", -"BESTALHAO", -"BESTEIRA", -"BESTEIRADA", -"BESTEIRINHA", -"BESTIAL", -"BESTIALIDADE", -"BESTIALIZACAO", -"BESTIALIZAR", -"BESTIARIO", -"BESTIFICACAO", -"BESTIFICANTE", -"BESTIFICAR", -"BESUNTAR", -"BETA", -"BETACAM", -"BETAMAX", -"BETERRABA", -"BETONEIRA", -"BETULA", -"BETUME", -"BEXIGA", -"BEZERRO", -"BI", -"BIANUAL", -"BIATLON", -"BIBELO", -"BIBLIA", -"BIBLICO", -"BIBLIOCANTO", -"BIBLIOGRAFIA", -"BIBLIOGRAFICA", -"BIBLIOGRAFICO", -"BIBLIOTECA", -"BIBLIOTECARIO", -"BIBLIOTECONOMIA", -"BIBOCA", -"BICA", -"BICADA", -"BICAMA", -"BICAMERAL", -"BICAMERALISMO", -"BICAMPEAO", -"BICAMPEONATO", -"BICAR", -"BICARBONATO", -"BICAS", -"BICENTENARIO", -"BICEPS", -"BICHA", -"BICHADO", -"BICHANO", -"BICHAR", -"BICHARADA", -"BICHEIRO", -"BICHICE", -"BICHO", -"BICHONA", -"BICHOS", -"BICICLETA", -"BICO", -"BICOLOR", -"BICOTA", -"BICUDO", -"BICUSPIDE", -"BID", -"BIDE", -"BIDIMENSIONAL", -"BIDIRECIONAL", -"BIELA", -"BIELORRUSSO", -"BIENAL", -"BIENIO", -"BIFASICO", -"BIFE", -"BIFOCAL", -"BIFURCACAO", -"BIFURCADO", -"BIFURCAR", -"BIG", -"BIGA", -"BIGAMIA", -"BIGAMO", -"BIGLE", -"BIGODE", -"BIGODUDO", -"BIGORNA", -"BIJECAO", -"BIJETOR", -"BIJETORA", -"BIJUTERIA", -"BILABIAL", -"BILATERAL", -"BILBOQUE", -"BILE", -"BILHAO", -"BILHAR", -"BILHETE", -"BILHETEIRO", -"BILHETERIA", -"BILIAR", -"BILINGUE", -"BILINGUISMO", -"BILIONARIO", -"BILIONESIMO", -"BILIS", -"BILTRE", -"BIMBADA", -"BIMBAR", -"BIMENSAL", -"BIMESTRAL", -"BIMESTRE", -"BIMOTOR", -"BINACIONAL", -"BINARIA", -"BINARIO", -"BINGO", -"BINOCULO", -"BINOMIAL", -"BINOMIO", -"BINORMAL", -"BIOCIENCIA", -"BIODEGRADAVEL", -"BIODIGESTOR", -"BIODIVERSIDADE", -"BIOFISICA", -"BIOFISICO", -"BIOGAS", -"BIOGRAFADO", -"BIOGRAFAR", -"BIOGRAFIA", -"BIOGRAFICO", -"BIOGRAFO", -"BIOLOGIA", -"BIOLOGICA", -"BIOLOGICAS", -"BIOLOGICO", -"BIOLOGO", -"BIOMA", -"BIOMASSA", -"BIOMBO", -"BIOMECANICA", -"BIOMECANICO", -"BIONICO", -"BIOPSIA", -"BIOQUIMICA", -"BIOQUIMICO", -"BIORRITMICO", -"BIORRITMO", -"BIOSFERA", -"BIOTECNOLOGIA", -"BIOTECNOLOGICO", -"BIOTIPO", -"BIOXIDO", -"BIPAR", -"BIPARTIDARIO", -"BIPARTIDARISMO", -"BIPE", -"BIPEDE", -"BIPLANO", -"BIPOLAR", -"BIPOLARIDADE", -"BIPOLARIZACAO", -"BIQUADRADA", -"BIQUADRADO", -"BIQUINI", -"BIRD", -"BIRIBA", -"BIRINAITE", -"BIRITA", -"BIRMANES", -"BIROSCA", -"BIRRA", -"BIRREME", -"BIRRENTO", -"BIRRETANGULO", -"BIRUTA", -"BIRUTICE", -"BIS", -"BISAO", -"BISAR", -"BISAVO", -"BISBILHOTAR", -"BISBILHOTEIRO", -"BISBILHOTICE", -"BISCA", -"BISCATE", -"BISCATEADOR", -"BISCATEAR", -"BISCATEIRO", -"BISCOITEIRO", -"BISCOITO", -"BISMUTO", -"BISNAGA", -"BISNETO", -"BISPADO", -"BISPO", -"BISSEMANAL", -"BISSETOR", -"BISSETRIZ", -"BISSEXTO", -"BISSEXUADO", -"BISSEXUAL", -"BISSEXUALIDADE", -"BISTECA", -"BISTRO", -"BISTURI", -"BIT", -"BITOLA", -"BITOLADO", -"BITOLAR", -"BITRANSITIVO", -"BITRIBUTACAO", -"BITRIBUTAR", -"BITTER", -"BITUCA", -"BIUNIVOCA", -"BIUNIVOCO", -"BIVALENCIA", -"BIVALENTE", -"BIVALVE", -"BIZANTINO", -"BIZARRO", -"BL", -"BLASFEMACAO", -"BLASFEMAR", -"BLASFEMIA", -"BLASFEMO", -"BLENORRAGIA", -"BLENORRAGICO", -"BLENORREIA", -"BLINDADO", -"BLINDAGEM", -"BLINDAR", -"BLOCO", -"BLOQUEAR", -"BLOQUEIO", -"BLUSA", -"BLUSAO", -"BO", -"BOA", -"BOAS", -"BOATE", -"BOATEIRO", -"BOATO", -"BOAZUDA", -"BOBAGEM", -"BOBAJADA", -"BOBALHAO", -"BOBEADA", -"BOBEAR", -"BOBEIRA", -"BOBI", -"BOBINA", -"BOBINAR", -"BOBO", -"BOBOCA", -"BOCA", -"BOCADINHO", -"BOCADO", -"BOCAL", -"BOCEJAR", -"BOCEJO", -"BOCHA", -"BOCHECHA", -"BOCHECHAR", -"BOCHECHO", -"BOCHICHO", -"BOCIO", -"BOCO", -"BODA", -"BODAS", -"BODE", -"BODEGA", -"BODISATVA", -"BODOQUE", -"BOEMIA", -"BOEMIO", -"BOER", -"BOFE", -"BOFETADA", -"BOFETAO", -"BOFETE", -"BOHRIO", -"BOI", -"BOIA", -"BOIADA", -"BOIADEIRO", -"BOIAR", -"BOICOTAR", -"BOICOTE", -"BOINA", -"BOIS", -"BOISTA", -"BOITATA", -"BOJO", -"BOJUDO", -"BOLA", -"BOLACHA", -"BOLACHADA", -"BOLACO", -"BOLADA", -"BOLAO", -"BOLAR", -"BOLAS", -"BOLCHEVIQUE", -"BOLCHEVISMO", -"BOLEIA", -"BOLERO", -"BOLETIM", -"BOLETO", -"BOLHA", -"BOLICHE", -"BOLIDE", -"BOLIDO", -"BOLINACAO", -"BOLINADOR", -"BOLINAGEM", -"BOLINAR", -"BOLINHA", -"BOLINHO", -"BOLIVAR", -"BOLIVIANO", -"BOLO", -"BOLONHES", -"BOLOR", -"BOLORENTO", -"BOLOTA", -"BOLSA", -"BOLSISTA", -"BOLSO", -"BOM", -"BOMBA", -"BOMBACHAS", -"BOMBADA", -"BOMBARDEAMENTO", -"BOMBARDEAR", -"BOMBARDEIO", -"BOMBARDEIRO", -"BOMBASTICO", -"BOMBEACAO", -"BOMBEAMENTO", -"BOMBEAR", -"BOMBEIRO", -"BOMBOM", -"BOMBONA", -"BOMBORDO", -"BONACHAO", -"BONANCA", -"BONAPARTISMO", -"BONAPARTISTA", -"BONDADE", -"BONDE", -"BONDOSO", -"BONE", -"BONECA", -"BONECO", -"BONGO", -"BONIFICACAO", -"BONIFICAR", -"BONISSIMO", -"BONITO", -"BONS", -"BONSAI", -"BONUS", -"BONZO", -"BOOK", -"BOOKMAKER", -"BOOKMARK", -"BOOLIANA", -"BOOLIANO", -"BOOM", -"BOOT", -"BOQUEIRAO", -"BOQUETE", -"BOQUIABERTO", -"BORATO", -"BORAX", -"BORBOLETA", -"BORBOTAO", -"BORBOTOES", -"BORBULHA", -"BORBULHANTE", -"BORBULHAR", -"BORCO", -"BORDA", -"BORDADEIRA", -"BORDADO", -"BORDAO", -"BORDAR", -"BORDEL", -"BORDERO", -"BORDO", -"BORDOADA", -"BOREAL", -"BORICADA", -"BORICADO", -"BORO", -"BOROCOXO", -"BORRA", -"BORRACHA", -"BORRACHARIA", -"BORRACHEIRO", -"BORRACHUDO", -"BORRALHEIRO", -"BORRALHO", -"BORRAO", -"BORRAR", -"BORRASCA", -"BORRIFAR", -"BORRIFO", -"BORSCH", -"BOSON", -"BOSQUE", -"BOSQUEJAR", -"BOSQUEJO", -"BOSQUIMANO", -"BOSSA", -"BOSTA", -"BOSTONIANO", -"BOTA", -"BOTAFOGUENSE", -"BOTANICA", -"BOTANICO", -"BOTAO", -"BOTAR", -"BOTAS", -"BOTE", -"BOTECO", -"BOTEQUIM", -"BOTICA", -"BOTICAO", -"BOTICARIO", -"BOTIJA", -"BOTIJAO", -"BOTINA", -"BOTO", -"BOTOCUDO", -"BOTOQUE", -"BOTULISMO", -"BOURBON", -"BOVESPA", -"BOVINO", -"BOXE", -"BOXEADOR", -"BOXIMANE", -"BR", -"BRABO", -"BRACA", -"BRACAL", -"BRACELETE", -"BRACO", -"BRADAR", -"BRADO", -"BRAGUILHA", -"BRAILE", -"BRAMA", -"BRAMANE", -"BRAMANISMO", -"BRAMANISTA", -"BRANCA", -"BRANCO", -"BRANCURA", -"BRANDIR", -"BRANDO", -"BRANDURA", -"BRANQUEACAO", -"BRANQUEAMENTO", -"BRANQUEAR", -"BRANQUIA", -"BRANQUIAL", -"BRANQUINHA", -"BRAQUIOSSAURIO", -"BRASA", -"BRASAO", -"BRASIL", -"BRASILEIRA", -"BRASILEIRADA", -"BRASILEIRISMO", -"BRASILEIRO", -"BRASILEIROS", -"BRASILIANISMO", -"BRASILIANISTA", -"BRASILIDADE", -"BRASILIENSE", -"BRAVATA", -"BRAVEZA", -"BRAVIO", -"BRAVO", -"BRAVURA", -"BRECA", -"BRECADA", -"BRECAR", -"BRECHA", -"BRECHO", -"BREGA", -"BREJEIRICE", -"BREJEIRO", -"BREJO", -"BREQUE", -"BRETAO", -"BREU", -"BREVE", -"BREVETADO", -"BREVETAR", -"BREVIARIO", -"BREVIDADE", -"BRIDA", -"BRIDGE", -"BRIGA", -"BRIGADA", -"BRIGADEIRO", -"BRIGAR", -"BRIGUENTO", -"BRILHANTE", -"BRILHANTINA", -"BRILHANTISMO", -"BRILHAR", -"BRILHO", -"BRIM", -"BRINCADEIRA", -"BRINCADEIRAS", -"BRINCALHAO", -"BRINCAR", -"BRINCO", -"BRINDAR", -"BRINDE", -"BRINQUEDO", -"BRIO", -"BRIOCHE", -"BRIOFITO", -"BRIOSO", -"BRISA", -"BRITADA", -"BRITADEIRA", -"BRITANICA", -"BRITANICO", -"BRITAR", -"BROA", -"BROCA", -"BROCADO", -"BROCHE", -"BROCHURA", -"BROCOLIS", -"BROMATO", -"BROMELIA", -"BROMO", -"BRONCA", -"BRONCO", -"BRONCOPNEUMONIA", -"BRONHA", -"BRONQUIAL", -"BRONQUIO", -"BRONQUITE", -"BRONTOSSAURO", -"BRONZE", -"BRONZEADO", -"BRONZEADOR", -"BRONZEAMENTO", -"BRONZEAR", -"BROTAR", -"BROTINHO", -"BROTO", -"BROTOEJA", -"BROWNIANO", -"BROWNIE", -"BROWSER", -"BROXA", -"BROXANTE", -"BROXAR", -"BRUACA", -"BRUCUTU", -"BRUMA", -"BRUMARIO", -"BRUSCO", -"BRUTAL", -"BRUTALIDADE", -"BRUTALIZAR", -"BRUTAMONTES", -"BRUTO", -"BRUXA", -"BRUXARIA", -"BRUXO", -"BRUXULEANTE", -"BRUXULEAR", -"BRUXULEIO", -"BU", -"BUBONICA", -"BUBONICO", -"BUCEFALO", -"BUCHA", -"BUCHADA", -"BUCHO", -"BUCOLICO", -"BUDA", -"BUDISMO", -"BUDISTA", -"BUEIRO", -"BUFALO", -"BUFANTE", -"BUFAO", -"BUFAR", -"BUFE", -"BUFFER", -"BUG", -"BUGALHOS", -"BUGIGANGA", -"BUGIGANGAS", -"BUGRE", -"BUJAO", -"BULA", -"BULBO", -"BULDOGUE", -"BULDOZER", -"BULE", -"BULEVAR", -"BULGARO", -"BULHUFAS", -"BULICOSO", -"BULIMIA", -"BUM", -"BUMBUM", -"BUMERANGUE", -"BUNDA", -"BUNDAO", -"BUNSEN", -"BUQUE", -"BURACO", -"BURBURINHO", -"BURGO", -"BURGOMESTRE", -"BURGUES", -"BURGUESIA", -"BURILAR", -"BURLA", -"BURLAR", -"BURLESCO", -"BUROCRACIA", -"BUROCRATA", -"BUROCRATICO", -"BUROCRATIZACAO", -"BUROCRATIZADO", -"BUROCRATIZAR", -"BURRADA", -"BURRICE", -"BURRO", -"BURROS", -"BURSITE", -"BURUNDINES", -"BUSCA", -"BUSCAR", -"BUSSOLA", -"BUSTIE", -"BUSTO", -"BUTANO", -"BUTIQUE", -"BUZINA", -"BUZINADA", -"BUZINAR", -"BUZIO", -"BUZIOS", -"C", -"CA", -"CAABA", -"CAATINGA", -"CABACO", -"CABAL", -"CABALA", -"CABALISTICO", -"CABANA", -"CABARE", -"CABECA", -"CABECADA", -"CABECALHO", -"CABECEADOR", -"CABECEAR", -"CABECEIO", -"CABECEIRA", -"CABECOTE", -"CABECUDO", -"CABEDAL", -"CABELEIRA", -"CABELEIREIRO", -"CABELO", -"CABELUDO", -"CABER", -"CABIDE", -"CABIMENTO", -"CABINA", -"CABINE", -"CABISBAIXO", -"CABIVEL", -"CABO", -"CABOCLO", -"CABOTAGEM", -"CABOTINISMO", -"CABOTINO", -"CABRA", -"CABREIRO", -"CABRESTO", -"CABRITA", -"CABRITO", -"CABROCHA", -"CABUQUI", -"CACA", -"CACADA", -"CACADOR", -"CACAMBA", -"CACAO", -"CACAPA", -"CACAR", -"CACARECO", -"CACAREJAR", -"CACAREJO", -"CACAROLA", -"CACATUA", -"CACAU", -"CACAUEIRO", -"CACETADA", -"CACETE", -"CACHACA", -"CACHACEIRO", -"CACHALOTE", -"CACHE", -"CACHEADO", -"CACHEAR", -"CACHECOL", -"CACHETA", -"CACHIMBO", -"CACHO", -"CACHOEIRA", -"CACHOLA", -"CACHORRA", -"CACHORRADA", -"CACHORRINHO", -"CACHORRO", -"CACIFE", -"CACILDA", -"CACIQUE", -"CACO", -"CACOADA", -"CACOADOR", -"CACOAR", -"CACOETE", -"CACOFATO", -"CACOFONIA", -"CACOFONICO", -"CACTO", -"CACULA", -"CACUNDA", -"CADA", -"CADAFALSO", -"CADARCO", -"CADASTRAMENTO", -"CADASTRAR", -"CADASTRO", -"CADAVER", -"CADAVERICO", -"CADE", -"CADEADO", -"CADEIA", -"CADEIRA", -"CADEIRADA", -"CADEIRAS", -"CADELA", -"CADENCIA", -"CADENCIADO", -"CADENCIAR", -"CADENTE", -"CADERNETA", -"CADERNO", -"CADETE", -"CADINHO", -"CADMIO", -"CADUCAR", -"CADUCEU", -"CADUCO", -"CAFAJESTAGEM", -"CAFAJESTE", -"CAFE", -"CAFEEIRO", -"CAFEICULTOR", -"CAFEICULTURA", -"CAFEINA", -"CAFETAO", -"CAFETEIRA", -"CAFETINA", -"CAFEZAL", -"CAFILA", -"CAFONA", -"CAFONICE", -"CAFUNDO", -"CAFUNE", -"CAFUZO", -"CAGADO", -"CAI", -"CAIACAO", -"CAIADO", -"CAIAPO", -"CAIAQUE", -"CAIAR", -"CAIBRA", -"CAIBRO", -"CAICARA", -"CAIDA", -"CAIDO", -"CAIMBRA", -"CAIMENTO", -"CAIPIRA", -"CAIPIRICE", -"CAIPIRINHA", -"CAIPORA", -"CAIR", -"CAIS", -"CAISER", -"CAIXA", -"CAIXAO", -"CAIXEIRO", -"CAIXILHO", -"CAIXOTE", -"CAIXOTES", -"CAJADADA", -"CAJADO", -"CAJU", -"CAJUEIRO", -"CAL", -"CALABOUCO", -"CALABRES", -"CALADAO", -"CALADO", -"CALAFETADO", -"CALAFETAGEM", -"CALAFETAR", -"CALAFRIO", -"CALAMAR", -"CALAMIDADE", -"CALAMINA", -"CALAMITOSO", -"CALAO", -"CALAR", -"CALCA", -"CALCADA", -"CALCADAO", -"CALCADEIRA", -"CALCADO", -"CALCADOS", -"CALCAMENTO", -"CALCANHAR", -"CALCAO", -"CALCAR", -"CALCARIO", -"CALCAS", -"CALCIFICACAO", -"CALCIFICADO", -"CALCIFICAR", -"CALCINACAO", -"CALCINADO", -"CALCINAR", -"CALCINHA", -"CALCINHAS", -"CALCIO", -"CALCITA", -"CALCO", -"CALCOPIRITA", -"CALCULADO", -"CALCULADORA", -"CALCULAR", -"CALCULAVEL", -"CALCULISTA", -"CALCULO", -"CALDA", -"CALDEIA", -"CALDEIRA", -"CALDEIRAO", -"CALDEIREIRO", -"CALDEU", -"CALDO", -"CALECHE", -"CALEFACAO", -"CALEIDOSCOPIO", -"CALEJADO", -"CALEJAR", -"CALENDARIO", -"CALHA", -"CALHAMACO", -"CALHAMBEQUE", -"CALHAR", -"CALHORDA", -"CALIBRADO", -"CALIBRADOR", -"CALIBRAGEM", -"CALIBRAR", -"CALIBRE", -"CALICE", -"CALIDO", -"CALIFA", -"CALIFADO", -"CALIFORNIANO", -"CALIFORNIO", -"CALIGRAFIA", -"CALIGRAFICO", -"CALIGRAFO", -"CALIPSO", -"CALISTA", -"CALISTO", -"CALL", -"CALMA", -"CALMANTE", -"CALMARIA", -"CALMO", -"CALO", -"CALOMBO", -"CALOR", -"CALORENTO", -"CALORIA", -"CALORICO", -"CALORIFERO", -"CALOROSO", -"CALOS", -"CALOSIDADE", -"CALOSO", -"CALOTA", -"CALOTE", -"CALOTEAR", -"CALOTEIRO", -"CALOURO", -"CALUNDU", -"CALUNIA", -"CALUNIADO", -"CALUNIADOR", -"CALUNIAR", -"CALUNIOSO", -"CALVA", -"CALVARIO", -"CALVICIE", -"CALVINISMO", -"CALVINISTA", -"CALVO", -"CAMA", -"CAMADA", -"CAMAFEU", -"CAMALEAO", -"CAMARA", -"CAMARADA", -"CAMARADAGEM", -"CAMARAO", -"CAMAREIRA", -"CAMAREIRO", -"CAMARILHA", -"CAMARIM", -"CAMARONES", -"CAMAROTE", -"CAMBADA", -"CAMBALACHO", -"CAMBALEANTE", -"CAMBALEAR", -"CAMBALEIO", -"CAMBALHOTA", -"CAMBIAL", -"CAMBIAR", -"CAMBIO", -"CAMBISTA", -"CAMBITO", -"CAMBOJANO", -"CAMBRIANO", -"CAMBURAO", -"CAMELIA", -"CAMELO", -"CAMERA", -"CAMICASE", -"CAMINHADA", -"CAMINHADO", -"CAMINHAO", -"CAMINHAR", -"CAMINHO", -"CAMINHONEIRO", -"CAMINHONETE", -"CAMISA", -"CAMISETA", -"CAMISINHA", -"CAMISOLA", -"CAMOMILA", -"CAMORRA", -"CAMPAINHA", -"CAMPAL", -"CAMPANARIO", -"CAMPANHA", -"CAMPANULA", -"CAMPEA", -"CAMPEAO", -"CAMPEONATO", -"CAMPESTRE", -"CAMPI", -"CAMPINA", -"CAMPINEIRO", -"CAMPING", -"CAMPO", -"CAMPONES", -"CAMPUS", -"CAMUFLADO", -"CAMUFLAGEM", -"CAMUFLAR", -"CAMUNDONGO", -"CAMURCA", -"CANA", -"CANADENSE", -"CANAL", -"CANALHA", -"CANALHICE", -"CANALIZACAO", -"CANALIZAR", -"CANAPE", -"CANARINHO", -"CANARIO", -"CANASTRA", -"CANASTRAO", -"CANAVIAL", -"CANCA", -"CANCAO", -"CANCELA", -"CANCELADO", -"CANCELAMENTO", -"CANCELAR", -"CANCER", -"CANCERIANO", -"CANCERIGENO", -"CANCEROSO", -"CANCHA", -"CANCIONEIRO", -"CANCRO", -"CANDANGO", -"CANDEEIRO", -"CANDELA", -"CANDELABRO", -"CANDENTE", -"CANDIDA", -"CANDIDATO", -"CANDIDATURA", -"CANDIDO", -"CANDOMBLE", -"CANDOR", -"CANDURA", -"CANECA", -"CANECO", -"CANELA", -"CANELADA", -"CANELAS", -"CANELEIRA", -"CANELONE", -"CANETA", -"CANFORA", -"CANGA", -"CANGACEIRO", -"CANGACO", -"CANGOTE", -"CANGURU", -"CANHAMO", -"CANHAO", -"CANHESTRO", -"CANHONEIRA", -"CANHOTO", -"CANIBAL", -"CANIBALISMO", -"CANIBALIZAR", -"CANICO", -"CANIL", -"CANINHA", -"CANINO", -"CANIVETADA", -"CANIVETE", -"CANJA", -"CANJICA", -"CANO", -"CANOA", -"CANOAGEM", -"CANON", -"CANONICO", -"CANONIZACAO", -"CANONIZAR", -"CANORO", -"CANSACO", -"CANSADO", -"CANSAR", -"CANSATIVO", -"CANSEIRA", -"CANTABILE", -"CANTADA", -"CANTADO", -"CANTADOR", -"CANTAO", -"CANTAR", -"CANTARIDA", -"CANTARO", -"CANTAROLAR", -"CANTAROS", -"CANTATA", -"CANTEIRO", -"CANTICO", -"CANTIGA", -"CANTIL", -"CANTILENA", -"CANTINA", -"CANTO", -"CANTOCHAO", -"CANTONAL", -"CANTOR", -"CANTORIA", -"CANUDO", -"CAO", -"CAOL", -"CAOLHO", -"CAOS", -"CAOTICO", -"CAPA", -"CAPACETE", -"CAPACHO", -"CAPACIDADE", -"CAPACITACAO", -"CAPACITANCIA", -"CAPACITAR", -"CAPACITOR", -"CAPADO", -"CAPADOCIO", -"CAPANGA", -"CAPAR", -"CAPATAZ", -"CAPAZ", -"CAPCIOSO", -"CAPELA", -"CAPELAO", -"CAPENGA", -"CAPENGAR", -"CAPETA", -"CAPILAR", -"CAPILARIDADE", -"CAPIM", -"CAPINAR", -"CAPINZAL", -"CAPITA", -"CAPITAIS", -"CAPITAL", -"CAPITALISMO", -"CAPITALISTA", -"CAPITALIZACAO", -"CAPITALIZAR", -"CAPITALIZAVEL", -"CAPITANEAR", -"CAPITANIA", -"CAPITAO", -"CAPITULACAO", -"CAPITULAR", -"CAPITULO", -"CAPIVARA", -"CAPIXABA", -"CAPO", -"CAPOEIRA", -"CAPOEIRISTA", -"CAPOTA", -"CAPOTAR", -"CAPRICHAR", -"CAPRICHO", -"CAPRICHOSO", -"CAPRICORNIANO", -"CAPRICORNIO", -"CAPRINO", -"CAPRINOS", -"CAPSULA", -"CAPSULAR", -"CAPTACAO", -"CAPTAR", -"CAPTOR", -"CAPTURA", -"CAPTURAR", -"CAPUCHINHO", -"CAPUT", -"CAPUZ", -"CAQUI", -"CAQUIZEIRO", -"CARA", -"CARABINA", -"CARABINEIRO", -"CARACOL", -"CARACTERE", -"CARACTERISTICA", -"CARACTERISTICAS", -"CARACTERISTICO", -"CARACTERIZACAO", -"CARACTERIZADO", -"CARACTERIZAR", -"CARACTERIZAVEL", -"CARAMANCHAO", -"CARAMBA", -"CARAMBOLA", -"CARAMELADO", -"CARAMELO", -"CARAMINGUA", -"CARAMINHOLA", -"CARAMINHOLAS", -"CARAMUJO", -"CARANGO", -"CARANGUEJEIRA", -"CARANGUEJO", -"CARAO", -"CARAPACA", -"CARAPUCA", -"CARATE", -"CARATECA", -"CARATER", -"CARAVANA", -"CARAVANEIRO", -"CARAVELA", -"CARBETO", -"CARBOIDRATO", -"CARBONADO", -"CARBONATO", -"CARBONETO", -"CARBONICO", -"CARBONIFERO", -"CARBONIZACAO", -"CARBONIZADO", -"CARBONIZAR", -"CARBONO", -"CARBOXILA", -"CARBURADOR", -"CARBURANTE", -"CARBURETO", -"CARCACA", -"CARCAMANO", -"CARCARA", -"CARCERARIO", -"CARCERE", -"CARCEREIRO", -"CARCINOGENO", -"CARCINOMA", -"CARCOMER", -"CARCOMIDO", -"CARDAPIO", -"CARDEAIS", -"CARDEAL", -"CARDIACA", -"CARDIACO", -"CARDIGA", -"CARDINAIS", -"CARDINAL", -"CARDINALATO", -"CARDIOGRAFIA", -"CARDIOGRAMA", -"CARDIOLOGIA", -"CARDIOLOGICO", -"CARDIOLOGISTA", -"CARDIOLOGO", -"CARDUME", -"CARECA", -"CARECER", -"CARENCIA", -"CARENTE", -"CARESTIA", -"CARETA", -"CARETEIRO", -"CARETICE", -"CARGA", -"CARGO", -"CARGUEIRO", -"CARIADO", -"CARIAR", -"CARIBENHO", -"CARICATO", -"CARICATURA", -"CARICATURADO", -"CARICATURAL", -"CARICATURAR", -"CARICATURISTA", -"CARICIA", -"CARIDADE", -"CARIDOSO", -"CARIE", -"CARIJO", -"CARIL", -"CARIMBAR", -"CARIMBO", -"CARINHAR", -"CARINHO", -"CARINHOSO", -"CARIOCA", -"CARISMA", -"CARISMATICO", -"CARLINGA", -"CARMA", -"CARMELITA", -"CARMESIM", -"CARMIM", -"CARNAL", -"CARNAUBA", -"CARNAUBEIRA", -"CARNAVAL", -"CARNAVALESCO", -"CARNE", -"CARNEIRINHO", -"CARNEIRO", -"CARNICA", -"CARNICEIRO", -"CARNIFICINA", -"CARNIVORO", -"CARNUDO", -"CARO", -"CAROCHINHA", -"CAROCO", -"CAROLA", -"CAROLINGIO", -"CARONA", -"CAROTIDA", -"CARPA", -"CARPAL", -"CARPETE", -"CARPIDEIRA", -"CARPINTARIA", -"CARPINTEIRO", -"CARPIR", -"CARPO", -"CARQUEJA", -"CARRANCA", -"CARRANCUDO", -"CARRAPATO", -"CARRASCO", -"CARREATA", -"CARREGADO", -"CARREGADOR", -"CARREGAMENTO", -"CARREGAR", -"CARREIRA", -"CARRETA", -"CARRETEL", -"CARRETO", -"CARRILHAO", -"CARRINHO", -"CARRO", -"CARROCA", -"CARROCARIA", -"CARROCAVEL", -"CARROCERIA", -"CARROCINHA", -"CARROSSEL", -"CARRUAGEM", -"CARTA", -"CARTADA", -"CARTAGINES", -"CARTAO", -"CARTAZ", -"CARTAZISTA", -"CARTE", -"CARTEADO", -"CARTEIRA", -"CARTEIRO", -"CARTEL", -"CARTESIANAS", -"CARTESIANISMO", -"CARTESIANO", -"CARTILAGEM", -"CARTILAGINOSO", -"CARTILHA", -"CARTOGRAFIA", -"CARTOGRAFICO", -"CARTOGRAFO", -"CARTOLA", -"CARTOLINA", -"CARTOMANCIA", -"CARTOMANTE", -"CARTORIO", -"CARTUCHO", -"CARTUM", -"CARTUNISTA", -"CARUNCHO", -"CARVALHO", -"CARVAO", -"CARVOARIA", -"CARVOEIRO", -"CAS", -"CASA", -"CASACA", -"CASACAO", -"CASACO", -"CASADO", -"CASAL", -"CASAMATA", -"CASAMENTEIRO", -"CASAMENTO", -"CASANOVA", -"CASAR", -"CASARAO", -"CASARIO", -"CASBA", -"CASCA", -"CASCALHO", -"CASCATA", -"CASCATEIRO", -"CASCAVEL", -"CASCO", -"CASCUDO", -"CASEADO", -"CASEAR", -"CASEBRE", -"CASEIFICACAO", -"CASEIFICAR", -"CASEINA", -"CASEIRO", -"CASERNA", -"CASIMIRA", -"CASMURRICE", -"CASMURRO", -"CASO", -"CASORIO", -"CASOS", -"CASPITE", -"CASSACAO", -"CASSADO", -"CASSAR", -"CASSATA", -"CASSETE", -"CASSETETE", -"CASSINO", -"CASSITERITA", -"CASTA", -"CASTANHA", -"CASTANHEIRA", -"CASTANHO", -"CASTANHOLAS", -"CASTELHANO", -"CASTELO", -"CASTICAL", -"CASTICO", -"CASTIDADE", -"CASTIGADA", -"CASTIGADO", -"CASTIGAR", -"CASTIGO", -"CASTO", -"CASTOR", -"CASTRACAO", -"CASTRADO", -"CASTRAR", -"CASTRISMO", -"CASTRISTA", -"CASUAL", -"CASUALIDADE", -"CASUISMO", -"CASUISTICO", -"CASULO", -"CATACLISMICO", -"CATACLISMO", -"CATACUMBA", -"CATALAO", -"CATALISACAO", -"CATALISADOR", -"CATALISAR", -"CATALITICO", -"CATALOGACAO", -"CATALOGAR", -"CATALOGO", -"CATALOGRAFICO", -"CATAMARA", -"CATAPLASMA", -"CATAPORA", -"CATAPULTA", -"CATAR", -"CATARATA", -"CATARINENSE", -"CATARRO", -"CATARSE", -"CATARTICO", -"CATASTROFE", -"CATASTROFICO", -"CATATONIA", -"CATATONICO", -"CATCH", -"CATECISMO", -"CATEDRA", -"CATEDRAL", -"CATEDRATICO", -"CATEGORIA", -"CATEGORICO", -"CATEGORIZACAO", -"CATEGORIZADO", -"CATEGORIZAR", -"CATEQUESE", -"CATEQUISTA", -"CATEQUIZACAO", -"CATEQUIZADOR", -"CATEQUIZAR", -"CATERING", -"CATERVA", -"CATETER", -"CATETO", -"CATIMBA", -"CATIMBAR", -"CATIMBEIRO", -"CATINGA", -"CATINGAR", -"CATION", -"CATIRIPAPO", -"CATIVANTE", -"CATIVAR", -"CATIVEIRO", -"CATIVO", -"CATODICO", -"CATODICOS", -"CATODO", -"CATOLICA", -"CATOLICISMO", -"CATOLICO", -"CATORZE", -"CATRACA", -"CATUABA", -"CAUBOI", -"CAUCAO", -"CAUCASIANO", -"CAUCASOIDE", -"CAUCIONAAR", -"CAUDA", -"CAUDALOSO", -"CAUDILHISMO", -"CAUDILHO", -"CAUIM", -"CAULE", -"CAUSA", -"CAUSADOR", -"CAUSADORES", -"CAUSADOS", -"CAUSAL", -"CAUSALIDADE", -"CAUSAR", -"CAUSATIVO", -"CAUSO", -"CAUSTICA", -"CAUSTICAR", -"CAUSTICO", -"CAUTELA", -"CAUTELOSO", -"CAUTERIZACAO", -"CAUTERIZAR", -"CAVADO", -"CAVALA", -"CAVALAR", -"CAVALARIA", -"CAVALARIANO", -"CAVALARICA", -"CAVALARICO", -"CAVALEIRO", -"CAVALETE", -"CAVALGADA", -"CAVALGADURA", -"CAVALGAR", -"CAVALHEIRESCO", -"CAVALHEIRISMO", -"CAVALHEIRO", -"CAVALHEIROS", -"CAVALO", -"CAVANHAQUE", -"CAVAQUINHO", -"CAVAR", -"CAVE", -"CAVEIRA", -"CAVERNA", -"CAVERNOSO", -"CAVIAR", -"CAVIDADE", -"CAVILHA", -"CAVO", -"CAVUCAR", -"CAXIAS", -"CAXUMBA", -"CE", -"CEAR", -"CEARENSE", -"CEBOLA", -"CEBOLINHA", -"CECO", -"CEDER", -"CEDILHA", -"CEDILHADO", -"CEDILHAR", -"CEDINHO", -"CEDO", -"CEDRO", -"CEDULA", -"CEFALEIA", -"CEFALICO", -"CEFALOPODE", -"CEFALORRAQUIDIANO", -"CEFALOTORAX", -"CEGAR", -"CEGO", -"CEGONHA", -"CEGUEIRA", -"CEI", -"CEIA", -"CEIFA", -"CEIFAR", -"CEIFEIRO", -"CELA", -"CELACANTO", -"CELEBRACAO", -"CELEBRADO", -"CELEBRANTE", -"CELEBRAR", -"CELEBRE", -"CELEBRIDADE", -"CELEBRIZAR", -"CELEIRO", -"CELENTERADO", -"CELERADO", -"CELERE", -"CELESTA", -"CELESTE", -"CELESTIAL", -"CELEUMA", -"CELIBATARIO", -"CELIBATO", -"CELO", -"CELOFANE", -"CELSIUS", -"CELTA", -"CELULA", -"CELULAR", -"CELULITE", -"CELULOIDE", -"CELULOSE", -"CEM", -"CEMITERIO", -"CENA", -"CENARIO", -"CENARISTA", -"CENICO", -"CENOGRAFIA", -"CENOGRAFICO", -"CENOGRAFO", -"CENOURA", -"CENOZOICA", -"CENOZOICO", -"CENSO", -"CENSOR", -"CENSURA", -"CENSURADO", -"CENSURAR", -"CENSURAVEL", -"CENTAURO", -"CENTAVO", -"CENTEIO", -"CENTELHA", -"CENTENA", -"CENTENARIO", -"CENTESIMAL", -"CENTESIMO", -"CENTIGRADO", -"CENTIGRAMA", -"CENTILITRO", -"CENTIMETRO", -"CENTIMO", -"CENTO", -"CENTOPEIA", -"CENTRADO", -"CENTRAL", -"CENTRALISMO", -"CENTRALIZACAO", -"CENTRALIZADO", -"CENTRALIZADOR", -"CENTRALIZAR", -"CENTRAR", -"CENTRIFUGA", -"CENTRIFUGACAO", -"CENTRIFUGADORA", -"CENTRIFUGAR", -"CENTRIFUGO", -"CENTRIPETA", -"CENTRIPETO", -"CENTRISMO", -"CENTRISTA", -"CENTRO", -"CENTROAVANTE", -"CENTUPLICADO", -"CENTUPLICAR", -"CENTUPLO", -"CENTURIA", -"CENTURIAO", -"CEP", -"CEPA", -"CEPTICISMO", -"CEPTICO", -"CERA", -"CERAMICA", -"CERAMICO", -"CERAMISTA", -"CERBERO", -"CERCA", -"CERCADO", -"CERCANIA", -"CERCANIAS", -"CERCAR", -"CERCEAMENTO", -"CERCEAR", -"CERCO", -"CERDA", -"CEREAL", -"CEREBELO", -"CEREBRAIS", -"CEREBRAL", -"CEREBRO", -"CEREJA", -"CEREJEIRA", -"CERES", -"CERIMONIA", -"CERIMONIAL", -"CERIMONIOSO", -"CERIO", -"CERNE", -"CEROL", -"CEROULAS", -"CERRACAO", -"CERRADAO", -"CERRADO", -"CERRAR", -"CERRO", -"CERTAME", -"CERTAMENTE", -"CERTEIRO", -"CERTEZA", -"CERTIDAO", -"CERTIFICACAO", -"CERTIFICADO", -"CERTIFICAR", -"CERTO", -"CERVEJA", -"CERVEJADA", -"CERVEJARIA", -"CERVEJEIRO", -"CERVICAL", -"CERVIDEOS", -"CERVO", -"CERZIDEIRA", -"CERZIDO", -"CERZIMENTO", -"CERZIR", -"CESAR", -"CESAREO", -"CESARIANA", -"CESARIANO", -"CESARISMO", -"CESARISTA", -"CESIO", -"CESSACAO", -"CESSAMENTO", -"CESSANTE", -"CESSAO", -"CESSAR", -"CESTA", -"CESTINHA", -"CESTO", -"CETACEO", -"CETIM", -"CETONA", -"CETRO", -"CEU", -"CEUS", -"CEVADA", -"CEVADO", -"CEVAR", -"CH", -"CHA", -"CHABU", -"CHACARA", -"CHACINA", -"CHACINAR", -"CHACOTA", -"CHACRETE", -"CHACRINHA", -"CHADIANO", -"CHADOR", -"CHAFARIZ", -"CHAFURDAR", -"CHAGA", -"CHAGAS", -"CHALE", -"CHALEIRA", -"CHALUPA", -"CHAMA", -"CHAMADA", -"CHAMAMENTO", -"CHAMAR", -"CHAMARIZ", -"CHAMATIVO", -"CHAMEGO", -"CHAMEJANTE", -"CHAMEJAR", -"CHAMINE", -"CHAMORRO", -"CHAMPANHA", -"CHAMPANHE", -"CHAMUSCADA", -"CHAMUSCADO", -"CHAMUSCAR", -"CHANCE", -"CHANCELA", -"CHANCELAR", -"CHANCELARIA", -"CHANCELER", -"CHANCHADA", -"CHANFRAR", -"CHANTAGEAR", -"CHANTAGEM", -"CHANTAGISTA", -"CHANTILLY", -"CHANUKAH", -"CHAO", -"CHAPA", -"CHAPADA", -"CHAPADAO", -"CHAPADO", -"CHAPAS", -"CHAPELARIA", -"CHAPELEIRO", -"CHAPEU", -"CHAPEUS", -"CHAPINHAR", -"CHAPULETADA", -"CHARADA", -"CHARADISMO", -"CHARADISTA", -"CHARANGA", -"CHARCO", -"CHARCUTARIA", -"CHARCUTEIRO", -"CHARGE", -"CHARGISTA", -"CHARLATANICE", -"CHARLATAO", -"CHARLESTON", -"CHARME", -"CHARNECA", -"CHARQUE", -"CHARQUEAR", -"CHARRETE", -"CHARRUA", -"CHARTER", -"CHARUTARIA", -"CHARUTO", -"CHASSI", -"CHAT", -"CHATA", -"CHATEACAO", -"CHATEAR", -"CHATICE", -"CHATO", -"CHATURA", -"CHAUVINISMO", -"CHAUVINISTA", -"CHAVAO", -"CHAVE", -"CHAVEAMENTO", -"CHAVEAR", -"CHAVEIRO", -"CHAVENA", -"CHE", -"CHECAGEM", -"CHECAR", -"CHECHENE", -"CHECHENIO", -"CHECK", -"CHECO", -"CHECOSLOVACO", -"CHEFE", -"CHEFIA", -"CHEFIADO", -"CHEFIAR", -"CHEGA", -"CHEGADA", -"CHEGADO", -"CHEGAR", -"CHEGOU", -"CHEIA", -"CHEIENE", -"CHEIO", -"CHEIRAR", -"CHEIRE", -"CHEIRO", -"CHEIROS", -"CHEIROSO", -"CHEQUE", -"CHEROQUI", -"CHIADEIRA", -"CHIADO", -"CHIAR", -"CHIBATA", -"CHIBATADA", -"CHIBCHA", -"CHICLETE", -"CHICO", -"CHICORIA", -"CHICOTADA", -"CHICOTE", -"CHICOTEAR", -"CHIFRADA", -"CHIFRE", -"CHIFRUDO", -"CHILENO", -"CHILIQUE", -"CHILREAR", -"CHILREIO", -"CHIMARRAO", -"CHIMPANZE", -"CHINA", -"CHINCHILA", -"CHINELA", -"CHINELADA", -"CHINELO", -"CHINES", -"CHINFRIM", -"CHINTZ", -"CHIP", -"CHIQUE", -"CHIQUEIRO", -"CHISPA", -"CHISPAR", -"CHISTE", -"CHITA", -"CHOCA", -"CHOCADEIRA", -"CHOCALHAR", -"CHOCALHO", -"CHOCANTE", -"CHOCAR", -"CHOCHO", -"CHOCHONE", -"CHOCOLATARIA", -"CHOCOLATE", -"CHOCOLATEIRA", -"CHOCOLATEIRO", -"CHOFER", -"CHOP", -"CHOPE", -"CHOPERIA", -"CHOPINIANO", -"CHOQUE", -"CHORADEIRA", -"CHORADO", -"CHORAMINGAR", -"CHORAMINGAS", -"CHORAMINGO", -"CHORAO", -"CHORAR", -"CHORINHO", -"CHORO", -"CHOROSAMENTE", -"CHOROSO", -"CHOUPANA", -"CHOURICO", -"CHOVA", -"CHOVER", -"CHOVIDO", -"CHRISTI", -"CHUA", -"CHUCHAR", -"CHUCHU", -"CHUCRUTE", -"CHUE", -"CHULE", -"CHULO", -"CHUMACO", -"CHUMBADO", -"CHUMBAR", -"CHUMBINHO", -"CHUMBO", -"CHUPADA", -"CHUPADELA", -"CHUPADO", -"CHUPAR", -"CHUPETA", -"CHURRASCADA", -"CHURRASCARIA", -"CHURRASCO", -"CHURRASQUEIRA", -"CHURRASQUINHO", -"CHURRO", -"CHUTAR", -"CHUTE", -"CHUTEIRA", -"CHUTEIRAS", -"CHUVA", -"CHUVAO", -"CHUVARADA", -"CHUVEIRINHO", -"CHUVEIRO", -"CHUVINHA", -"CHUVISCAR", -"CHUVISCO", -"CHUVOSO", -"CI", -"CIANATO", -"CIANETO", -"CIANIDRICO", -"CIATICA", -"CIATICO", -"CIBERESPACO", -"CIBERNETICA", -"CIBERNETICO", -"CICATRIZ", -"CICATRIZACAO", -"CICATRIZADO", -"CICATRIZANTE", -"CICATRIZAR", -"CICATRIZAVEL", -"CICERONE", -"CICIAR", -"CICIO", -"CICLICO", -"CICLISMO", -"CICLISTA", -"CICLISTICO", -"CICLO", -"CICLOMOTOR", -"CICLONE", -"CICLOPE", -"CICLOPICO", -"CICLOVIA", -"CICUTA", -"CIDADANIA", -"CIDADAO", -"CIDADE", -"CIDADELA", -"CIDRA", -"CIDREIRA", -"CIENCIA", -"CIENCIAS", -"CIENTE", -"CIENTIFICA", -"CIENTIFICAR", -"CIENTIFICAS", -"CIENTIFICO", -"CIENTISTA", -"CIENTISTAS", -"CIFRA", -"CIFRADO", -"CIFRAO", -"CIFRAR", -"CIGANO", -"CIGARRA", -"CIGARREIRA", -"CIGARRILHA", -"CIGARRO", -"CILADA", -"CILHA", -"CILHAR", -"CILIADO", -"CILINDRADA", -"CILINDRICO", -"CILINDRO", -"CILIO", -"CIMA", -"CIMBALO", -"CIMENTACAO", -"CIMENTAR", -"CIMENTO", -"CIMITARRA", -"CIMO", -"CINCO", -"CINDIR", -"CINE", -"CINEASTA", -"CINECLUBE", -"CINEFILO", -"CINEGRAFISTA", -"CINEJORNAL", -"CINEMA", -"CINEMASCOPE", -"CINEMATECA", -"CINEMATICA", -"CINEMATICO", -"CINEMATOGRAFIA", -"CINEMATOGRAFICO", -"CINEMATOGRAFO", -"CINERAMA", -"CINETICA", -"CINGALES", -"CINGIR", -"CINICO", -"CINISMO", -"CINQUENTA", -"CINQUENTAO", -"CINQUENTENARIO", -"CINTA", -"CINTILACAO", -"CINTILANTE", -"CINTILAR", -"CINTO", -"CINTURA", -"CINTURAO", -"CINZA", -"CINZAS", -"CINZEIRO", -"CINZEL", -"CINZELADO", -"CINZELAGEM", -"CINZELAMENTO", -"CINZELAR", -"CINZENTA", -"CINZENTO", -"CIO", -"CIOSO", -"CIPO", -"CIPOAL", -"CIPRESTE", -"CIPRIOTA", -"CIRANDA", -"CIRANDAR", -"CIRANDINHA", -"CIRCADIANO", -"CIRCENSE", -"CIRCO", -"CIRCUITO", -"CIRCULACAO", -"CIRCULANTE", -"CIRCULAR", -"CIRCULATORIO", -"CIRCULO", -"CIRCUNAVEGACAO", -"CIRCUNAVEGAR", -"CIRCUNCISAO", -"CIRCUNCISO", -"CIRCUNDADO", -"CIRCUNDANTE", -"CIRCUNDAR", -"CIRCUNFERENCIA", -"CIRCUNFLEXO", -"CIRCUNLOQUIO", -"CIRCUNSCREVER", -"CIRCUNSCRICAO", -"CIRCUNSCRITO", -"CIRCUNSPECCAO", -"CIRCUNSPECTO", -"CIRCUNSTANCIA", -"CIRCUNSTANCIAL", -"CIRILICO", -"CIRIO", -"CIRRO", -"CIRROSE", -"CIRURGIA", -"CIRURGIAO", -"CIRURGICA", -"CIRURGICO", -"CISALPINO", -"CISCAR", -"CISCO", -"CISMA", -"CISMAR", -"CISNE", -"CISTERNA", -"CISTITE", -"CISTO", -"CITACAO", -"CITADINO", -"CITADO", -"CITAR", -"CITARA", -"CITOLOGIA", -"CITOLOGICO", -"CITOLOGISTA", -"CITOPLASMA", -"CITOPLASMATICO", -"CITRICO", -"CIUME", -"CIUMENTO", -"CIVEL", -"CIVICO", -"CIVIL", -"CIVILIDADE", -"CIVILIZACAO", -"CIVILIZADO", -"CIVILIZAR", -"CIVISMO", -"CL", -"CLA", -"CLAMAR", -"CLAMOR", -"CLANDESTINIDADE", -"CLANDESTINO", -"CLAQUETE", -"CLARA", -"CLARABOIA", -"CLARAO", -"CLAREAR", -"CLAREIRA", -"CLAREZA", -"CLARIDADE", -"CLARIFICACAO", -"CLARIFICAR", -"CLARIFICATIVO", -"CLARIM", -"CLARINETE", -"CLARINETISTA", -"CLARIVIDENCIA", -"CLARIVIDENTE", -"CLARO", -"CLASSE", -"CLASSICA", -"CLASSICAS", -"CLASSICISMO", -"CLASSICISTA", -"CLASSICO", -"CLASSIFICACAO", -"CLASSIFICACOES", -"CLASSIFICADO", -"CLASSIFICAR", -"CLASSIFICATORIO", -"CLASSIFICAVEL", -"CLASSIFIQUEI", -"CLASSUDO", -"CLAUDICACAO", -"CLAUDICANCIA", -"CLAUDICANTE", -"CLAUDICAR", -"CLAUSTRO", -"CLAUSTROFOBIA", -"CLAUSTROFOBICO", -"CLAUSTROFOBO", -"CLAUSULA", -"CLAUSURA", -"CLAVA", -"CLAVE", -"CLAVICULA", -"CLEMENCIA", -"CLEMENTE", -"CLEPSIDRA", -"CLEPTOMANIA", -"CLEPTOMANIACO", -"CLEPTOMANO", -"CLERICALISMO", -"CLERIGO", -"CLERO", -"CLICAR", -"CLICAVEL", -"CLICHE", -"CLIENTE", -"CLIENTELA", -"CLIENTELISMO", -"CLIMA", -"CLIMATERIO", -"CLIMATICO", -"CLIMATIZACAO", -"CLIMATIZADO", -"CLIMATIZAR", -"CLIMATOLOGIA", -"CLIMATOLOGICO", -"CLIMAX", -"CLINICA", -"CLINICAR", -"CLINICO", -"CLIP", -"CLIPE", -"CLIPER", -"CLIQUE", -"CLISTER", -"CLITICO", -"CLITORIDIANO", -"CLITORIS", -"CLOACA", -"CLONAGEM", -"CLONAL", -"CLONAR", -"CLONE", -"CLORACAO", -"CLORADO", -"CLORAR", -"CLORETO", -"CLORICO", -"CLORIDRICO", -"CLORO", -"CLOROFILA", -"CLOROFILADO", -"CLOROFLUOROCARBONETO", -"CLOROFORMIO", -"CLOROPLASTO", -"CLOROSO", -"CLOSE", -"CLT", -"CLUBE", -"CLUSTER", -"CO", -"COABITACAO", -"COABITAR", -"COACAO", -"COADJUVANTE", -"COADOR", -"COAGIDO", -"COAGIR", -"COAGULACAO", -"COAGULADOR", -"COAGULANTE", -"COAGULAR", -"COAGULAVEL", -"COAGULO", -"COALA", -"COALHADA", -"COALHADO", -"COALHAR", -"COALIZAO", -"COAR", -"COAXANTE", -"COAXAR", -"COAXIAL", -"COBAIA", -"COBALTO", -"COBERTA", -"COBERTO", -"COBERTOR", -"COBERTURA", -"COBICA", -"COBICAR", -"COBICOSO", -"COBOL", -"COBRA", -"COBRADOR", -"COBRANCA", -"COBRAR", -"COBRAVEL", -"COBRE", -"COBRIR", -"COCA", -"COCADA", -"COCAINA", -"COCAR", -"COCCIX", -"COCEGAS", -"COCEIRA", -"COCHE", -"COCHEIRA", -"COCHICHAR", -"COCHICHO", -"COCHILAR", -"COCHILO", -"COCKER", -"COCO", -"COCORAS", -"COCORICAR", -"COCORICO", -"COCORUTO", -"COCOTA", -"CODEINA", -"CODICE", -"CODIFICACAO", -"CODIFICADO", -"CODIFICADOR", -"CODIFICAR", -"CODIGO", -"CODINOME", -"CODON", -"CODORNA", -"CODORNIZ", -"COEFICIENTE", -"COELHO", -"COENTRO", -"COERCAO", -"COERENCIA", -"COERENTE", -"COESAO", -"COESO", -"COEXISTENCIA", -"COEXISTIR", -"COFRE", -"COGITAR", -"COGITO", -"COGNATO", -"COGNITIVO", -"COGNOME", -"COGUMELO", -"COIBIR", -"COICE", -"COINCIDENCIA", -"COINCIDENTE", -"COINCIDIR", -"COIO", -"COIOTE", -"COISA", -"COISAS", -"COISISSIMA", -"COITADO", -"COITO", -"COLA", -"COLABORACAO", -"COLABORACIONISMO", -"COLABORACIONISTA", -"COLABORADOR", -"COLABORAR", -"COLACAO", -"COLADO", -"COLAGEM", -"COLAGENO", -"COLANTE", -"COLAPSO", -"COLAR", -"COLARINHO", -"COLATERAL", -"COLCHA", -"COLCHAO", -"COLCHEIA", -"COLCHETE", -"COLCHETES", -"COLCHONETE", -"COLCOS", -"COLDRE", -"COLECAO", -"COLECIONADOR", -"COLECIONAR", -"COLEGA", -"COLEGIAL", -"COLEGIO", -"COLEGUISMO", -"COLEIRA", -"COLEOPTERO", -"COLERA", -"COLERICO", -"COLESTEROL", -"COLETA", -"COLETANEA", -"COLETAR", -"COLETE", -"COLETIVA", -"COLETIVIDADE", -"COLETIVISMO", -"COLETIVIZACAO", -"COLETIVIZADO", -"COLETIVIZAR", -"COLETIVO", -"COLETOR", -"COLHEDEIRA", -"COLHEITA", -"COLHER", -"COLHERADA", -"COLIBRI", -"COLICA", -"COLIDIR", -"COLIGACAO", -"COLIGADO", -"COLIGAR", -"COLIGIR", -"COLINA", -"COLINAS", -"COLINEAR", -"COLIRIO", -"COLISAO", -"COLISEU", -"COLITE", -"COLLANT", -"COLMAR", -"COLMEIA", -"COLO", -"COLOCACAO", -"COLOCADO", -"COLOCAR", -"COLOIDAL", -"COLOIDE", -"COLOMBIANO", -"COLOMBINA", -"COLON", -"COLONIA", -"COLONIAL", -"COLONIALISMO", -"COLONIALISTA", -"COLONIZACAO", -"COLONIZADO", -"COLONIZADOR", -"COLONIZAR", -"COLONIZAVEL", -"COLONO", -"COLOQUIAL", -"COLOQUIALISMO", -"COLOQUIO", -"COLORACAO", -"COLORADO", -"COLORANTE", -"COLORAU", -"COLORIDA", -"COLORIDO", -"COLORIR", -"COLORIZACAO", -"COLORIZAR", -"COLOSSAL", -"COLOSSO", -"COLUBRINA", -"COLUMBICULTOR", -"COLUMBICULTURA", -"COLUMBOFILIA", -"COLUMBOFILO", -"COLUNA", -"COLUNAVEL", -"COLUNISMO", -"COLUNISTA", -"COLUSAO", -"COM", -"COMA", -"COMADRE", -"COMANCHE", -"COMANDANTE", -"COMANDAR", -"COMANDO", -"COMANDOS", -"COMARCA", -"COMATOSO", -"COMBALIDO", -"COMBALIR", -"COMBATE", -"COMBATENTE", -"COMBATENTES", -"COMBATER", -"COMBATIVIDADE", -"COMBATIVO", -"COMBINACAO", -"COMBINADO", -"COMBINAR", -"COMBINATORIA", -"COMBINATORIO", -"COMBOIO", -"COMBUSTAO", -"COMBUSTIVEL", -"COMECADAS", -"COMECAR", -"COMECO", -"COMEDIA", -"COMEDIANTE", -"COMEDIDO", -"COMEDIMENTO", -"COMEDIR", -"COMEMORACAO", -"COMEMORAR", -"COMEMORATIVO", -"COMENDA", -"COMENDADOR", -"COMENSAL", -"COMENSURAR", -"COMENSURAVEL", -"COMENTAR", -"COMENTARIO", -"COMENTARIOS", -"COMENTARISTA", -"COMER", -"COMERCIAL", -"COMERCIALIZACAO", -"COMERCIALIZADO", -"COMERCIALIZAR", -"COMERCIALIZAVEL", -"COMERCIANTE", -"COMERCIAR", -"COMERCIAVEL", -"COMERCIO", -"COMES", -"COMESTIVEIS", -"COMESTIVEL", -"COMETA", -"COMETER", -"COMEU", -"COMICHAO", -"COMICIDADE", -"COMICIO", -"COMICO", -"COMIDA", -"COMIDO", -"COMIGO", -"COMILANCA", -"COMILAO", -"COMINHO", -"COMISERACAO", -"COMISERAR", -"COMISSAO", -"COMISSARIO", -"COMISSIONADO", -"COMISSIONAMENTO", -"COMISSIONAR", -"COMITE", -"COMITIVA", -"COMO", -"COMOCAO", -"COMODA", -"COMODIDADE", -"COMODISMO", -"COMODISTA", -"COMODO", -"COMODORO", -"COMOVEDOR", -"COMOVENTE", -"COMOVER", -"COMOVIDO", -"COMPACTACAO", -"COMPACTADOR", -"COMPACTAR", -"COMPACTO", -"COMPACTUAR", -"COMPADECER", -"COMPADECIDO", -"COMPADECIMENTO", -"COMPADRE", -"COMPAIXAO", -"COMPANHEIRA", -"COMPANHEIRISMO", -"COMPANHEIRO", -"COMPANHIA", -"COMPARACAO", -"COMPARADA", -"COMPARADO", -"COMPARAR", -"COMPARATIVA", -"COMPARATIVO", -"COMPARAVEL", -"COMPARECER", -"COMPARECIMENTO", -"COMPARSA", -"COMPARTILHADO", -"COMPARTILHAR", -"COMPARTIMENTO", -"COMPASSADO", -"COMPASSIVO", -"COMPASSO", -"COMPATIBILIDADE", -"COMPATIVEL", -"COMPATRIOTA", -"COMPELIDO", -"COMPELIR", -"COMPENDIO", -"COMPENETRACAO", -"COMPENETRADO", -"COMPENETRAR", -"COMPENSA", -"COMPENSACAO", -"COMPENSADO", -"COMPENSADOR", -"COMPENSAR", -"COMPENSATORIO", -"COMPETENCIA", -"COMPETENTE", -"COMPETICAO", -"COMPETIDOR", -"COMPETIR", -"COMPETITIVIDADE", -"COMPETITIVO", -"COMPILACAO", -"COMPILADOR", -"COMPILAR", -"COMPLACENCIA", -"COMPLACENTE", -"COMPLEICAO", -"COMPLEMENTACAO", -"COMPLEMENTAR", -"COMPLEMENTARIDADE", -"COMPLEMENTO", -"COMPLETA", -"COMPLETADA", -"COMPLETAMENTE", -"COMPLETAR", -"COMPLETO", -"COMPLETOS", -"COMPLEXADO", -"COMPLEXAR", -"COMPLEXIDADE", -"COMPLEXO", -"COMPLICACAO", -"COMPLICADO", -"COMPLICAR", -"COMPLO", -"COMPONENTE", -"COMPONENTES", -"COMPOR", -"COMPORTA", -"COMPORTADO", -"COMPORTAMENTO", -"COMPORTAR", -"COMPOSICAO", -"COMPOSITOR", -"COMPOSTA", -"COMPOSTO", -"COMPOTA", -"COMPOTEIRA", -"COMPRA", -"COMPRADOR", -"COMPRAR", -"COMPREENDER", -"COMPREENDIDO", -"COMPREENSAO", -"COMPREENSIVEL", -"COMPREENSIVO", -"COMPRESSA", -"COMPRESSAO", -"COMPRESSIBILIDADE", -"COMPRESSOR", -"COMPRIDA", -"COMPRIDO", -"COMPRIMIDO", -"COMPRIMIR", -"COMPROBATORIO", -"COMPROMETEDOR", -"COMPROMETER", -"COMPROMETIDO", -"COMPROMETIMENTO", -"COMPROMISSAR", -"COMPROMISSO", -"COMPROVACAO", -"COMPROVANTE", -"COMPROVAR", -"COMPULSAO", -"COMPULSIVO", -"COMPULSORIO", -"COMPUNGIR", -"COMPUTACAO", -"COMPUTACIONAL", -"COMPUTADO", -"COMPUTADOR", -"COMPUTADORIZACAO", -"COMPUTADORIZADA", -"COMPUTADORIZAR", -"COMPUTAR", -"COMPUTAVEL", -"COMPUTO", -"COMUM", -"COMUNA", -"COMUNAL", -"COMUNGADO", -"COMUNGAR", -"COMUNHAO", -"COMUNICA", -"COMUNICABILIDADE", -"COMUNICACAO", -"COMUNICACOES", -"COMUNICADO", -"COMUNICADOR", -"COMUNICAR", -"COMUNICATIVO", -"COMUNICAVEL", -"COMUNICOLOGO", -"COMUNIDADE", -"COMUNISMO", -"COMUNISTA", -"COMUNITARIO", -"COMUTACAO", -"COMUTADOR", -"COMUTAR", -"COMUTATIVIDADE", -"COMUTATIVO", -"CONATIVA", -"CONCATENACAO", -"CONCATENAMENTO", -"CONCATENAR", -"CONCAVIDADE", -"CONCAVO", -"CONCEBER", -"CONCEBIVEL", -"CONCEDER", -"CONCEDIDO", -"CONCEICAO", -"CONCEITO", -"CONCEITOS", -"CONCEITUACAO", -"CONCEITUADO", -"CONCEITUAL", -"CONCEITUALISMO", -"CONCEITUAR", -"CONCENTRACAO", -"CONCENTRADO", -"CONCENTRAR", -"CONCENTRICO", -"CONCEPCAO", -"CONCERNENTE", -"CONCERNIR", -"CONCERTINO", -"CONCERTISTA", -"CONCERTO", -"CONCESSAO", -"CONCESSIONARIA", -"CONCESSIVA", -"CONCHA", -"CONCHAVADO", -"CONCHAVAR", -"CONCHAVO", -"CONCIDADAO", -"CONCILIACAO", -"CONCILIADOR", -"CONCILIAR", -"CONCILIATORIO", -"CONCILIAVEL", -"CONCILIO", -"CONCISAO", -"CONCISO", -"CONCLAMACAO", -"CONCLAMAR", -"CONCLAVE", -"CONCLUDENTE", -"CONCLUIDO", -"CONCLUIR", -"CONCLUSAO", -"CONCLUSIVA", -"CONCLUSIVO", -"CONCOMITANCIA", -"CONCOMITANTE", -"CONCORDANCIA", -"CONCORDANTE", -"CONCORDAR", -"CONCORDATA", -"CONCORDATARIO", -"CONCORDIA", -"CONCORRENCIA", -"CONCORRENTE", -"CONCORRER", -"CONCORRIDO", -"CONCRETA", -"CONCRETISMO", -"CONCRETISTA", -"CONCRETIZACAO", -"CONCRETIZADO", -"CONCRETIZAR", -"CONCRETIZAVEL", -"CONCRETO", -"CONCUBINA", -"CONCUBINAGEM", -"CONCUBINAR", -"CONCUBINATO", -"CONCUNHADO", -"CONCURSADO", -"CONCURSAR", -"CONCURSO", -"CONCUSSAO", -"CONDADO", -"CONDAO", -"CONDE", -"CONDECORACAO", -"CONDECORADO", -"CONDECORAR", -"CONDENACAO", -"CONDENADO", -"CONDENAR", -"CONDENAVEL", -"CONDENSACAO", -"CONDENSADOR", -"CONDENSAR", -"CONDESCENDENCIA", -"CONDESCENDENTE", -"CONDESCENDER", -"CONDESSA", -"CONDICAO", -"CONDICIONADO", -"CONDICIONADOR", -"CONDICIONAL", -"CONDICIONAMENTO", -"CONDICIONAR", -"CONDICOES", -"CONDIMENTACAO", -"CONDIMENTADO", -"CONDIMENTAR", -"CONDIMENTO", -"CONDIZENTE", -"CONDIZER", -"CONDOER", -"CONDOIDO", -"CONDOIMENTO", -"CONDOLENCIA", -"CONDOLENTE", -"CONDOMINIO", -"CONDOMINO", -"CONDOR", -"CONDUCAO", -"CONDUTA", -"CONDUTANCIA", -"CONDUTIBILIDADE", -"CONDUTIVEL", -"CONDUTIVIDADE", -"CONDUTIVO", -"CONDUTO", -"CONDUTOR", -"CONDUZ", -"CONDUZIR", -"CONE", -"CONECTAR", -"CONECTIVO", -"CONECTOR", -"CONEGO", -"CONEXAO", -"CONEXO", -"CONFABULACAO", -"CONFABULAR", -"CONFECCAO", -"CONFECCIONADO", -"CONFECCIONADOR", -"CONFECCIONAR", -"CONFECCIONISTA", -"CONFEDERACAO", -"CONFEDERADO", -"CONFEDERAR", -"CONFEDERATIVO", -"CONFEITADO", -"CONFEITAR", -"CONFEITARIA", -"CONFEITEIRO", -"CONFEITO", -"CONFERENCIA", -"CONFERENCIAR", -"CONFERENCISTA", -"CONFERIR", -"CONFESSADO", -"CONFESSAR", -"CONFESSAVEL", -"CONFESSIONARIO", -"CONFESSOR", -"CONFETE", -"CONFIABILIDADE", -"CONFIADO", -"CONFIANCA", -"CONFIANTE", -"CONFIAR", -"CONFIAVEL", -"CONFIDENCIA", -"CONFIDENCIAL", -"CONFIDENCIAR", -"CONFIDENTE", -"CONFIGURACAO", -"CONFIGURAR", -"CONFINAMENTO", -"CONFINAR", -"CONFINS", -"CONFIRMACAO", -"CONFIRMAR", -"CONFISCAR", -"CONFISCO", -"CONFISSAO", -"CONFLAGRACAO", -"CONFLAGRAR", -"CONFLITANTE", -"CONFLITO", -"CONFLUENCIA", -"CONFLUENTE", -"CONFLUIR", -"CONFORMACAO", -"CONFORMADO", -"CONFORMAR", -"CONFORME", -"CONFORMIDADE", -"CONFORMISMO", -"CONFORMISTA", -"CONFORTADOR", -"CONFORTAR", -"CONFORTAVEL", -"CONFORTO", -"CONFRADE", -"CONFRARIA", -"CONFRATERNIZACAO", -"CONFRATERNIZAR", -"CONFRONTACAO", -"CONFRONTAR", -"CONFRONTO", -"CONFUCIONISMO", -"CONFUCIONISTA", -"CONFUNDIR", -"CONFUNDIVEL", -"CONFUSAO", -"CONFUSO", -"CONGA", -"CONGADO", -"CONGELACAO", -"CONGELADOR", -"CONGELADOS", -"CONGELAMENTO", -"CONGELAR", -"CONGENERE", -"CONGENITO", -"CONGESTAO", -"CONGESTIONAMENTO", -"CONGESTIONAR", -"CONGLOMERACAO", -"CONGLOMERADO", -"CONGLOMERAR", -"CONGOLES", -"CONGRACAMENTO", -"CONGRACAR", -"CONGRATULACAO", -"CONGRATULAR", -"CONGREGACAO", -"CONGREGAR", -"CONGRESSISTA", -"CONGRESSO", -"CONGRUENCIA", -"CONGRUENTE", -"CONHAQUE", -"CONHECE", -"CONHECEDOR", -"CONHECER", -"CONHECIDAS", -"CONHECIDO", -"CONHECIMENTO", -"CONICO", -"CONIFERAS", -"CONIVENCIA", -"CONIVENTE", -"CONJECTURA", -"CONJECTURAL", -"CONJECTURAR", -"CONJECTURAVEL", -"CONJETURAR", -"CONJUGACAO", -"CONJUGAL", -"CONJUGAR", -"CONJUGAVEL", -"CONJUGE", -"CONJUNCAO", -"CONJUNTA", -"CONJUNTIVITE", -"CONJUNTIVO", -"CONJUNTO", -"CONJUNTOS", -"CONJUNTURA", -"CONJURACAO", -"CONJURADO", -"CONJURAR", -"CONLUIO", -"CONOSCO", -"CONOTACAO", -"CONOTAR", -"CONOTATIVO", -"CONQUANTO", -"CONQUISTA", -"CONQUISTADO", -"CONQUISTADOR", -"CONQUISTAR", -"CONQUISTAVEL", -"CONSAGRACAO", -"CONSAGRADO", -"CONSAGRAR", -"CONSANGUINEO", -"CONSANGUINIDADE", -"CONSCIENCIA", -"CONSCIENCIOSO", -"CONSCIENTE", -"CONSCIENTIZACAO", -"CONSCIENTIZAR", -"CONSCIO", -"CONSCRICAO", -"CONSCRITO", -"CONSECUTIVA", -"CONSECUTIVO", -"CONSEGUI", -"CONSEGUIA", -"CONSEGUINTE", -"CONSEGUIR", -"CONSELHEIRO", -"CONSELHO", -"CONSENSO", -"CONSENTIMENTO", -"CONSENTIR", -"CONSEQUENCIA", -"CONSEQUENTE", -"CONSERTADO", -"CONSERTAR", -"CONSERTO", -"CONSERVA", -"CONSERVACAO", -"CONSERVACIONISTA", -"CONSERVADO", -"CONSERVADOR", -"CONSERVADORISMO", -"CONSERVANTE", -"CONSERVAR", -"CONSERVATORIO", -"CONSIDERACAO", -"CONSIDERADO", -"CONSIDERAR", -"CONSIDERAVA", -"CONSIDERAVEL", -"CONSIDERO", -"CONSIGNACAO", -"CONSIGNAR", -"CONSIGO", -"CONSISTENCIA", -"CONSISTENTE", -"CONSISTIR", -"CONSOANTE", -"CONSOLACAO", -"CONSOLADO", -"CONSOLADOR", -"CONSOLAR", -"CONSOLAVEL", -"CONSOLE", -"CONSOLIDACAO", -"CONSOLIDADO", -"CONSOLIDAR", -"CONSOLO", -"CONSOME", -"CONSONANCIA", -"CONSONANTAL", -"CONSORCIO", -"CONSORTE", -"CONSPICUO", -"CONSPIRACAO", -"CONSPIRADOR", -"CONSPIRAR", -"CONSTANCIA", -"CONSTANTE", -"CONSTAR", -"CONSTATACAO", -"CONSTATAR", -"CONSTELACAO", -"CONSTELACOES", -"CONSTERNACAO", -"CONSTERNADO", -"CONSTERNADOR", -"CONSTERNAR", -"CONSTIPACAO", -"CONSTIPADO", -"CONSTIPAR", -"CONSTITUCIONAL", -"CONSTITUCIONALIDADE", -"CONSTITUCIONALISMO", -"CONSTITUCIONALISTA", -"CONSTITUCIONALIZAR", -"CONSTITUICAO", -"CONSTITUIDO", -"CONSTITUINTE", -"CONSTITUIR", -"CONSTITUTIVO", -"CONSTRANGEDOR", -"CONSTRANGER", -"CONSTRANGIDO", -"CONSTRANGIMENTO", -"CONSTRINGIR", -"CONSTRUCAO", -"CONSTRUCOES", -"CONSTRUIR", -"CONSTRUTIVISMO", -"CONSTRUTIVISTA", -"CONSTRUTIVO", -"CONSTRUTOR", -"CONSUBSTANCIACAO", -"CONSUBSTANCIAR", -"CONSUETUDINARIO", -"CONSUL", -"CONSULADO", -"CONSULAR", -"CONSULENTE", -"CONSULESA", -"CONSULTA", -"CONSULTAR", -"CONSULTAVEL", -"CONSULTIVO", -"CONSULTOR", -"CONSULTORIA", -"CONSULTORIO", -"CONSUMACAO", -"CONSUMADO", -"CONSUMAR", -"CONSUMIDO", -"CONSUMIDOR", -"CONSUMIR", -"CONSUMISMO", -"CONSUMISTA", -"CONSUMIVEL", -"CONSUMO", -"CONTA", -"CONTABIL", -"CONTABILIDADE", -"CONTABILISTA", -"CONTABILIZACAO", -"CONTABILIZADO", -"CONTABILIZAR", -"CONTABILIZAVEL", -"CONTACTAR", -"CONTACTO", -"CONTADO", -"CONTADOR", -"CONTADORIA", -"CONTADOS", -"CONTAGEM", -"CONTAGIANTE", -"CONTAGIAR", -"CONTAGIO", -"CONTAGIOSO", -"CONTAINER", -"CONTAMINACAO", -"CONTAMINADO", -"CONTAMINAR", -"CONTANTO", -"CONTAR", -"CONTAS", -"CONTATO", -"CONTAVEL", -"CONTEINER", -"CONTEM", -"CONTEMPLACAO", -"CONTEMPLAR", -"CONTEMPLATIVO", -"CONTEMPORANEO", -"CONTEMPORIZACAO", -"CONTEMPORIZAR", -"CONTENCAO", -"CONTENDA", -"CONTENDOR", -"CONTENSAO", -"CONTENTAMENTO", -"CONTENTAR", -"CONTENTE", -"CONTENTO", -"CONTER", -"CONTERRANEO", -"CONTESTACAO", -"CONTESTADO", -"CONTESTAR", -"CONTESTATORIO", -"CONTESTAVEL", -"CONTEUDO", -"CONTEXTO", -"CONTIDAS", -"CONTIDO", -"CONTIGO", -"CONTIGUIDADE", -"CONTIGUO", -"CONTINENCIA", -"CONTINENTAL", -"CONTINENTE", -"CONTINENTES", -"CONTINGENCIA", -"CONTINGENTE", -"CONTINUA", -"CONTINUACAO", -"CONTINUAR", -"CONTINUIDADE", -"CONTINUISTA", -"CONTINUO", -"CONTISTA", -"CONTO", -"CONTORCAO", -"CONTORCER", -"CONTORCIDO", -"CONTORCIONISTA", -"CONTORNAR", -"CONTORNAVEL", -"CONTORNO", -"CONTRA", -"CONTRABAIXISTA", -"CONTRABAIXO", -"CONTRABALANCAR", -"CONTRABANDEAR", -"CONTRABANDISTA", -"CONTRABANDO", -"CONTRACAO", -"CONTRACAPA", -"CONTRACENAR", -"CONTRACEPCAO", -"CONTRACEPTIVO", -"CONTRACHEQUE", -"CONTRACULTURA", -"CONTRADICAO", -"CONTRADITORIO", -"CONTRADIZER", -"CONTRAFACAO", -"CONTRAFEITO", -"CONTRAFILE", -"CONTRAGOLPE", -"CONTRAGOSTO", -"CONTRAIDO", -"CONTRAIR", -"CONTRALTO", -"CONTRAMAO", -"CONTRAMESTRE", -"CONTRAPARTIDA", -"CONTRAPE", -"CONTRAPESO", -"CONTRAPONTISTICO", -"CONTRAPONTO", -"CONTRAPOR", -"CONTRAPORCA", -"CONTRAPOSTO", -"CONTRAPRODUCENTE", -"CONTRAPROPOSTA", -"CONTRAPROVA", -"CONTRARIADO", -"CONTRARIAR", -"CONTRARIEDADE", -"CONTRARIO", -"CONTRASTADO", -"CONTRASTANTE", -"CONTRASTAR", -"CONTRASTAVEL", -"CONTRASTE", -"CONTRATACAO", -"CONTRATADO", -"CONTRATANTE", -"CONTRATAR", -"CONTRATAVEL", -"CONTRATEMPO", -"CONTRATO", -"CONTRATORPEDEIRO", -"CONTRATUAL", -"CONTRAVENCAO", -"CONTRIBUICAO", -"CONTRIBUICOES", -"CONTRIBUINTE", -"CONTRIBUIR", -"CONTRICAO", -"CONTROLADO", -"CONTROLADORIA", -"CONTROLAR", -"CONTROLAVEL", -"CONTROLE", -"CONTROVERSIA", -"CONTROVERSO", -"CONTUDO", -"CONTUMACIA", -"CONTUMAZ", -"CONTUNDENTE", -"CONTUNDIDO", -"CONTUNDIR", -"CONTURBACAO", -"CONTURBADO", -"CONTURBAR", -"CONTUSAO", -"CONVALESCENCA", -"CONVALESCENTE", -"CONVALESCER", -"CONVECCAO", -"CONVENCAO", -"CONVENCER", -"CONVENCIDO", -"CONVENCIMENTO", -"CONVENCIONADO", -"CONVENCIONAL", -"CONVENCIONALISMO", -"CONVENCIONAR", -"CONVENCOES", -"CONVENIADO", -"CONVENIAR", -"CONVENIENCIA", -"CONVENIENTE", -"CONVENIO", -"CONVENTO", -"CONVERGENCIA", -"CONVERGENTE", -"CONVERGIR", -"CONVERSA", -"CONVERSACAO", -"CONVERSAO", -"CONVERSAR", -"CONVERSIVEL", -"CONVERSOR", -"CONVERTER", -"CONVERTIDO", -"CONVES", -"CONVESCOTE", -"CONVEXO", -"CONVICCAO", -"CONVICTO", -"CONVIDADO", -"CONVIDAR", -"CONVIDATIVO", -"CONVINCENTE", -"CONVIR", -"CONVITE", -"CONVIVA", -"CONVIVENCIA", -"CONVIVER", -"CONVIVIO", -"CONVOCACAO", -"CONVOCADO", -"CONVOCAR", -"CONVOSCO", -"CONVULSAO", -"CONVULSIVO", -"COOPERACAO", -"COOPERAR", -"COOPERATIVA", -"COOPERATIVISMO", -"COOPERATIVISTA", -"COOPTAR", -"COORDENACAO", -"COORDENADA", -"COORDENADAS", -"COORDENADOR", -"COORDENADORIA", -"COORDENAR", -"COORDENATIVA", -"COPA", -"COPAS", -"COPAZIO", -"COPEIRA", -"COPEIRO", -"COPEQUE", -"COPIA", -"COPIADORA", -"COPIAO", -"COPIAR", -"COPIDESCAR", -"COPIDESQUE", -"COPIOSO", -"COPISTA", -"COPLANAR", -"COPO", -"COPOS", -"COPTA", -"COPTICO", -"COPULA", -"COPULACAO", -"COPULAR", -"COPULATIVO", -"COPYRIGHT", -"COQUE", -"COQUEIRAL", -"COQUEIRO", -"COQUELUCHE", -"COQUETE", -"COQUETEL", -"COR", -"CORACAO", -"CORADO", -"CORAGEM", -"CORAJOSO", -"CORAL", -"CORALISTA", -"CORANTE", -"CORAR", -"CORCA", -"CORCEL", -"CORCOVA", -"CORCUNDA", -"CORDA", -"CORDADO", -"CORDAO", -"CORDAS", -"CORDEIRO", -"CORDEL", -"CORDIAL", -"CORDIALIDADE", -"CORDIALMENTE", -"CORDILHEIRA", -"CORDOBA", -"COREANO", -"COREOGRAFIA", -"COREOGRAFICO", -"COREOGRAFO", -"CORETO", -"CORINTIANO", -"CORISCAR", -"CORISCO", -"CORISTA", -"CORIZA", -"CORJA", -"CORNEA", -"CORNEAR", -"CORNEO", -"CORNER", -"CORNETA", -"CORNETEIRO", -"CORNO", -"CORNUCOPIA", -"CORNUDO", -"CORO", -"COROA", -"COROACAO", -"COROADO", -"COROAR", -"COROCA", -"COROINHA", -"COROLARIO", -"CORONARIA", -"CORONARIO", -"CORONEL", -"CORONHA", -"CORONHADA", -"CORPANZIL", -"CORPETE", -"CORPO", -"CORPORACAO", -"CORPORAL", -"CORPORATIVISMO", -"CORPORATIVISTA", -"CORPORATIVO", -"CORPOREO", -"CORPORIFICACAO", -"CORPORIFICAR", -"CORPULENCIA", -"CORPULENTO", -"CORPUS", -"CORPUSCULAR", -"CORPUSCULO", -"CORRECAO", -"CORRECIONAL", -"CORRECOES", -"CORREDEIRA", -"CORREDICA", -"CORREDICO", -"CORREDOR", -"CORREGEDOR", -"CORREGEDORIA", -"CORREGO", -"CORREIA", -"CORREIO", -"CORRELACAO", -"CORRELACIONAR", -"CORRELATAR", -"CORRELATAS", -"CORRELATIVO", -"CORRELATO", -"CORRELIGIONARIO", -"CORRENTE", -"CORRENTES", -"CORRENTEZA", -"CORRENTISTA", -"CORRER", -"CORRERIA", -"CORRESPONDENCIA", -"CORRESPONDENTE", -"CORRESPONDER", -"CORRETAGEM", -"CORRETAMENTE", -"CORRETAR", -"CORRETIVO", -"CORRETO", -"CORRETOR", -"CORRETORA", -"CORRETORIA", -"CORRIDA", -"CORRIGIDO", -"CORRIGIR", -"CORRIGIVEL", -"CORRIMAO", -"CORRIMENTO", -"CORRIQUEIRO", -"CORROBORACAO", -"CORROBORAR", -"CORROBORATIVO", -"CORROER", -"CORROIDO", -"CORROMPER", -"CORROMPIDO", -"CORROMPIMENTO", -"CORROSAO", -"CORROSIVIDADE", -"CORROSIVO", -"CORRUPCAO", -"CORRUPTELA", -"CORRUPTIBILIDADE", -"CORRUPTIVEL", -"CORRUPTIVO", -"CORRUPTO", -"CORRUPTOR", -"CORSARIO", -"CORSO", -"CORTADA", -"CORTADO", -"CORTANTE", -"CORTAR", -"CORTE", -"CORTEJADOR", -"CORTEJAR", -"CORTEJO", -"CORTES", -"CORTESA", -"CORTESAO", -"CORTESIA", -"CORTEX", -"CORTICA", -"CORTICAL", -"CORTICO", -"CORTICOIDE", -"CORTINA", -"CORTINAR", -"CORTINEIRO", -"CORTISONA", -"CORUJA", -"CORUSCAR", -"CORVEIA", -"CORVETA", -"CORVINA", -"CORVO", -"COS", -"COSER", -"COSMETICO", -"COSMICA", -"COSMICO", -"COSMICOS", -"COSMO", -"COSMOGONIA", -"COSMOGONICO", -"COSMOLOGIA", -"COSMOLOGICO", -"COSMOLOGO", -"COSMONAUTA", -"COSMONAUTICA", -"COSMONAVE", -"COSMOPOLITA", -"COSMOPOLITISMO", -"COSSACO", -"COSSECANTE", -"COSSENO", -"COSTA", -"COSTADO", -"COSTARRIQUENHO", -"COSTAS", -"COSTEAR", -"COSTEIRO", -"COSTELA", -"COSTELETA", -"COSTUMAR", -"COSTUME", -"COSTUMEIRO", -"COSTUMES", -"COSTURA", -"COSTURAR", -"COSTUREIRA", -"COSTUREIRO", -"COTA", -"COTACAO", -"COTADO", -"COTANGENTE", -"COTAR", -"COTEJAMENTO", -"COTEJAR", -"COTEJO", -"COTIDIANO", -"COTILEDONE", -"COTISTA", -"COTIZACAO", -"COTIZAR", -"COTIZAVEL", -"COTO", -"COTONETE", -"COTONICULTOR", -"COTONICULTURA", -"COTONIFICIO", -"COTOVELADA", -"COTOVELAR", -"COTOVELEIRA", -"COTOVELO", -"COTOVELOS", -"COTOVIA", -"COULOMB", -"COURACA", -"COURACADO", -"COUREIRO", -"COURO", -"COUVE", -"COVA", -"COVADO", -"COVALENTE", -"COVARDE", -"COVARDIA", -"COVARIANTE", -"COVEIRO", -"COVIL", -"COXA", -"COXEADURA", -"COXEAR", -"COXO", -"COZEDURA", -"COZER", -"COZIDO", -"COZIMENTO", -"COZINHA", -"COZINHAR", -"COZINHEIRA", -"COZINHEIRO", -"CPU", -"CR", -"CRACHA", -"CRACK", -"CRANIANA", -"CRANIANO", -"CRANIO", -"CRAPULA", -"CRAQUE", -"CRASE", -"CRASEAR", -"CRASSO", -"CRATERA", -"CRAVAR", -"CRAVEJAR", -"CRAVO", -"CRAWL", -"CREATINA", -"CRECHE", -"CREDENCIAIS", -"CREDENCIAL", -"CREDENCIAR", -"CREDIARIO", -"CREDIBILIDADE", -"CREDITAR", -"CREDITO", -"CREDO", -"CREDOR", -"CREDULIDADE", -"CREDULO", -"CREMACAO", -"CREMADO", -"CREMALHEIRA", -"CREMAR", -"CREMATORIO", -"CREME", -"CREMOSO", -"CRENCA", -"CRENDICE", -"CRENTE", -"CREOLINA", -"CREPE", -"CREPITACAO", -"CREPITANTE", -"CREPITAR", -"CREPOM", -"CREPUSCULAR", -"CREPUSCULO", -"CRER", -"CRESCENDO", -"CRESCENTE", -"CRESCER", -"CRESCIDO", -"CRESCIMENTO", -"CRESPO", -"CRESTOMATIA", -"CRETACEO", -"CRETENSE", -"CRETINICE", -"CRETINISMO", -"CRETINO", -"CRIA", -"CRIACAO", -"CRIACIONISMO", -"CRIACIONISTA", -"CRIACOES", -"CRIADA", -"CRIADAGEM", -"CRIADO", -"CRIADOR", -"CRIADOS", -"CRIANCA", -"CRIANCADA", -"CRIANCAS", -"CRIANCICE", -"CRIANCOLA", -"CRIAR", -"CRIATIVIDADE", -"CRIATIVO", -"CRIATURA", -"CRICRI", -"CRIEI", -"CRIME", -"CRIMES", -"CRIMINAL", -"CRIMINALIDADE", -"CRIMINALISTA", -"CRIMINALISTICA", -"CRIMINALIZAR", -"CRIMINOLOGIA", -"CRIMINOLOGISTA", -"CRIMINOSO", -"CRIMINOSOS", -"CRINA", -"CRIOGENIA", -"CRIOGENICO", -"CRIOULO", -"CRIPTA", -"CRIPTICO", -"CRIPTOGRAFAR", -"CRIPTOGRAFIA", -"CRIPTOGRAFICO", -"CRIPTOGRAFO", -"CRIPTOLOGIA", -"CRIPTOLOGICO", -"CRIPTONIO", -"CRIQUETE", -"CRISALIDA", -"CRISANTEMO", -"CRISE", -"CRISMA", -"CRISMAR", -"CRISPAR", -"CRISTA", -"CRISTAL", -"CRISTALEIRA", -"CRISTALINO", -"CRISTALIZACAO", -"CRISTALIZADO", -"CRISTALIZAR", -"CRISTALOGRAFIA", -"CRISTALOGRAFICO", -"CRISTANDADE", -"CRISTAO", -"CRISTIANISMO", -"CRISTIANIZACAO", -"CRISTIANIZAR", -"CRISTO", -"CRITERIO", -"CRITERIOSO", -"CRITICA", -"CRITICAR", -"CRITICAS", -"CRITICAVEL", -"CRITICO", -"CRIVADO", -"CRIVAR", -"CRIVEL", -"CRIVO", -"CROACIO", -"CROATA", -"CROCANTE", -"CROCHE", -"CROCODILIANO", -"CROCODILO", -"CROMADO", -"CROMAR", -"CROMATICA", -"CROMATICO", -"CROMATISMO", -"CROMO", -"CROMOSFERA", -"CROMOSSOMICO", -"CROMOSSOMO", -"CRONICA", -"CRONICO", -"CRONISTA", -"CRONOGRAMA", -"CRONOLOGIA", -"CRONOLOGICO", -"CRONOMETRAGEM", -"CRONOMETRAR", -"CRONOMETRICO", -"CRONOMETRISTA", -"CRONOMETRO", -"CROQUETE", -"CROQUI", -"CROSTA", -"CROTALO", -"CRU", -"CRUCIAL", -"CRUCIFICACAO", -"CRUCIFICADO", -"CRUCIFICAR", -"CRUCIFIXO", -"CRUEL", -"CRUELDADE", -"CRUSTACEO", -"CRUZ", -"CRUZADA", -"CRUZADAS", -"CRUZADISMO", -"CRUZADISTA", -"CRUZADO", -"CRUZAMENTO", -"CRUZAR", -"CRUZEIRO", -"CRUZES", -"CU", -"CUBA", -"CUBANO", -"CUBICA", -"CUBICO", -"CUBICULO", -"CUBISMO", -"CUBISTA", -"CUBITO", -"CUBO", -"CUCA", -"CUCO", -"CUCUIA", -"CUECA", -"CUEIRO", -"CUIA", -"CUICA", -"CUIDADO", -"CUIDADOSO", -"CUIDAM", -"CUIDAR", -"CUJO", -"CULATRA", -"CULINARIA", -"CULINARIO", -"CULMINANTE", -"CULMINAR", -"CULOTE", -"CULPA", -"CULPABILIDADE", -"CULPADO", -"CULPAR", -"CULPOSO", -"CULTIVADA", -"CULTIVAR", -"CULTIVAVEL", -"CULTIVO", -"CULTO", -"CULTUAR", -"CULTURA", -"CULTURAL", -"CUMBUCA", -"CUME", -"CUMPLICE", -"CUMPLICIDADE", -"CUMPRIDOR", -"CUMPRIMENTAR", -"CUMPRIMENTO", -"CUMPRIMENTOS", -"CUMPRIR", -"CUMULATIVO", -"CUMULO", -"CUNEIFORME", -"CUNHA", -"CUNHADA", -"CUNHADO", -"CUNHAGEM", -"CUNHANTA", -"CUNHAR", -"CUNHATA", -"CUNHO", -"CUNILINGUA", -"CUPE", -"CUPIDEZ", -"CUPIDO", -"CUPIM", -"CUPINCHA", -"CUPINZEIRO", -"CUPOM", -"CUPREO", -"CUPRICO", -"CUPULA", -"CURA", -"CURADO", -"CURADOR", -"CURADORIA", -"CURANDEIRISMO", -"CURANDEIRO", -"CURAR", -"CURARE", -"CURATIVO", -"CURAU", -"CURAVEL", -"CURDO", -"CURIA", -"CURIE", -"CURINGA", -"CURIO", -"CURIOSIDADE", -"CURIOSO", -"CURITIBANO", -"CURRA", -"CURRADO", -"CURRAL", -"CURRAR", -"CURRICULO", -"CURRUPIRA", -"CURSAR", -"CURSINHO", -"CURSIVO", -"CURSO", -"CURSOR", -"CURTA", -"CURTICAO", -"CURTIDO", -"CURTIR", -"CURTO", -"CURTOS", -"CURTOSE", -"CURTUME", -"CURUMIM", -"CURVA", -"CURVADO", -"CURVAR", -"CURVAS", -"CURVATURA", -"CURVO", -"CUSCUZ", -"CUSPE", -"CUSPIR", -"CUSTA", -"CUSTAR", -"CUSTAS", -"CUSTE", -"CUSTEAMENTO", -"CUSTEAR", -"CUSTEIO", -"CUSTO", -"CUSTODIA", -"CUSTODIAR", -"CUSTOSO", -"CUTANEO", -"CUTELO", -"CUTIA", -"CUTICULA", -"CUTIS", -"CUTUCADA", -"CUTUCAO", -"CUTUCAR", -"CZAR", -"CZARINA", -"CZARISMO", -"D", -"DA", -"DABLIO", -"DACHA", -"DACOTA", -"DADIVA", -"DADO", -"DADOS", -"DAGUERREOTIPO", -"DAI", -"DAIMIO", -"DAIQUIRI", -"DALI", -"DALIA", -"DALMATA", -"DALTON", -"DALTONICO", -"DALTONISMO", -"DAMA", -"DAMAS", -"DAMASCENO", -"DAMASCO", -"DAMASQUEIRO", -"DAMISTA", -"DANACAO", -"DANADO", -"DANAR", -"DANCA", -"DANCANTE", -"DANCAR", -"DANCARINA", -"DANCARINO", -"DANCETERIA", -"DANCING", -"DANIFICADO", -"DANIFICAR", -"DANINHA", -"DANINHO", -"DANO", -"DANOSO", -"DANTES", -"DANTESCO", -"DAQUELE", -"DAQUI", -"DAQUILO", -"DAR", -"DARDEJAR", -"DARDO", -"DARMA", -"DARWINIANO", -"DARWINISMO", -"DARWINISTA", -"DAS", -"DASEIN", -"DATA", -"DATACAO", -"DATAR", -"DATCHA", -"DATILOGRAFADO", -"DATILOGRAFAR", -"DATILOGRAFIA", -"DATILOGRAFICO", -"DATILOGRAFO", -"DATILOSCOPIA", -"DATILOSCOPICO", -"DATIVO", -"DC", -"DE", -"DEAO", -"DEBAIXO", -"DEBANDADA", -"DEBANDAR", -"DEBATE", -"DEBATER", -"DEBATIDO", -"DEBELAR", -"DEBENTURE", -"DEBIL", -"DEBILIDADE", -"DEBILITACAO", -"DEBILITAMENTO", -"DEBILITANTE", -"DEBILITAR", -"DEBILOIDE", -"DEBITAR", -"DEBITO", -"DEBOCHADO", -"DEBOCHAR", -"DEBOCHE", -"DEBRUCAR", -"DEBULHAR", -"DEBUTANTE", -"DEBUTANTES", -"DECADA", -"DECADENCIA", -"DECADENTE", -"DECAEDRO", -"DECAGONAL", -"DECAGONO", -"DECAGRAMA", -"DECAIDA", -"DECAIDO", -"DECAIMENTO", -"DECAIR", -"DECALCAR", -"DECALCOMANIA", -"DECALITRO", -"DECALOGO", -"DECALQUE", -"DECAMETRO", -"DECANATO", -"DECANO", -"DECANTACAO", -"DECANTAR", -"DECAPITACAO", -"DECAPITAR", -"DECASSEGIU", -"DECASSEGUI", -"DECASSILABO", -"DECATLETA", -"DECATLO", -"DECENAL", -"DECENCIA", -"DECENIO", -"DECENTE", -"DECEPAR", -"DECEPCAO", -"DECEPCIONAR", -"DECERTO", -"DECIBEL", -"DECIDI", -"DECIDIDO", -"DECIDIR", -"DECIFRAR", -"DECIFRAVEL", -"DECIGRAMA", -"DECILHAO", -"DECILITRO", -"DECIMAL", -"DECIMAR", -"DECIMETRO", -"DECIMO", -"DECISAO", -"DECISIVO", -"DECISORIO", -"DECLAMACAO", -"DECLAMAR", -"DECLARACAO", -"DECLARACOES", -"DECLARADO", -"DECLARANTE", -"DECLARAR", -"DECLARATIVA", -"DECLINACAO", -"DECLINAR", -"DECLINAVEL", -"DECLINIO", -"DECLIVE", -"DECO", -"DECODIFICACAO", -"DECODIFICADOR", -"DECODIFICAR", -"DECOLAGEM", -"DECOLAR", -"DECOMPOR", -"DECOMPOSICAO", -"DECOMPOSTO", -"DECORACAO", -"DECORADOR", -"DECORAR", -"DECORATIVO", -"DECOREBA", -"DECORO", -"DECOROSO", -"DECORRENCIA", -"DECORRENTE", -"DECORRER", -"DECORRIDO", -"DECOTADO", -"DECOTAR", -"DECOTE", -"DECREMENTO", -"DECREPITO", -"DECREPITUDE", -"DECRESCENTE", -"DECRESCER", -"DECRESCIMO", -"DECRETACAO", -"DECRETADO", -"DECRETAR", -"DECRETO", -"DECUBITO", -"DECUPLO", -"DECURSO", -"DEDAL", -"DEDAO", -"DEDAR", -"DEDETIZACAO", -"DEDETIZADO", -"DEDETIZAR", -"DEDICACAO", -"DEDICADA", -"DEDICADO", -"DEDICAR", -"DEDICATORIA", -"DEDILHACAO", -"DEDILHADO", -"DEDILHAR", -"DEDO", -"DEDOS", -"DEDUCAO", -"DEDURAR", -"DEDUTIVEL", -"DEDUTIVO", -"DEDUZIR", -"DEFASAGEM", -"DEFECAR", -"DEFECTIVO", -"DEFEITO", -"DEFEITOS", -"DEFEITUOSO", -"DEFENDER", -"DEFENDIDO", -"DEFENESTRACAO", -"DEFENESTRAR", -"DEFENSAVEL", -"DEFENSIVA", -"DEFENSIVEL", -"DEFENSIVO", -"DEFENSOR", -"DEFERENCIA", -"DEFERENTE", -"DEFERIDO", -"DEFERIMENTO", -"DEFERIR", -"DEFERIVEL", -"DEFESA", -"DEFIBRILADOR", -"DEFIBRILAR", -"DEFICIENCIA", -"DEFICIENTE", -"DEFICIT", -"DEFICITARIO", -"DEFINHADO", -"DEFINHAMENTO", -"DEFINHAR", -"DEFINICAO", -"DEFINIDO", -"DEFINIR", -"DEFINITIVO", -"DEFINIVEL", -"DEFLACAO", -"DEFLACIONADO", -"DEFLACIONAR", -"DEFLACIONARIO", -"DEFLAGRACAO", -"DEFLAGRADOR", -"DEFLAGRAR", -"DEFLORACAO", -"DEFLORADO", -"DEFLORAMENTO", -"DEFLORAR", -"DEFORMACAO", -"DEFORMADO", -"DEFORMAR", -"DEFORMAVEL", -"DEFORMIDADE", -"DEFRONTAR", -"DEFRONTE", -"DEFUMACAO", -"DEFUMADO", -"DEFUMAR", -"DEFUNTO", -"DEGAS", -"DEGELAR", -"DEGELO", -"DEGENERACAO", -"DEGENERADO", -"DEGENERAR", -"DEGLUTICAO", -"DEGLUTIR", -"DEGOLA", -"DEGOLADOR", -"DEGOLAMENTO", -"DEGOLAR", -"DEGRADACAO", -"DEGRADANTE", -"DEGRADAR", -"DEGRADE", -"DEGRAU", -"DEGRAUS", -"DEGREDADO", -"DEGREDAR", -"DEGREDO", -"DEGRINGOLADA", -"DEGRINGOLAR", -"DEGUSTACAO", -"DEGUSTAR", -"DEI", -"DEIFICACAO", -"DEIFICAR", -"DEITADO", -"DEITAR", -"DEITICO", -"DEIXA", -"DEIXAR", -"DEJA", -"DEJETO", -"DELA", -"DELACAO", -"DELAS", -"DELATAR", -"DELATOR", -"DELE", -"DELEGACAO", -"DELEGACIA", -"DELEGADO", -"DELEGAR", -"DELEITAR", -"DELEITE", -"DELETEI", -"DELETERIO", -"DELFIM", -"DELGADA", -"DELGADEZA", -"DELGADO", -"DELIBERACAO", -"DELIBERAR", -"DELIBERATIVO", -"DELICADEZA", -"DELICADO", -"DELICIA", -"DELICIAR", -"DELICIOSO", -"DELIMITACAO", -"DELIMITADOR", -"DELIMITAR", -"DELINEACAO", -"DELINEAMENTO", -"DELINEAR", -"DELINQUENCIA", -"DELINQUENTE", -"DELINQUIR", -"DELIRADO", -"DELIRANTE", -"DELIRAR", -"DELIRIO", -"DELIRIUM", -"DELITO", -"DELONGA", -"DELONGAS", -"DELTA", -"DELTOIDE", -"DEMAGOGIA", -"DEMAGOGICO", -"DEMAGOGO", -"DEMAIS", -"DEMANDA", -"DEMANDAR", -"DEMAO", -"DEMARCACAO", -"DEMARCADO", -"DEMARCAR", -"DEMARCATORIO", -"DEMARCAVEL", -"DEMASIA", -"DEMASIADO", -"DEMENCIA", -"DEMENTE", -"DEMERARA", -"DEMERITO", -"DEMISSAO", -"DEMISSIONARIO", -"DEMITIR", -"DEMIURGO", -"DEMO", -"DEMOCRACIA", -"DEMOCRATA", -"DEMOCRATICO", -"DEMOCRATIZACAO", -"DEMOCRATIZADO", -"DEMOCRATIZAR", -"DEMODE", -"DEMOGRAFIA", -"DEMOGRAFICO", -"DEMOGRAFO", -"DEMOLICAO", -"DEMOLIDOR", -"DEMOLIR", -"DEMONIACO", -"DEMONIO", -"DEMONSTRACAO", -"DEMONSTRADO", -"DEMONSTRAR", -"DEMONSTRATIVO", -"DEMONSTRAVEL", -"DEMORA", -"DEMORADO", -"DEMORAR", -"DEMOROU", -"DEMOTICO", -"DEMOVER", -"DENDE", -"DENDRITE", -"DENEGRIDO", -"DENEGRIR", -"DENGOSO", -"DENGUE", -"DENODO", -"DENOMINACAO", -"DENOMINADOR", -"DENOMINAR", -"DENOMINATIVO", -"DENOTACAO", -"DENOTAR", -"DENOTATIVA", -"DENOTATIVO", -"DENSIDADE", -"DENSIMETRO", -"DENSO", -"DENTADA", -"DENTADO", -"DENTADURA", -"DENTAL", -"DENTARIA", -"DENTARIO", -"DENTE", -"DENTES", -"DENTICAO", -"DENTIFRICIO", -"DENTISTA", -"DENTRE", -"DENTRO", -"DENTUCO", -"DENUNCIA", -"DENUNCIAR", -"DEPARAR", -"DEPAREI", -"DEPARTAMENTAL", -"DEPARTAMENTO", -"DEPARTAMENTOS", -"DEPAUPERACAO", -"DEPAUPERADO", -"DEPAUPERAR", -"DEPENADO", -"DEPENAR", -"DEPENDENCIA", -"DEPENDENTE", -"DEPENDER", -"DEPENDURADO", -"DEPENDURAR", -"DEPILACAO", -"DEPILADO", -"DEPILADOR", -"DEPILAR", -"DEPLORAR", -"DEPLORAVEL", -"DEPOIMENTO", -"DEPOIS", -"DEPOR", -"DEPORTACAO", -"DEPORTADO", -"DEPORTAR", -"DEPOSICAO", -"DEPOSITAR", -"DEPOSITARIO", -"DEPOSITO", -"DEPRAVACAO", -"DEPRAVADO", -"DEPRAVAR", -"DEPRECIACAO", -"DEPRECIADO", -"DEPRECIAR", -"DEPREDACAO", -"DEPREDADO", -"DEPREDAR", -"DEPREENDER", -"DEPRESSA", -"DEPRESSAO", -"DEPRESSIVO", -"DEPRIMENTE", -"DEPRIMIDO", -"DEPRIMIR", -"DEPUTADO", -"DEQUE", -"DERBY", -"DERIVA", -"DERIVACAO", -"DERIVADA", -"DERIVADO", -"DERIVAR", -"DERMATITE", -"DERMATOLOGIA", -"DERMATOLOGICO", -"DERMATOLOGISTA", -"DERMATOSE", -"DERME", -"DERRADEIRO", -"DERRAMA", -"DERRAMAMENTO", -"DERRAMAR", -"DERRAME", -"DERRAPAGEM", -"DERRAPAR", -"DERREDOR", -"DERRETER", -"DERRETIDA", -"DERRETIDO", -"DERRETIMENTO", -"DERROCADA", -"DERROGACAO", -"DERROGAMENTO", -"DERROGAR", -"DERROGATORIO", -"DERROGAVEL", -"DERROTA", -"DERROTADO", -"DERROTAR", -"DERROTISMO", -"DERROTISTA", -"DERRUBADA", -"DERRUBADO", -"DERRUBAR", -"DERVIXE", -"DES", -"DESABADO", -"DESABAFAR", -"DESABAMENTO", -"DESABAR", -"DESABITADO", -"DESABITUAR", -"DESABONAR", -"DESABOTOADO", -"DESABOTOAR", -"DESABRIDO", -"DESABRIGADO", -"DESABRIGAR", -"DESABROCHADO", -"DESABROCHAR", -"DESABUSADO", -"DESACATAR", -"DESACATO", -"DESACELERACAO", -"DESACELERAR", -"DESACERTO", -"DESACOMPANHADA", -"DESACOMPANHADO", -"DESACONSELHAR", -"DESACOPLAR", -"DESACORCOADO", -"DESACORCOAR", -"DESACORDADO", -"DESACORDO", -"DESACOSTUMADO", -"DESACOSTUMAR", -"DESACREDITADO", -"DESACREDITAR", -"DESAFETO", -"DESAFIADO", -"DESAFIADOR", -"DESAFIANTE", -"DESAFIAR", -"DESAFINACAO", -"DESAFINADO", -"DESAFINAMENTO", -"DESAFINAR", -"DESAFIO", -"DESAFOGADO", -"DESAFOGAR", -"DESAFORADO", -"DESAFORAMENTO", -"DESAFORAR", -"DESAFORO", -"DESAFORTUNADO", -"DESAGIO", -"DESAGRADAR", -"DESAGRADAVEL", -"DESAGRADO", -"DESAGRAVO", -"DESAGREGACAO", -"DESAGREGADO", -"DESAGREGAR", -"DESAGUADOURO", -"DESAGUAMENTO", -"DESAGUAR", -"DESAJEITADO", -"DESAJEITAMENTO", -"DESAJUIZADO", -"DESAJUSTADO", -"DESAJUSTAMENTO", -"DESAJUSTAR", -"DESAJUSTE", -"DESALINHADO", -"DESALINHAR", -"DESALINHAVADO", -"DESALINHAVAR", -"DESALINHO", -"DESALMADO", -"DESALOJAR", -"DESAMAMENTAR", -"DESAMARRAR", -"DESAMPARADO", -"DESAMPARAR", -"DESAMPARO", -"DESANCAR", -"DESANDAR", -"DESANIMACAO", -"DESANIMADO", -"DESANIMAR", -"DESANIMO", -"DESANUVIAR", -"DESAPAIXONADO", -"DESAPARECER", -"DESAPARECIDO", -"DESAPARECIMENTO", -"DESAPARICAO", -"DESAPEGADO", -"DESAPEGO", -"DESAPERTAR", -"DESAPONTADO", -"DESAPONTAMENTO", -"DESAPONTAR", -"DESAPROPRIACAO", -"DESAPROPRIAR", -"DESAPROVACAO", -"DESAPROVAR", -"DESARMADO", -"DESARMAMENTISMO", -"DESARMAMENTO", -"DESARMAR", -"DESARRAIGAR", -"DESARRANJAR", -"DESARRANJO", -"DESARRUMACAO", -"DESARRUMAR", -"DESARVORADO", -"DESARVORAR", -"DESASSOMBRO", -"DESASSOSSEGAR", -"DESASSOSSEGO", -"DESASTRADO", -"DESASTRE", -"DESASTROSO", -"DESATAR", -"DESATARRAXAR", -"DESATENCAO", -"DESATENCIOSO", -"DESATENTO", -"DESATINADO", -"DESATINAR", -"DESATINO", -"DESATIVACAO", -"DESATIVADO", -"DESATIVAR", -"DESATOLAR", -"DESATRELADO", -"DESATRELAR", -"DESAUSTAMENTO", -"DESAVENCA", -"DESAVENCAS", -"DESAVERGONHADO", -"DESAVISADO", -"DESBANCAR", -"DESBASTAR", -"DESBASTE", -"DESBLOQUEAR", -"DESBOCADO", -"DESBOCAMENTO", -"DESBOCAR", -"DESBOTAMENTO", -"DESBOTAR", -"DESBRAGADO", -"DESBRAGAMENTO", -"DESBRAGAR", -"DESBRAVADOR", -"DESBRAVAR", -"DESBUNDANTE", -"DESBUNDE", -"DESBUROCRATIZACAO", -"DESBUROCRATIZAR", -"DESCABECADO", -"DESCABELADO", -"DESCABELAR", -"DESCABIDO", -"DESCAFEINADO", -"DESCALABRO", -"DESCALCAR", -"DESCALCO", -"DESCAMBAR", -"DESCAMISADO", -"DESCAMPADO", -"DESCANSADO", -"DESCANSAR", -"DESCANSO", -"DESCAPITALIZACAO", -"DESCAPITALIZADO", -"DESCAPITALIZAR", -"DESCARADO", -"DESCARAMENTO", -"DESCARGA", -"DESCAROCADOR", -"DESCAROCAR", -"DESCARREGAMENTO", -"DESCARREGAR", -"DESCARRILHAMENTO", -"DESCARRILHAR", -"DESCARTAR", -"DESCARTAVEL", -"DESCARTE", -"DESCASCAR", -"DESCASO", -"DESCENDENCIA", -"DESCENDENTE", -"DESCENDER", -"DESCENTRALISMO", -"DESCENTRALIZACAO", -"DESCENTRALIZADO", -"DESCENTRALIZAR", -"DESCER", -"DESCIDA", -"DESCLASSIFICACAO", -"DESCLASSIFICADO", -"DESCLASSIFICAR", -"DESCOBERTA", -"DESCOBERTO", -"DESCOBRI", -"DESCOBRIDOR", -"DESCOBRIMENTO", -"DESCOBRIR", -"DESCOLAR", -"DESCOLONIZACAO", -"DESCOLONIZAR", -"DESCOLORACAO", -"DESCOLORIR", -"DESCOMEDIDO", -"DESCOMEDIMENTO", -"DESCOMPASSO", -"DESCOMPLICACAO", -"DESCOMPLICADO", -"DESCOMPLICAR", -"DESCOMPOSTURA", -"DESCOMUNAL", -"DESCONCENTRAR", -"DESCONCERTANTE", -"DESCONECTAR", -"DESCONEXO", -"DESCONFIADO", -"DESCONFIANCA", -"DESCONFIAR", -"DESCONFIOMETRO", -"DESCONFORTAVEL", -"DESCONFORTO", -"DESCONGELAMENTO", -"DESCONGELAR", -"DESCONGESTIONANTE", -"DESCONGESTIONAR", -"DESCONHECER", -"DESCONHECIDAS", -"DESCONHECIDO", -"DESCONJUNTADO", -"DESCONSERTADO", -"DESCONSERTAR", -"DESCONSIDERACAO", -"DESCONSIDERAR", -"DESCONSOLADO", -"DESCONSOLAR", -"DESCONSOLO", -"DESCONTAR", -"DESCONTENTAMENTO", -"DESCONTENTAR", -"DESCONTENTE", -"DESCONTINUA", -"DESCONTINUO", -"DESCONTO", -"DESCONTRACAO", -"DESCONTRAIDO", -"DESCONTRAIR", -"DESCONTROLADO", -"DESCONTROLAR", -"DESCONTROLE", -"DESCONVERSAR", -"DESCORADO", -"DESCORAR", -"DESCORTES", -"DESCORTESIA", -"DESCORTINAR", -"DESCOSER", -"DESCOSTURADO", -"DESCRAVAR", -"DESCREDENCIADO", -"DESCREDENCIAMENTO", -"DESCREDENCIAR", -"DESCREDITAR", -"DESCREDITO", -"DESCRENCA", -"DESCRENTE", -"DESCRER", -"DESCREVER", -"DESCRICAO", -"DESCRIPTION", -"DESCRITIVA", -"DESCRITIVEL", -"DESCRITIVO", -"DESCRUZAR", -"DESCUIDADO", -"DESCUIDAR", -"DESCUIDO", -"DESCULPA", -"DESCULPAR", -"DESCULPAVEL", -"DESDE", -"DESDEM", -"DESDENHAR", -"DESDENHOSO", -"DESDENTADO", -"DESDITA", -"DESDITOSO", -"DESDIZER", -"DESDOBRAMENTO", -"DESDOBRAR", -"DESDOBRAVEL", -"DESEJAR", -"DESEJAVA", -"DESEJAVEL", -"DESEJO", -"DESELEGANCIA", -"DESELEGANTE", -"DESEMBAINHAR", -"DESEMBARACADO", -"DESEMBARACAR", -"DESEMBARACO", -"DESEMBARALHAR", -"DESEMBARCADOURO", -"DESEMBARCAR", -"DESEMBARGADOR", -"DESEMBARQUE", -"DESEMBESTADA", -"DESEMBESTADO", -"DESEMBESTAR", -"DESEMBOCADURA", -"DESEMBOCAR", -"DESEMBOLSAR", -"DESEMBOLSO", -"DESEMBRULHAR", -"DESEMPATAR", -"DESEMPATE", -"DESEMPENAR", -"DESEMPENHAR", -"DESEMPENHO", -"DESEMPERRAR", -"DESEMPILHAR", -"DESEMPREGADO", -"DESEMPREGAR", -"DESEMPREGO", -"DESENCADEAMENTO", -"DESENCADEAR", -"DESENCAIXAR", -"DESENCAIXE", -"DESENCAIXOTAMENTO", -"DESENCAIXOTAR", -"DESENCALACRAR", -"DESENCALHAR", -"DESENCAMINHAR", -"DESENCANTAMENTO", -"DESENCANTAR", -"DESENCANTO", -"DESENCAPAR", -"DESENCARACOLAR", -"DESENCARDIR", -"DESENCARGO", -"DESENCARNAR", -"DESENCHER", -"DESENCILHAR", -"DESENCONTRADO", -"DESENCONTRAR", -"DESENCONTRO", -"DESENCORAJAR", -"DESENCOSTAR", -"DESENFERRUJAR", -"DESENFORMAR", -"DESENFREADO", -"DESENFREAR", -"DESENGANADO", -"DESENGANAR", -"DESENGANCHAR", -"DESENGATAR", -"DESENGATE", -"DESENGATILHAR", -"DESENGONCADO", -"DESENGONCO", -"DESENGUICAR", -"DESENHAR", -"DESENHISTA", -"DESENHO", -"DESENLACAR", -"DESENLACE", -"DESENRASCAR", -"DESENROLAR", -"DESENROSCAR", -"DESENTALAR", -"DESENTENDIDO", -"DESENTENDIMENTO", -"DESENTERRAR", -"DESENTORTAR", -"DESENTUPIR", -"DESENVOLTO", -"DESENVOLTURA", -"DESENVOLVER", -"DESENVOLVIDO", -"DESENVOLVIMENTO", -"DESENXABIDO", -"DESEQUILIBRADO", -"DESEQUILIBRAR", -"DESEQUILIBRIO", -"DESERCAO", -"DESERDADO", -"DESERDAR", -"DESERTAR", -"DESERTICO", -"DESERTIFICACAO", -"DESERTIFICAR", -"DESERTO", -"DESERTOR", -"DESESPERADO", -"DESESPERADOR", -"DESESPERANCA", -"DESESPERANCAR", -"DESESPERAR", -"DESESPERO", -"DESESTABILIZACAO", -"DESESTABILIZADO", -"DESESTABILIZAR", -"DESESTAGNAR", -"DESESTATIZAR", -"DESESTIMULA", -"DESESTIMULANTE", -"DESESTIMULO", -"DESESTRUTURAR", -"DESFACATEZ", -"DESFALCAR", -"DESFALECER", -"DESFALECIDO", -"DESFALQUE", -"DESFAVORAVEL", -"DESFAZER", -"DESFECHAR", -"DESFECHO", -"DESFEITA", -"DESFERIR", -"DESFIADO", -"DESFIAR", -"DESFIGURADO", -"DESFIGURAR", -"DESFILADEIRO", -"DESFILANTE", -"DESFILAR", -"DESFILE", -"DESFLORESTAMENTO", -"DESFLORESTAR", -"DESFOLHAR", -"DESFORRA", -"DESFORRAR", -"DESFRALDAR", -"DESFRIBILADOR", -"DESFRUTA", -"DESFRUTAR", -"DESFRUTAVEL", -"DESGARRADO", -"DESGARRAR", -"DESGASTANTE", -"DESGASTAR", -"DESGASTE", -"DESGINAR", -"DESGOSTO", -"DESGOSTOSO", -"DESGOVERNADO", -"DESGOVERNAR", -"DESGOVERNO", -"DESGRACA", -"DESGRACADO", -"DESGRACAR", -"DESGRACEIRA", -"DESGRAVAR", -"DESGRENHADO", -"DESGRENHAMENTO", -"DESGRENHAR", -"DESGRUDAR", -"DESGUARNECER", -"DESGUEDELHADO", -"DESGUEDELHAR", -"DESIDRATACAO", -"DESIDRATADO", -"DESIDRATANTE", -"DESIDRATAR", -"DESIGN", -"DESIGNACAO", -"DESIGNADO", -"DESIGNAR", -"DESIGNER", -"DESIGNIO", -"DESIGUAL", -"DESIGUALDADE", -"DESILUDIDO", -"DESILUDIR", -"DESILUSAO", -"DESIMPEDIDO", -"DESIMPEDIR", -"DESINCHAR", -"DESINDEXACAO", -"DESINDEXAR", -"DESINENCIA", -"DESINFETANTE", -"DESINFETAR", -"DESINFORMACAO", -"DESINIBIDO", -"DESINTEGRACAO", -"DESINTEGRAR", -"DESINTERESSADO", -"DESINTERESSE", -"DESINTOXICAR", -"DESISTENCIA", -"DESISTENTE", -"DESISTIR", -"DESJEJUM", -"DESLANCHAR", -"DESLAVADO", -"DESLAVAR", -"DESLEAL", -"DESLEALDADE", -"DESLEIXADO", -"DESLEIXAR", -"DESLEIXO", -"DESLIGADAO", -"DESLIGADO", -"DESLIGAMENTO", -"DESLIGAR", -"DESLINDAR", -"DESLIZAMENTO", -"DESLIZAR", -"DESLIZE", -"DESLOCACAO", -"DESLOCADO", -"DESLOCAMENTO", -"DESLOCAR", -"DESLUMBRADO", -"DESLUMBRAMENTO", -"DESLUMBRANTE", -"DESLUMBRAR", -"DESMAGNETIZACAO", -"DESMAGNETIZADO", -"DESMAGNETIZAR", -"DESMAIADO", -"DESMAIAR", -"DESMAIO", -"DESMAMADO", -"DESMAMAR", -"DESMANCHADO", -"DESMANCHAR", -"DESMANDAR", -"DESMANDO", -"DESMANTELAR", -"DESMARCAR", -"DESMASCARAR", -"DESMATAMENTO", -"DESMATAR", -"DESMATERIALIZACAO", -"DESMATERIALIZADO", -"DESMATERIALIZAR", -"DESMAZELADO", -"DESMAZELO", -"DESMEDIDO", -"DESMEMBRAMENTO", -"DESMEMBRAR", -"DESMEMORIADO", -"DESMENTIDO", -"DESMENTIR", -"DESMERECER", -"DESMERECIMENTO", -"DESMESURADO", -"DESMILINGUIDO", -"DESMILITARIZACAO", -"DESMILITARIZAR", -"DESMIOLADO", -"DESMISTIFICACAO", -"DESMISTIFICAR", -"DESMOBILHAR", -"DESMOBILIZACAO", -"DESMOBILIZADO", -"DESMOBILIZAR", -"DESMONTADO", -"DESMONTAR", -"DESMONTAVEL", -"DESMORALIZACAO", -"DESMORALIZADO", -"DESMORALIZANTE", -"DESMORALIZAR", -"DESMORONAMENTO", -"DESMORONAR", -"DESMOTIVADO", -"DESMUNHECADO", -"DESMUNHECAR", -"DESNACIONALIZACAO", -"DESNACIONALIZADO", -"DESNACIONALIZAR", -"DESNATADO", -"DESNATAR", -"DESNATURADO", -"DESNECESSARIO", -"DESNIVEL", -"DESNIVELAMENTO", -"DESNIVELAR", -"DESNORTEADO", -"DESNORTEAMENTO", -"DESNORTEANTE", -"DESNORTEAR", -"DESNORTEIO", -"DESNUDAMENTO", -"DESNUDAR", -"DESNUDO", -"DESNUTRICAO", -"DESNUTRIDO", -"DESNUTRIR", -"DESOBEDECER", -"DESOBEDIENCIA", -"DESOBEDIENTE", -"DESOBRIGADO", -"DESOBRIGAR", -"DESOBSTRUCAO", -"DESOBSTRUIR", -"DESOCUPACAO", -"DESOCUPADO", -"DESOCUPAR", -"DESODORANTE", -"DESOLACAO", -"DESOLADO", -"DESOLADOR", -"DESOLAMENTO", -"DESOLAR", -"DESONESTIDADE", -"DESONESTO", -"DESONRA", -"DESONRAR", -"DESONROSO", -"DESOPILANTE", -"DESOPILAR", -"DESOPRIMIR", -"DESORDEIRO", -"DESORDEM", -"DESORDENADO", -"DESORDENAR", -"DESORGANIZACAO", -"DESORGANIZADO", -"DESORGANIZAR", -"DESORIENTACAO", -"DESORIENTADO", -"DESORIENTAR", -"DESOSSADO", -"DESOSSAR", -"DESOVA", -"DESOVAR", -"DESOXIRRIBONUCLEICO", -"DESPACHADO", -"DESPACHANTE", -"DESPACHAR", -"DESPACHO", -"DESPARAFUSAR", -"DESPAUTERIO", -"DESPEDACAR", -"DESPEDIDA", -"DESPEDIR", -"DESPEITADO", -"DESPEITAR", -"DESPEITO", -"DESPEJADO", -"DESPEJAR", -"DESPEJO", -"DESPENCAR", -"DESPENHADEIRO", -"DESPENSA", -"DESPERCEBIDO", -"DESPERDICADO", -"DESPERDICAR", -"DESPERDICIO", -"DESPERTADOR", -"DESPERTAR", -"DESPERTO", -"DESPESA", -"DESPESAS", -"DESPETALAR", -"DESPIDO", -"DESPIR", -"DESPITAR", -"DESPOJADO", -"DESPOJAR", -"DESPOLARIZACAO", -"DESPOLARIZAR", -"DESPONTAR", -"DESPORTE", -"DESPORTISTA", -"DESPORTIVO", -"DESPORTO", -"DESPOSAR", -"DESPOTA", -"DESPOTICO", -"DESPOTISMO", -"DESPOVOADO", -"DESPOVOAR", -"DESPRAZER", -"DESPREGADAS", -"DESPREGADO", -"DESPREGAR", -"DESPRENDER", -"DESPRENDIDO", -"DESPRENDIMENTO", -"DESPREOCUPADO", -"DESPREOCUPAR", -"DESPREPARADO", -"DESPREPARO", -"DESPRESSURIZACAO", -"DESPRESSURIZADO", -"DESPRESSURIZAR", -"DESPRESTIGIO", -"DESPRETENSIOSO", -"DESPREVENIDO", -"DESPREZADO", -"DESPREZAR", -"DESPREZIVEL", -"DESPREZO", -"DESPROPORCAO", -"DESPROPORCIONADO", -"DESPROPORCIONAL", -"DESPROPOSITADO", -"DESPROPOSITO", -"DESPROTEGER", -"DESPROVER", -"DESPROVIDO", -"DESPUDORADO", -"DESQUALIFICACAO", -"DESQUALIFICADO", -"DESQUALIFICAR", -"DESQUITADO", -"DESQUITAR", -"DESQUITE", -"DESREGRADO", -"DESREGRAMENTO", -"DESREGRAR", -"DESREGULADO", -"DESREGULAR", -"DESREPEITAR", -"DESREPEITOSO", -"DESRESPEITAR", -"DESRESPEITO", -"DESRESPEITOSO", -"DESSA", -"DESSALINIZACAO", -"DESSALINIZAR", -"DESSE", -"DESSEMELHANCA", -"DESSENSIBILIZAR", -"DESSERVICO", -"DESSERVIR", -"DESTA", -"DESTACADO", -"DESTACAMENTO", -"DESTACAR", -"DESTAMPADO", -"DESTAMPAR", -"DESTAQUE", -"DESTE", -"DESTELHADO", -"DESTELHAMENTO", -"DESTELHAR", -"DESTEMIDO", -"DESTEMOR", -"DESTEMPERADO", -"DESTEMPERANCA", -"DESTEMPERAR", -"DESTERRADO", -"DESTERRAR", -"DESTERRO", -"DESTILACAO", -"DESTILADA", -"DESTILADO", -"DESTILAR", -"DESTILARIA", -"DESTINACAO", -"DESTINAR", -"DESTINATARIO", -"DESTINO", -"DESTITUICAO", -"DESTITUIR", -"DESTOANTE", -"DESTOAR", -"DESTRAMBELHADO", -"DESTRATAR", -"DESTRAVAR", -"DESTREZA", -"DESTRINCHAR", -"DESTRO", -"DESTROCOS", -"DESTRONAR", -"DESTRUICAO", -"DESTRUIDOR", -"DESTRUIR", -"DESTRUTIVEL", -"DESTRUTIVO", -"DESUMANDO", -"DESUMANO", -"DESUNIAO", -"DESUNIR", -"DESUSO", -"DESVAIRADO", -"DESVAIRAR", -"DESVALORIZACAO", -"DESVALORIZAR", -"DESVANTAGEM", -"DESVARIO", -"DESVELO", -"DESVENCILHAR", -"DESVENDAR", -"DESVENTURA", -"DESVENTURADO", -"DESVIADO", -"DESVIAR", -"DESVINCULAR", -"DESVIO", -"DESVIOS", -"DESVIRGINAR", -"DESVIRTUAR", -"DETALHAMENTO", -"DETALHAR", -"DETALHE", -"DETALHES", -"DETALHISTA", -"DETECCAO", -"DETECTAR", -"DETECTAVEL", -"DETECTOR", -"DETENCAO", -"DETENTE", -"DETENTO", -"DETENTOR", -"DETER", -"DETERGENTE", -"DETERIORACAO", -"DETERIORADO", -"DETERIORAR", -"DETERMINACAO", -"DETERMINADO", -"DETERMINANTE", -"DETERMINAR", -"DETERMINATIVO", -"DETERMINAVEL", -"DETERMINISMO", -"DETERMINISTA", -"DETESTAR", -"DETESTAVEL", -"DETETIVE", -"DETIDO", -"DETONACAO", -"DETONADOR", -"DETONAR", -"DETRAS", -"DETRATAR", -"DETRATOR", -"DETRIMENTO", -"DETRITO", -"DETURPACAO", -"DETURPAR", -"DEU", -"DEUM", -"DEUS", -"DEUSA", -"DEUTERIO", -"DEUTERONOMIO", -"DEVAGAR", -"DEVANEIO", -"DEVASSA", -"DEVASSIDAO", -"DEVASSO", -"DEVASTACAO", -"DEVASTADOR", -"DEVASTAR", -"DEVE", -"DEVEDOR", -"DEVER", -"DEVERAS", -"DEVERIA", -"DEVIDO", -"DEVO", -"DEVOCAO", -"DEVOLUCAO", -"DEVOLVER", -"DEVORA", -"DEVORAR", -"DEVOTADO", -"DEVOTAMENTO", -"DEVOTAR", -"DEVOTO", -"DEXTRINA", -"DEXTROSE", -"DEZ", -"DEZEMBRO", -"DEZENA", -"DEZENOVE", -"DEZESSEIS", -"DEZESSETE", -"DEZOITO", -"DI", -"DIA", -"DIABETES", -"DIABO", -"DIABOLICO", -"DIABOLO", -"DIABRETE", -"DIABRURA", -"DIACHO", -"DIACONO", -"DIACRITICO", -"DIACRONIA", -"DIACRONICO", -"DIADEMA", -"DIAFANO", -"DIAFRAGMA", -"DIAGNOSE", -"DIAGNOSTICAR", -"DIAGNOSTICO", -"DIAGONAL", -"DIAGRAMA", -"DIAGRAMACAO", -"DIAGRAMADOR", -"DIAGRAMAR", -"DIAL", -"DIALETAL", -"DIALETICA", -"DIALETICO", -"DIALETO", -"DIALISE", -"DIALOGADO", -"DIALOGAR", -"DIALOGO", -"DIAMANTARIO", -"DIAMANTE", -"DIAMANTIFERO", -"DIAMETRAL", -"DIAMETRALMENTE", -"DIAMETRO", -"DIANETICA", -"DIANTE", -"DIANTEIRA", -"DIANTEIRO", -"DIAPASAO", -"DIAPOSITIVO", -"DIARIA", -"DIARIO", -"DIARISTA", -"DIARREIA", -"DIAS", -"DIASPORA", -"DIASTOLE", -"DIASTOLICO", -"DIATRIBE", -"DICA", -"DICCAO", -"DICIONARIO", -"DICIONARIOS", -"DICIONARISTA", -"DICIONARIZACAO", -"DICIONARIZADO", -"DICIONARIZAR", -"DICOTILEDONEA", -"DICOTILEDONEO", -"DICOTOMIA", -"DICOTOMICO", -"DIDATA", -"DIDATICA", -"DIDATICO", -"DIEDRICO", -"DIEDRO", -"DIERESE", -"DIESEL", -"DIETA", -"DIETETICA", -"DIETETICO", -"DIETISTA", -"DIFAMACAO", -"DIFAMADOR", -"DIFAMANTE", -"DIFAMAR", -"DIFAMATORIO", -"DIFERENCA", -"DIFERENCAS", -"DIFERENCIACAO", -"DIFERENCIAL", -"DIFERENCIAR", -"DIFERENTE", -"DIFERIDO", -"DIFERIMENTO", -"DIFERIR", -"DIFICIL", -"DIFICILIMO", -"DIFICULDADE", -"DIFICULTAR", -"DIFICULTOSO", -"DIFRACAO", -"DIFRATAR", -"DIFTERIA", -"DIFTERICO", -"DIFUNDIR", -"DIFUSA", -"DIFUSAO", -"DIFUSO", -"DIGERIDO", -"DIGERIR", -"DIGERIVEL", -"DIGESTAO", -"DIGESTIVO", -"DIGITACAO", -"DIGITADO", -"DIGITADOR", -"DIGITAL", -"DIGITAR", -"DIGITO", -"DIGLADIAR", -"DIGNIDADE", -"DIGNIFICANTE", -"DIGNIFICAR", -"DIGNO", -"DIGO", -"DIGRAFO", -"DIGRESSAO", -"DILACERACAO", -"DILACERAMENTO", -"DILACERANTE", -"DILACERAR", -"DILAPIDACAO", -"DILAPIDADOR", -"DILAPIDAR", -"DILATACAO", -"DILATADO", -"DILATAR", -"DILEMA", -"DILETANTE", -"DILETANTISMO", -"DILETO", -"DILIGENCIA", -"DILIGENCIAR", -"DILIGENTE", -"DILUENTE", -"DILUICAO", -"DILUIR", -"DILUVIANO", -"DILUVIO", -"DIMENSAO", -"DIMENSIONAL", -"DIMENSIONALIDADE", -"DIMENSIONAMENTO", -"DIMENSIONAR", -"DIMINUENDO", -"DIMINUICAO", -"DIMINUIDO", -"DIMINUIR", -"DIMINUTIVO", -"DIMINUTO", -"DINA", -"DINAMARQUES", -"DINAMICA", -"DINAMICO", -"DINAMISMO", -"DINAMITAR", -"DINAMITE", -"DINAMIZACAO", -"DINAMIZADOR", -"DINAMIZAR", -"DINAMO", -"DINAMOMETRO", -"DINAR", -"DINASTIA", -"DINASTICO", -"DINHEIRAMA", -"DINHEIRAO", -"DINHEIRO", -"DINOSSAURO", -"DIOCESANO", -"DIOCESE", -"DIODO", -"DIONISIACO", -"DIOPTRIA", -"DIOXIDO", -"DIPLOMA", -"DIPLOMACAO", -"DIPLOMACIA", -"DIPLOMADO", -"DIPLOMANDO", -"DIPLOMAR", -"DIPLOMATA", -"DIPLOMATICA", -"DIPLOMATICO", -"DIQUE", -"DIRECAO", -"DIRECIONAL", -"DIRECIONAR", -"DIREITA", -"DIREITINHO", -"DIREITO", -"DIREITOS", -"DIREM", -"DIRETA", -"DIRETAMENTE", -"DIRETIVA", -"DIRETO", -"DIRETOR", -"DIRETORIA", -"DIRETORIO", -"DIRETRIZ", -"DIRIGENTE", -"DIRIGIDO", -"DIRIGIR", -"DIRIGIVEL", -"DIRIMIR", -"DIRIMIVEL", -"DISCAGEM", -"DISCAR", -"DISCENTE", -"DISCERNIMENTO", -"DISCERNIR", -"DISCERNIVEL", -"DISCIPLINA", -"DISCIPLINADO", -"DISCIPLINANTE", -"DISCIPLINAR", -"DISCIPULO", -"DISCO", -"DISCOBOLO", -"DISCOGRAFIA", -"DISCOGRAFICO", -"DISCORDANCIA", -"DISCORDANTE", -"DISCORDAR", -"DISCORDE", -"DISCORDIA", -"DISCORRER", -"DISCOTECA", -"DISCOTECARIO", -"DISCREPANCIA", -"DISCREPANTE", -"DISCREPAR", -"DISCRETAMENTE", -"DISCRETO", -"DISCRICAO", -"DISCRICIONARIO", -"DISCRIMINACAO", -"DISCRIMINADO", -"DISCRIMINANTE", -"DISCRIMINAR", -"DISCRIMINATORIO", -"DISCURSAR", -"DISCURSO", -"DISCUSSAO", -"DISCUTIDO", -"DISCUTIR", -"DISCUTIVEL", -"DISENTERIA", -"DISFARCADO", -"DISFARCAR", -"DISFARCAVEL", -"DISFARCE", -"DISFASIA", -"DISFORME", -"DISFUNCAO", -"DISJUNCAO", -"DISJUNTIVO", -"DISJUNTOR", -"DISLEXIA", -"DISLEXICO", -"DISPAR", -"DISPARADA", -"DISPARADO", -"DISPARAR", -"DISPARATADO", -"DISPARATAR", -"DISPARATE", -"DISPARIDADE", -"DISPENDIOSO", -"DISPENSA", -"DISPENSADO", -"DISPENSAR", -"DISPENSARIO", -"DISPENSAVEL", -"DISPEPSIA", -"DISPEPTICO", -"DISPERSAO", -"DISPERSAR", -"DISPERSO", -"DISPLAY", -"DISPLICENCIA", -"DISPLICENTE", -"DISPNEIA", -"DISPONIBILIDADE", -"DISPONIVEL", -"DISPOR", -"DISPOSICAO", -"DISPOSITIVO", -"DISPOSTO", -"DISPUTA", -"DISPUTADO", -"DISPUTAR", -"DISQUETE", -"DISRITMIA", -"DISSABOR", -"DISSECACAO", -"DISSECAR", -"DISSEMINACAO", -"DISSEMINADO", -"DISSEMINADOR", -"DISSEMINAR", -"DISSENSAO", -"DISSERTACAO", -"DISSERTAR", -"DISSIDENCIA", -"DISSIDENTE", -"DISSIDIO", -"DISSILABICO", -"DISSILABO", -"DISSIMILAR", -"DISSIMILITUDE", -"DISSIMULACAO", -"DISSIMULADO", -"DISSIMULAR", -"DISSIPA", -"DISSIPACAO", -"DISSIPADO", -"DISSIPAR", -"DISSO", -"DISSOCIACAO", -"DISSOCIAR", -"DISSOCIAVEL", -"DISSOLUCAO", -"DISSOLUTO", -"DISSOLUVEL", -"DISSOLVER", -"DISSONANCIA", -"DISSONANTE", -"DISSUADIR", -"DISSUASAO", -"DISTANCIA", -"DISTANCIADO", -"DISTANCIAMENTO", -"DISTANCIAR", -"DISTANTE", -"DISTAR", -"DISTENDER", -"DISTENDIDO", -"DISTENSAO", -"DISTICO", -"DISTINCAO", -"DISTINGUIR", -"DISTINGUIVEL", -"DISTINTIVO", -"DISTINTO", -"DISTO", -"DISTORCAO", -"DISTORCER", -"DISTORCIDO", -"DISTRACAO", -"DISTRAIDO", -"DISTRAIR", -"DISTRIBUICAO", -"DISTRIBUIDA", -"DISTRIBUIDO", -"DISTRIBUIDOR", -"DISTRIBUIDORA", -"DISTRIBUIR", -"DISTRIBUTIVIDADE", -"DISTRIBUTIVO", -"DISTRITAL", -"DISTRITO", -"DISTROFIA", -"DISTROFIADO", -"DISTURBIO", -"DITA", -"DITADO", -"DITADOR", -"DITADURA", -"DITAME", -"DITAR", -"DITATORIAL", -"DITO", -"DITONGACAO", -"DITONGAR", -"DITONGO", -"DITTO", -"DIURESE", -"DIURETICO", -"DIURNO", -"DIVA", -"DIVAGAR", -"DIVAGCAO", -"DIVALENTE", -"DIVERGENCIA", -"DIVERGENTE", -"DIVERGIR", -"DIVERSAO", -"DIVERSAS", -"DIVERSIDADE", -"DIVERSIFICACAO", -"DIVERSIFICADO", -"DIVERSIFICAR", -"DIVERSIONARIO", -"DIVERSO", -"DIVERSOES", -"DIVERSOS", -"DIVERTICULITE", -"DIVERTICULO", -"DIVERTIDO", -"DIVERTIMENTO", -"DIVERTIR", -"DIVIDA", -"DIVIDENDO", -"DIVIDIDO", -"DIVIDIR", -"DIVINDADE", -"DIVINIZACAO", -"DIVINIZADO", -"DIVINIZAR", -"DIVINO", -"DIVISA", -"DIVISAO", -"DIVISAR", -"DIVISAS", -"DIVISIBILIDADE", -"DIVISIONAL", -"DIVISIVEL", -"DIVISOES", -"DIVISOR", -"DIVISORIA", -"DIVORCIAR", -"DIVORCIO", -"DIVULGACAO", -"DIVULGADO", -"DIVULGAR", -"DIZER", -"DIZIMA", -"DIZIMACAO", -"DIZIMAR", -"DIZIMO", -"DIZIVEL", -"DO", -"DOACAO", -"DOADO", -"DOADOR", -"DOAR", -"DOBERMANN", -"DOBRA", -"DOBRADAS", -"DOBRADICA", -"DOBRADINHA", -"DOBRADO", -"DOBRAR", -"DOBRAVEL", -"DOBRO", -"DOCA", -"DOCE", -"DOCEIRA", -"DOCEIRO", -"DOCEMENTE", -"DOCENCIA", -"DOCENTE", -"DOCERIA", -"DOCES", -"DOCIL", -"DOCILIDADE", -"DOCUMENTACAO", -"DOCUMENTADO", -"DOCUMENTAR", -"DOCUMENTARIO", -"DOCUMENTARISTA", -"DOCUMENTO", -"DOCUMENTOS", -"DOCURA", -"DODECAEDRICO", -"DODECAEDRO", -"DODECAFONICO", -"DODO", -"DODOI", -"DOENCA", -"DOENCAS", -"DOENTE", -"DOENTES", -"DOENTIO", -"DOER", -"DOG", -"DOGE", -"DOGMA", -"DOGMATICO", -"DOGMATISMO", -"DOGUE", -"DOIDAO", -"DOIDEIRA", -"DOIDICE", -"DOIDIVANAS", -"DOIDO", -"DOIS", -"DOLAR", -"DOLARIZACAO", -"DOLARIZAR", -"DOLBY", -"DOLEIRO", -"DOLLY", -"DOLMEN", -"DOLO", -"DOLORIDO", -"DOLOROSA", -"DOLOROSAMENTE", -"DOLOROSO", -"DOLOSA", -"DOLOSO", -"DOM", -"DOMADO", -"DOMADOR", -"DOMAR", -"DOME", -"DOMESTICA", -"DOMESTICACAO", -"DOMESTICAR", -"DOMESTICAS", -"DOMESTICAVEL", -"DOMESTICO", -"DOMICILIAR", -"DOMINACAO", -"DOMINADOR", -"DOMINANTE", -"DOMINAR", -"DOMINGO", -"DOMINGUEIRO", -"DOMINICAL", -"DOMINICANO", -"DOMINIO", -"DOMINO", -"DOMO", -"DONA", -"DONATARIO", -"DONATIVO", -"DONDE", -"DONDOCA", -"DONINHA", -"DONO", -"DONZELA", -"DOPADO", -"DOPAMINA", -"DOPAR", -"DOPING", -"DOR", -"DORAVANTE", -"DORIDO", -"DORMENTE", -"DORMIDA", -"DORMIDO", -"DORMINHOCO", -"DORMIR", -"DORMITORIO", -"DORSAL", -"DOS", -"DOSAGEM", -"DOSAR", -"DOSE", -"DOSSIE", -"DOTACAO", -"DOTADO", -"DOTAR", -"DOTE", -"DOURADO", -"DOURAMENTO", -"DOURAR", -"DOUTO", -"DOUTOR", -"DOUTORADO", -"DOUTORAL", -"DOUTORAMENTO", -"DOUTORANDO", -"DOUTORAR", -"DOUTRINA", -"DOUTRINACAO", -"DOUTRINADO", -"DOUTRINAL", -"DOUTRINAMENTO", -"DOUTRINAR", -"DOUTRINARIO", -"DOUTRINAVEL", -"DOUTRO", -"DOWNLOAD", -"DOZE", -"DR", -"DRACAR", -"DRACMA", -"DRACONIANO", -"DRAGA", -"DRAGAGEM", -"DRAGAO", -"DRAGAR", -"DRAGEA", -"DRAMA", -"DRAMALHAO", -"DRAMATICA", -"DRAMATICIDADE", -"DRAMATICO", -"DRAMATIZACAO", -"DRAMATIZADO", -"DRAMATIZAR", -"DRAMATURGIA", -"DRAMATURGICO", -"DRAMATURGO", -"DRAPEADO", -"DRAPEAR", -"DRASTICO", -"DRAVIDICO", -"DRENAGEM", -"DRENAR", -"DRENO", -"DRIADA", -"DRIADE", -"DRIBLAR", -"DRIBLE", -"DRINQUE", -"DRIVE", -"DRIVER", -"DROGA", -"DROGADO", -"DROGAR", -"DROGARIA", -"DROMEDARIO", -"DROPES", -"DRUIDA", -"DRUSO", -"DU", -"DUAL", -"DUALIDADE", -"DUALISMO", -"DUALISTA", -"DUALISTICO", -"DUAS", -"DUBIO", -"DUBLADO", -"DUBLADOR", -"DUBLAGEM", -"DUBLAR", -"DUBLE", -"DUBNIO", -"DUCADO", -"DUCAL", -"DUCENTESIMO", -"DUCHA", -"DUCTIL", -"DUCTO", -"DUELAR", -"DUELISTA", -"DUELO", -"DUENDE", -"DUETISTA", -"DUETO", -"DULCADA", -"DULCISSIMO", -"DULIJA", -"DUM", -"DUMA", -"DUMPING", -"DUNA", -"DUNDUM", -"DUO", -"DUODECIMAL", -"DUODECIMO", -"DUODENAL", -"DUODENO", -"DUPLA", -"DUPLEX", -"DUPLICACAO", -"DUPLICADO", -"DUPLICAR", -"DUPLICATA", -"DUPLO", -"DUQUE", -"DUQUESA", -"DURA", -"DURABILIDADE", -"DURACAO", -"DURADOURO", -"DURANTE", -"DURAO", -"DURAR", -"DURAVEL", -"DUREZA", -"DURO", -"DUROU", -"DUVIDA", -"DUVIDAR", -"DUVIDOSO", -"DUZENTOS", -"DUZIA", -"E", -"EB", -"EBANO", -"EBCDIC", -"EBRIEDADE", -"EBRIO", -"EBULICAO", -"EBURNEO", -"EC", -"ECA", -"ECG", -"ECHARPE", -"ECLER", -"ECLESIASTICO", -"ECLETICO", -"ECLETISMO", -"ECLIPSADO", -"ECLIPSAR", -"ECLIPSE", -"ECLIPTICA", -"ECLIPTICO", -"ECLODIR", -"ECLOSAO", -"ECLUSA", -"ECO", -"ECOAR", -"ECOCARDIOGRAFIA", -"ECOCARDIOGRAFICO", -"ECOCARDIOGRAMA", -"ECOGRAFIA", -"ECOLOGIA", -"ECOLOGICO", -"ECOLOGISTA", -"ECONOMES", -"ECONOMETRIA", -"ECONOMIA", -"ECONOMIAS", -"ECONOMICA", -"ECONOMICAMENTE", -"ECONOMICAS", -"ECONOMICO", -"ECONOMICOS", -"ECONOMISTA", -"ECONOMIZAR", -"ECOSSISTEMA", -"ECTOPLASMA", -"ECUMENICO", -"ECUMENISMO", -"ECZEMA", -"ED", -"EDEMA", -"EDEN", -"EDICAO", -"EDIFICACAO", -"EDIFICANTE", -"EDIFICAR", -"EDIFICATIVO", -"EDIFICIO", -"EDIL", -"EDIPIANO", -"EDIPO", -"EDITADO", -"EDITAL", -"EDITAR", -"EDITO", -"EDITOR", -"EDITORA", -"EDITORACAO", -"EDITORIA", -"EDITORIAL", -"EDREDOM", -"EDUCACAO", -"EDUCACIONAL", -"EDUCADO", -"EDUCADOR", -"EDUCANDARIO", -"EDUCANDO", -"EDUCAR", -"EDUCATIVO", -"EDULCORANTE", -"EDULCORAR", -"EF", -"EFE", -"EFEDRINA", -"EFEITO", -"EFEITOS", -"EFEMERIDADE", -"EFEMERIDE", -"EFEMERIDES", -"EFEMERO", -"EFEMINACAO", -"EFEMINADO", -"EFEMINAR", -"EFENDI", -"EFERVESCENCIA", -"EFERVESCENTE", -"EFERVESCER", -"EFETIVACAO", -"EFETIVAR", -"EFETIVIDADE", -"EFETIVO", -"EFETUAR", -"EFICACIA", -"EFICAZ", -"EFICIENCIA", -"EFICIENTE", -"EFIGIE", -"EFLORESCENCIA", -"EFLORESCENTE", -"EFLORESCER", -"EFLUVIO", -"EFUSAO", -"EFUSIVO", -"EG", -"EGIDE", -"EGIPCIO", -"EGIPTOLOGIA", -"EGIPTOLOGICO", -"EGIPTOLOGO", -"EGO", -"EGOCENTRICO", -"EGOCENTRISMO", -"EGOCENTRISTA", -"EGOISMO", -"EGOISTA", -"EGREGIO", -"EGRESSO", -"EGUA", -"EI", -"EIA", -"EINCIDENTE", -"EINSTEINIANO", -"EIRA", -"EIS", -"EIVAR", -"EIXO", -"EIXOS", -"EJ", -"EJACULACAO", -"EJACULAR", -"EJECAO", -"EJETADO", -"EJETAR", -"EL", -"ELA", -"ELABORACAO", -"ELABORADO", -"ELABORAR", -"ELAS", -"ELASTICA", -"ELASTICIDADE", -"ELASTICO", -"ELASTINA", -"ELASTOMERO", -"ELDORADO", -"ELE", -"ELECTROCHOQUE", -"ELEFANTE", -"ELEFANTIASE", -"ELEGANCIA", -"ELEGANTE", -"ELEGER", -"ELEGIA", -"ELEGIACO", -"ELEGIBILIDADE", -"ELEGIVEL", -"ELEICAO", -"ELEICOES", -"ELEITO", -"ELEITOR", -"ELEITORADO", -"ELEITORAL", -"ELEITOREIRO", -"ELEMENTAR", -"ELEMENTO", -"ELEMENTOS", -"ELENCO", -"ELEPE", -"ELETIVO", -"ELETRENCEFALOGRAFIA", -"ELETRENCEFALOGRAFICO", -"ELETRENCEFALOGRAFO", -"ELETRENCEFALOGRAMA", -"ELETRICA", -"ELETRICIDADE", -"ELETRICISTA", -"ELETRICO", -"ELETRIFICACAO", -"ELETRIFICADO", -"ELETRIFICAR", -"ELETRIZADO", -"ELETRIZANTE", -"ELETRIZAR", -"ELETROCARDIOGRAMA", -"ELETROCUCAO", -"ELETROCUTAR", -"ELETRODO", -"ELETRODOMESTICO", -"ELETROENCEFALOGRAMA", -"ELETROLA", -"ELETROLISE", -"ELETROMAGNETISMO", -"ELETRON", -"ELETRONICA", -"ELETRONICO", -"ELETROSTATICA", -"ELETROSTATICO", -"ELETROTECNICA", -"ELETROTECNICO", -"ELEVACAO", -"ELEVADO", -"ELEVADOR", -"ELEVAR", -"ELICITAR", -"ELIMINACAO", -"ELIMINADO", -"ELIMINAR", -"ELIMINATORIA", -"ELIMINATORIO", -"ELIMINEI", -"ELIPSE", -"ELIPTICO", -"ELISAO", -"ELITE", -"ELITISMO", -"ELITISTA", -"ELIXIR", -"ELMO", -"ELO", -"ELOCUCAO", -"ELOGIAR", -"ELOGIO", -"ELOQUENCIA", -"ELOQUENTE", -"ELUCIDAR", -"ELUCIDATIVO", -"EM", -"EMA", -"EMAGRECER", -"EMAGRECIDO", -"EMAGRECIMENTO", -"EMANACAO", -"EMANAR", -"EMANCIPACAO", -"EMANCIPADO", -"EMANCIPAR", -"EMARANHADO", -"EMARANHAMENTO", -"EMARANHAR", -"EMBACADO", -"EMBACAR", -"EMBAINHAR", -"EMBAIXADA", -"EMBAIXADOR", -"EMBAIXADORA", -"EMBAIXATRIZ", -"EMBAIXO", -"EMBALADO", -"EMBALADOR", -"EMBALAGEM", -"EMBALAR", -"EMBALO", -"EMBALSAMADO", -"EMBALSAMADOR", -"EMBALSAMAR", -"EMBANANADO", -"EMBANANAMENTO", -"EMBANANAR", -"EMBARACADOR", -"EMBARACAR", -"EMBARACO", -"EMBARACOSO", -"EMBARALHAR", -"EMBARCACAO", -"EMBARCADO", -"EMBARCADOURO", -"EMBARCAR", -"EMBARGADO", -"EMBARGADOR", -"EMBARGAR", -"EMBARGO", -"EMBARQUE", -"EMBASAMENTO", -"EMBASAR", -"EMBASBACAR", -"EMBATE", -"EMBEBEDAR", -"EMBEBER", -"EMBELEZAMENTO", -"EMBELEZAR", -"EMBEVECER", -"EMBEVECIDO", -"EMBEVECIMENTO", -"EMBIRRACAO", -"EMBIRRAR", -"EMBIRUTAR", -"EMBLEMA", -"EMBLEMATICO", -"EMBOABA", -"EMBOLADO", -"EMBOLAR", -"EMBOLIA", -"EMBOLO", -"EMBOLORAR", -"EMBOLSAR", -"EMBONECADO", -"EMBONECAR", -"EMBORA", -"EMBORCAR", -"EMBORNAL", -"EMBORRACHADO", -"EMBORRACHAR", -"EMBOSCADA", -"EMBOSCAR", -"EMBOTADO", -"EMBOTAMENTO", -"EMBOTAR", -"EMBRANQUECER", -"EMBRATUR", -"EMBRAVECER", -"EMBRAVECIMENTO", -"EMBREAGEM", -"EMBREAR", -"EMBRENHAR", -"EMBRIAGADO", -"EMBRIAGAMENTO", -"EMBRIAGANTE", -"EMBRIAGAR", -"EMBRIAGUEZ", -"EMBRIAO", -"EMBRIOLOGIA", -"EMBRIONARIO", -"EMBROMACAO", -"EMBROMADOR", -"EMBROMAR", -"EMBRULHADA", -"EMBRULHADO", -"EMBRULHAR", -"EMBRULHO", -"EMBRUTECER", -"EMBRUTECIMENTO", -"EMBURRADO", -"EMBURRAR", -"EMBUSTE", -"EMBUSTEIRO", -"EMBUTIDO", -"EMBUTIR", -"EME", -"EMEDEBISMO", -"EMEDEBISTA", -"EMENDA", -"EMENDAR", -"EMERGENCIA", -"EMERGENCIAL", -"EMERGENTE", -"EMERGIR", -"EMERITO", -"EMFA", -"EMIGRACAO", -"EMIGRADO", -"EMIGRANTE", -"EMIGRAR", -"EMINENCIA", -"EMINENTE", -"EMINENTISSIMO", -"EMIR", -"EMIRADO", -"EMISSAO", -"EMISSARIO", -"EMISSOR", -"EMISSORA", -"EMITIR", -"EMOCAO", -"EMOCIONADO", -"EMOCIONAL", -"EMOCIONALISMO", -"EMOCIONALISTA", -"EMOCIONANTE", -"EMOCIONAR", -"EMOCOES", -"EMOLDURADO", -"EMOLDURAR", -"EMOLUMENTO", -"EMOTIVA", -"EMOTIVIDADE", -"EMOTIVO", -"EMPACAR", -"EMPACOTADEIRA", -"EMPACOTADOR", -"EMPACOTADORA", -"EMPACOTAMENTO", -"EMPACOTAR", -"EMPADA", -"EMPADAO", -"EMPADINHA", -"EMPAFIA", -"EMPALACAO", -"EMPALAR", -"EMPALHADOR", -"EMPALHAMENTO", -"EMPALHAR", -"EMPALIDECER", -"EMPANADA", -"EMPANADO", -"EMPANAR", -"EMPANTURRADO", -"EMPANTURRAR", -"EMPAPAR", -"EMPARCEIRAR", -"EMPAREDADO", -"EMPAREDAR", -"EMPARELHADO", -"EMPARELHAMENTO", -"EMPARELHAR", -"EMPATAR", -"EMPATE", -"EMPATIA", -"EMPATICO", -"EMPECILHO", -"EMPEDERNIDO", -"EMPEDERNIR", -"EMPEDRADO", -"EMPEDRAR", -"EMPENADO", -"EMPENAR", -"EMPENHAR", -"EMPENHO", -"EMPERAR", -"EMPERIQUITADO", -"EMPERRAMENTO", -"EMPERRAR", -"EMPERTIGADO", -"EMPERTIGAR", -"EMPESTADO", -"EMPESTAR", -"EMPESTEAR", -"EMPETECAR", -"EMPILHADEIRA", -"EMPILHAMENTO", -"EMPILHAR", -"EMPINADO", -"EMPINAR", -"EMPIRICO", -"EMPIRISMO", -"EMPLACAMENTO", -"EMPLACAR", -"EMPLASTRO", -"EMPLUMADO", -"EMPLUMAR", -"EMPOBRECER", -"EMPOBRECIDO", -"EMPOBRECIMENTO", -"EMPOEIRAR", -"EMPOLADO", -"EMPOLAR", -"EMPOLGACAO", -"EMPOLGANTE", -"EMPOLGAR", -"EMPORCALHADO", -"EMPORCALHAMENTO", -"EMPORCALHAR", -"EMPORIO", -"EMPOSSADO", -"EMPOSSAR", -"EMPREENDEDOR", -"EMPREENDER", -"EMPREGADA", -"EMPREGADO", -"EMPREGADOR", -"EMPREGAR", -"EMPREGATICIO", -"EMPREGO", -"EMPREGUISMO", -"EMPREITADA", -"EMPREITEIRA", -"EMPREITEIRO", -"EMPRESA", -"EMPRESARIADO", -"EMPRESARIAL", -"EMPRESARIO", -"EMPRESAS", -"EMPRESTAR", -"EMPRESTIMO", -"EMPUNHAR", -"EMPURRAO", -"EMPURRAR", -"EMPUTECER", -"EMPUTECIDO", -"EMPUXO", -"EMUDECER", -"EMUDECIDO", -"EMULACAO", -"EMULADOR", -"EMULAR", -"EMULSAO", -"EN", -"ENALTECER", -"ENALTECIMENTO", -"ENAMORAR", -"ENCABECAR", -"ENCABULACAO", -"ENCABULADO", -"ENCABULAR", -"ENCACAPAR", -"ENCADEACAO", -"ENCADEADA", -"ENCADEADO", -"ENCADEAMENTO", -"ENCADEAR", -"ENCADERNACAO", -"ENCADERNADO", -"ENCADERNADOR", -"ENCADERNAR", -"ENCAFIFAR", -"ENCAIXAMENTO", -"ENCAIXAR", -"ENCAIXE", -"ENCAIXOTADO", -"ENCAIXOTAR", -"ENCALACRADO", -"ENCALACRAR", -"ENCALCO", -"ENCALHADO", -"ENCALHAMENTO", -"ENCALHAR", -"ENCALHE", -"ENCAMINHAMENTO", -"ENCAMINHAR", -"ENCAMPAR", -"ENCANADA", -"ENCANADO", -"ENCANADOR", -"ENCANAMENTO", -"ENCANAR", -"ENCANECER", -"ENCANTACAO", -"ENCANTADO", -"ENCANTADOR", -"ENCANTAMENTO", -"ENCANTAR", -"ENCANTO", -"ENCANTOS", -"ENCAPADO", -"ENCAPAR", -"ENCAPELADO", -"ENCAPELAR", -"ENCAPETADO", -"ENCAPOTADO", -"ENCAPOTAR", -"ENCAPSULACAO", -"ENCAPSULADO", -"ENCAPSULAR", -"ENCAPUZAR", -"ENCARACOLADO", -"ENCARACOLAR", -"ENCARAPITAR", -"ENCARAR", -"ENCARCERADO", -"ENCARCERAMENTO", -"ENCARCERAR", -"ENCARDIDO", -"ENCARDIR", -"ENCARECER", -"ENCARGO", -"ENCARGOS", -"ENCARNACAO", -"ENCARNADO", -"ENCARNAR", -"ENCAROCADO", -"ENCAROCAR", -"ENCARQUILHADO", -"ENCARQUILHAR", -"ENCARREGADO", -"ENCARREGAR", -"ENCARTAR", -"ENCARTE", -"ENCASQUETADO", -"ENCASQUETAR", -"ENCASTRAR", -"ENCAVALAR", -"ENCEFALICO", -"ENCEFALITE", -"ENCEFALO", -"ENCENACAO", -"ENCENAR", -"ENCERADEIRA", -"ENCERADO", -"ENCERAR", -"ENCERRADA", -"ENCERRADO", -"ENCERRAMENTO", -"ENCERRAR", -"ENCERREI", -"ENCESTAR", -"ENCETAR", -"ENCHARCAR", -"ENCHECAO", -"ENCHENTE", -"ENCHER", -"ENCHIMENTO", -"ENCHOVA", -"ENCICLICA", -"ENCICLOPEDIA", -"ENCICLOPEDICO", -"ENCICLOPEDISTA", -"ENCICLOPEDISTAS", -"ENCILHAR", -"ENCIMADO", -"ENCIMAR", -"ENCIUMAR", -"ENCLAUSURADO", -"ENCLAUSURAR", -"ENCLAVE", -"ENCLISE", -"ENCLITICO", -"ENCOBERTO", -"ENCOBRIR", -"ENCOLERIZAR", -"ENCOLHER", -"ENCOLHIDO", -"ENCOLHIMENTO", -"ENCOMENDA", -"ENCOMENDADO", -"ENCOMENDAR", -"ENCOMENDOU", -"ENCOMPRIDAR", -"ENCONTRAO", -"ENCONTRAR", -"ENCONTRE", -"ENCONTRO", -"ENCORAJAMENTO", -"ENCORAJAR", -"ENCORPADO", -"ENCORPAR", -"ENCOSTA", -"ENCOSTADO", -"ENCOSTAR", -"ENCOSTO", -"ENCOURACADO", -"ENCRAVADO", -"ENCRAVAR", -"ENCRENCA", -"ENCRENCAR", -"ENCRENQUEIRO", -"ENCRESPADO", -"ENCRESPAR", -"ENCROSTAR", -"ENCRUZILHADA", -"ENCUCACAO", -"ENCUCADO", -"ENCUCAR", -"ENCURRALAR", -"ENCURTAMENTO", -"ENCURTAR", -"ENCURVAR", -"ENDEMIA", -"ENDEMICO", -"ENDEMONINHADO", -"ENDEMONINHAR", -"ENDERECAMENTO", -"ENDERECAR", -"ENDERECO", -"ENDEUSAR", -"ENDIABRADO", -"ENDINHEIRADO", -"ENDINHEIRAR", -"ENDIREITADO", -"ENDIREITAR", -"ENDIVIDADO", -"ENDIVIDAMENTO", -"ENDIVIDAR", -"ENDOCARDIO", -"ENDOCRINO", -"ENDOCRINOLOGIA", -"ENDOCRINOLOGISTA", -"ENDOIDAR", -"ENDOSCOPIA", -"ENDOSSAR", -"ENDURECER", -"ENDURECIMENTO", -"ENDURO", -"ENE", -"ENEAGONAL", -"ENEAGONO", -"ENEGRECER", -"ENEGRECIDO", -"ENEGRECIMENTO", -"ENEMA", -"ENERGETICO", -"ENERGIA", -"ENERGICO", -"ENERGIZAR", -"ENERVANTE", -"ENERVAR", -"ENESIMO", -"ENEVOADO", -"ENEVOAR", -"ENFADAR", -"ENFADO", -"ENFADONHO", -"ENFAIXAR", -"ENFARAR", -"ENFARINHAR", -"ENFASE", -"ENFASTIANTE", -"ENFASTIAR", -"ENFATICO", -"ENFATIZAR", -"ENFEITADO", -"ENFEITAR", -"ENFEITE", -"ENFEITICADO", -"ENFEITICAMENTO", -"ENFEITICAR", -"ENFEIXAR", -"ENFERMAGEM", -"ENFERMARIA", -"ENFERMEIRA", -"ENFERMEIRO", -"ENFERMIDADE", -"ENFERMO", -"ENFERRUJAMENTO", -"ENFERRUJAR", -"ENFEZADO", -"ENFEZAMENTO", -"ENFEZAR", -"ENFIAR", -"ENFILEIRADO", -"ENFILEIRAMENTO", -"ENFILEIRAR", -"ENFIM", -"ENFISEMA", -"ENFOCAR", -"ENFOQUE", -"ENFORCADO", -"ENFORCAMENTO", -"ENFORCAR", -"ENFRAQUECER", -"ENFRAQUECIDO", -"ENFRAQUECIMENTO", -"ENFRENTAMENTO", -"ENFRENTAR", -"ENFUMACADO", -"ENFUMACAR", -"ENFURECER", -"ENFURECIDO", -"ENFURNAR", -"ENGAIOLAR", -"ENGAJADO", -"ENGAJAMENTO", -"ENGAJAR", -"ENGALFINHAR", -"ENGAMBELACAO", -"ENGAMBELAR", -"ENGANADO", -"ENGANAR", -"ENGANCHAR", -"ENGANO", -"ENGANOSA", -"ENGANOSO", -"ENGARRAFADEIRA", -"ENGARRAFADO", -"ENGARRAFAMENTO", -"ENGARRAFAR", -"ENGASGADO", -"ENGASGAR", -"ENGASGO", -"ENGASTAR", -"ENGASTE", -"ENGATAR", -"ENGATE", -"ENGATILHAR", -"ENGATINHAR", -"ENGAVETAMENTO", -"ENGAVETAR", -"ENGENDRAR", -"ENGENHARIA", -"ENGENHEIRO", -"ENGENHO", -"ENGENHOCA", -"ENGENHOSIDADE", -"ENGENHOSO", -"ENGESSADO", -"ENGESSAR", -"ENGLOBAR", -"ENGODO", -"ENGOLIR", -"ENGOMAR", -"ENGORDA", -"ENGORDAR", -"ENGORDURADO", -"ENGORDURAR", -"ENGRACADO", -"ENGRACAR", -"ENGRADADO", -"ENGRADAR", -"ENGRANDECER", -"ENGRANDECIMENTO", -"ENGRAVIDAR", -"ENGRAXAR", -"ENGRAXATE", -"ENGRENAGEM", -"ENGRENAR", -"ENGROSSAR", -"ENGUIA", -"ENGUICAR", -"ENGUICO", -"ENHO", -"ENIGMA", -"ENIGMATICO", -"ENIGMISTA", -"ENJAMBRAR", -"ENJAULAR", -"ENJEITAR", -"ENJOADO", -"ENJOAR", -"ENJOATIVO", -"ENJOO", -"ENLACADO", -"ENLACAR", -"ENLACE", -"ENLAMEADO", -"ENLAMEAR", -"ENLATADO", -"ENLATAR", -"ENLEVAR", -"ENLEVO", -"ENLOUQUECER", -"ENLOUQUECIMENTO", -"ENLUARADO", -"ENLUARAR", -"ENLUTADO", -"ENLUTAR", -"ENOBRECER", -"ENOBRECIMENTO", -"ENOFILO", -"ENOJADO", -"ENOJAR", -"ENOL", -"ENOLOGIA", -"ENOLOGO", -"ENORME", -"ENORMIDADE", -"ENPREENDIMENTO", -"ENQUADRAMENTO", -"ENQUADRAR", -"ENQUANTO", -"ENRABAR", -"ENRABICHADO", -"ENRABICHAR", -"ENRAIVECER", -"ENRAIZAR", -"ENRASCADA", -"ENRASCAR", -"ENREDAR", -"ENREDO", -"ENRIJECER", -"ENRIJECIMENTO", -"ENRIQUECER", -"ENRIQUECIMENTO", -"ENRODILHAR", -"ENROLADO", -"ENROLADOR", -"ENROLAMENTO", -"ENROLAO", -"ENROLAR", -"ENROSCAR", -"ENRUBESCER", -"ENRUBESCIMENTO", -"ENRUGADO", -"ENRUGAMENTO", -"ENRUGAR", -"ENSABOADO", -"ENSABOAR", -"ENSACAR", -"ENSAIAR", -"ENSAIO", -"ENSAISTA", -"ENSANDECER", -"ENSANGUENTAR", -"ENSEADA", -"ENSEBAR", -"ENSEJO", -"ENSIMESMADO", -"ENSIMESMAMENTO", -"ENSINAMENTO", -"ENSINAR", -"ENSINO", -"ENSOPADO", -"ENSOPAR", -"ENSURDECEDOR", -"ENSURDECER", -"ENTALAR", -"ENTALHADOR", -"ENTALHAR", -"ENTALHE", -"ENTANTO", -"ENTAO", -"ENTARDECER", -"ENTE", -"ENTEADO", -"ENTEDIAR", -"ENTENDER", -"ENTENDIDO", -"ENTENDIMENTO", -"ENTERNECER", -"ENTERNECIMENTO", -"ENTERRADA", -"ENTERRAR", -"ENTERRO", -"ENTESAR", -"ENTIDADE", -"ENTOAR", -"ENTOJO", -"ENTOMOLOGIA", -"ENTOMOLOGO", -"ENTONACAO", -"ENTONAR", -"ENTORNAR", -"ENTORPECENTE", -"ENTORPECER", -"ENTORPECIDO", -"ENTORPECIMENTO", -"ENTORSE", -"ENTORTAR", -"ENTOURAGE", -"ENTRADA", -"ENTRADO", -"ENTRANHA", -"ENTRAR", -"ENTRAVADO", -"ENTRAVAR", -"ENTRAVE", -"ENTRE", -"ENTREABERTO", -"ENTREABRIR", -"ENTREATO", -"ENTRECORTADO", -"ENTRECORTAR", -"ENTREGA", -"ENTREGADOR", -"ENTREGAR", -"ENTREGUISMO", -"ENTREGUISTA", -"ENTRELACADO", -"ENTRELACAMENTO", -"ENTRELACAR", -"ENTRELINHA", -"ENTREMEAR", -"ENTREMEIO", -"ENTREMENTES", -"ENTREPOR", -"ENTREPOSTO", -"ENTRETANTO", -"ENTRETENIMENTO", -"ENTRETER", -"ENTREVER", -"ENTREVERO", -"ENTREVISTA", -"ENTREVISTADOR", -"ENTREVISTAR", -"ENTRINCHEIRAR", -"ENTRISTECER", -"ENTRISTECIMENTO", -"ENTRONCAMENTO", -"ENTRONCAR", -"ENTRONIZACAO", -"ENTRONIZAR", -"ENTROPIA", -"ENTROPICO", -"ENTROSADO", -"ENTROSAMENTO", -"ENTROSAR", -"ENTRUDO", -"ENTULHAR", -"ENTULHO", -"ENTUPIDO", -"ENTUPIMENTO", -"ENTUPIR", -"ENTURMAR", -"ENTURVAR", -"ENTUSIASMANTE", -"ENTUSIASMAR", -"ENTUSIASMO", -"ENTUSIASTA", -"ENTUSIASTICO", -"ENUMERACAO", -"ENUMERAR", -"ENUMERAVEL", -"ENUNCIADO", -"ENUNCIAR", -"ENVAIDECER", -"ENVAIDECIMENTO", -"ENVASAR", -"ENVELHECER", -"ENVELHECIDO", -"ENVELHECIMENTO", -"ENVELOPE", -"ENVENENAMENTO", -"ENVENENAR", -"ENVEREDAR", -"ENVERGADURA", -"ENVERGAR", -"ENVERGONHADO", -"ENVERGONHAR", -"ENVERNIZADO", -"ENVERNIZAR", -"ENVIADAS", -"ENVIADO", -"ENVIADOS", -"ENVIAR", -"ENVIDRACADO", -"ENVIDRACAMENTO", -"ENVIDRACAR", -"ENVIESADO", -"ENVIESAR", -"ENVIO", -"ENVOLTO", -"ENVOLTORIO", -"ENVOLVENTE", -"ENVOLVER", -"ENVOLVIDO", -"ENVOLVIMENTO", -"ENXABIDO", -"ENXADA", -"ENXADRISMO", -"ENXADRISTA", -"ENXADRISTICO", -"ENXAGUAR", -"ENXAME", -"ENXAQUECA", -"ENXERGAR", -"ENXERIDO", -"ENXERTAR", -"ENXERTO", -"ENXOFRE", -"ENXOTAR", -"ENXOVAL", -"ENXOVALHAR", -"ENXUGAR", -"ENXURRADA", -"ENXUTO", -"ENZIMA", -"ENZIMATICO", -"EO", -"EOLICO", -"EP", -"EPICA", -"EPICENO", -"EPICENTRO", -"EPICO", -"EPICURISMO", -"EPICURISTA", -"EPIDEMIA", -"EPIDEMICO", -"EPIDEMIOLOGIA", -"EPIDEMIOLOGICO", -"EPIDEMIOLOGISTA", -"EPIDERME", -"EPIDERMICO", -"EPIFANIA", -"EPIGLOTE", -"EPIGRAFE", -"EPILEPSIA", -"EPILEPTICA", -"EPILEPTICO", -"EPILOGO", -"EPISCOPADO", -"EPISCOPAL", -"EPISODICO", -"EPISODIO", -"EPISTEMOLOGIA", -"EPISTEMOLOGICO", -"EPISTOLA", -"EPISTOLAR", -"EPITAFIO", -"EPITELIAL", -"EPITELIO", -"EPITETO", -"EPOCA", -"EPOPEIA", -"EPOPEICO", -"EPOXI", -"EPSILON", -"EPSOM", -"EPURA", -"EQ", -"EQUACAO", -"EQUACIONAR", -"EQUACOES", -"EQUADOR", -"EQUANIME", -"EQUANIMIDADE", -"EQUATORIAL", -"EQUATORIANO", -"EQUESTRE", -"EQUIDADE", -"EQUIDEO", -"EQUIDISTANCIA", -"EQUIDISTANTE", -"EQUIDISTAR", -"EQUILATERO", -"EQUILIBRADO", -"EQUILIBRAR", -"EQUILIBRIO", -"EQUILIBRISMO", -"EQUILIBRISTA", -"EQUIMOSE", -"EQUINO", -"EQUINOCIO", -"EQUINOCIOS", -"EQUIPAGEM", -"EQUIPAMENTO", -"EQUIPAMENTOS", -"EQUIPAR", -"EQUIPARACAO", -"EQUIPARAR", -"EQUIPE", -"EQUITACAO", -"EQUITATIVO", -"EQUIVALENCIA", -"EQUIVALENTE", -"EQUIVALER", -"EQUIVOCAR", -"EQUIVOCO", -"ER", -"ERA", -"ERAM", -"ERARIO", -"ERBIO", -"ERECAO", -"ERECTUS", -"EREMITA", -"ERETO", -"ERG", -"ERGATIVA", -"ERGO", -"ERGOMETRICO", -"ERGONOMIA", -"ERGONOMICO", -"ERGUER", -"ERGUIDO", -"ERICADO", -"ERICAR", -"ERIGIR", -"ERISIPELA", -"ERLENMEYER", -"ERMO", -"ERODIDO", -"ERODIR", -"EROGENO", -"EROS", -"EROSAO", -"EROTICO", -"EROTISMO", -"EROTIZADO", -"EROTIZAR", -"ERRADICACAO", -"ERRADICAR", -"ERRADO", -"ERRANTE", -"ERRAR", -"ERRATA", -"ERRATICO", -"ERRE", -"ERRO", -"ERRONEA", -"ERRONEO", -"ERROS", -"ERSATZ", -"ERUDICAO", -"ERUDITO", -"ERUPCAO", -"ERVA", -"ERVILHA", -"ES", -"ESBAFORIDO", -"ESBANJADOR", -"ESBANJAMENTO", -"ESBANJAR", -"ESBARRAO", -"ESBARRAR", -"ESBARRO", -"ESBELTEZA", -"ESBELTO", -"ESBOCADO", -"ESBOCAR", -"ESBOCO", -"ESBOFETEAR", -"ESBORRACHAR", -"ESBRAVEJAR", -"ESBUGALHADO", -"ESBUGALHAR", -"ESBURACADO", -"ESBURACAR", -"ESCABECHE", -"ESCABROSO", -"ESCADA", -"ESCADARIA", -"ESCAFANDRISTA", -"ESCAFANDRO", -"ESCALA", -"ESCALACAO", -"ESCALADA", -"ESCALADOR", -"ESCALAFOBETICO", -"ESCALAO", -"ESCALAR", -"ESCALDADO", -"ESCALDANTE", -"ESCALDAR", -"ESCALENO", -"ESCALER", -"ESCALONADO", -"ESCALONAMENTO", -"ESCALONAR", -"ESCALOPE", -"ESCALPELAR", -"ESCALPO", -"ESCAMA", -"ESCAMACAO", -"ESCAMAR", -"ESCAMOSO", -"ESCAMOTEAR", -"ESCANCARADO", -"ESCANCARAR", -"ESCANDALIZAR", -"ESCANDALO", -"ESCANDALOSO", -"ESCANDINAVO", -"ESCANDIO", -"ESCANDIR", -"ESCANGALHADO", -"ESCANGALHAR", -"ESCANGALHO", -"ESCANHOAMENTO", -"ESCANHOAR", -"ESCANINHO", -"ESCANSAO", -"ESCANTEIO", -"ESCAPADA", -"ESCAPADELA", -"ESCAPAMENTO", -"ESCAPAR", -"ESCAPATORIA", -"ESCAPAVEL", -"ESCAPE", -"ESCAPISMO", -"ESCAPULIR", -"ESCAQUE", -"ESCARAFUNCHAR", -"ESCARAMUCA", -"ESCARAVELHO", -"ESCARCEU", -"ESCARGO", -"ESCARLATE", -"ESCARLATINA", -"ESCARNECER", -"ESCARNECIDO", -"ESCARNIO", -"ESCAROLA", -"ESCARPA", -"ESCARPADO", -"ESCARPAR", -"ESCARRADEIRA", -"ESCARRADO", -"ESCARRAR", -"ESCARRO", -"ESCASSEAR", -"ESCASSEZ", -"ESCASSO", -"ESCATOLOGIA", -"ESCATOLOGICO", -"ESCAVACAO", -"ESCAVADEIRA", -"ESCAVAR", -"ESCLARECEDOR", -"ESCLARECER", -"ESCLARECIDO", -"ESCLARECIMENTO", -"ESCLEROSADO", -"ESCLEROSAMENTO", -"ESCLEROSAR", -"ESCLEROSE", -"ESCLEROTICA", -"ESCOADOURO", -"ESCOAMENTO", -"ESCOAR", -"ESCOCES", -"ESCOICEAR", -"ESCOLA", -"ESCOLADO", -"ESCOLAR", -"ESCOLARIDADE", -"ESCOLARIZACAO", -"ESCOLARIZADO", -"ESCOLARIZAR", -"ESCOLARIZAVEL", -"ESCOLASTICA", -"ESCOLASTICO", -"ESCOLHA", -"ESCOLHER", -"ESCOLHI", -"ESCOLHIDO", -"ESCOLIOSE", -"ESCOLTA", -"ESCOLTAR", -"ESCOMBROS", -"ESCOMUNAL", -"ESCONDER", -"ESCONDERIJO", -"ESCONDIDO", -"ESCONJURAR", -"ESCONJURO", -"ESCOPA", -"ESCOPETA", -"ESCOPO", -"ESCORA", -"ESCORAMENTO", -"ESCORAR", -"ESCORBUTO", -"ESCORE", -"ESCORIA", -"ESCORIACAO", -"ESCORIAR", -"ESCORPIANO", -"ESCORPIAO", -"ESCORRACADO", -"ESCORRACAR", -"ESCORREDOR", -"ESCORREGADELA", -"ESCORREGADIO", -"ESCORREGADOR", -"ESCORREGAO", -"ESCORREGAR", -"ESCORRER", -"ESCORRIDO", -"ESCOTEIRO", -"ESCOTILHA", -"ESCOTISMO", -"ESCOVA", -"ESCOVACAO", -"ESCOVADELA", -"ESCOVADO", -"ESCOVAO", -"ESCOVAR", -"ESCRACHADO", -"ESCRACHAR", -"ESCRAVA", -"ESCRAVAGISTA", -"ESCRAVATURA", -"ESCRAVIDAO", -"ESCRAVIZACAO", -"ESCRAVIZAR", -"ESCRAVO", -"ESCRAVOCRATA", -"ESCRETE", -"ESCREVENTE", -"ESCREVER", -"ESCREVINHACAO", -"ESCREVINHAR", -"ESCRIBA", -"ESCRITA", -"ESCRITO", -"ESCRITOR", -"ESCRITORIO", -"ESCRITURA", -"ESCRITURACAO", -"ESCRITURAR", -"ESCRITURARIO", -"ESCRITURAS", -"ESCRIVANINHA", -"ESCRIVAO", -"ESCROQUE", -"ESCROTAL", -"ESCROTO", -"ESCRUPULO", -"ESCRUPULOSO", -"ESCRUTABILIDADE", -"ESCRUTAR", -"ESCRUTAVEL", -"ESCRUTINAR", -"ESCRUTINIO", -"ESCUDAR", -"ESCUDEIRO", -"ESCUDERIA", -"ESCUDO", -"ESCULACHADO", -"ESCULACHAR", -"ESCULACHO", -"ESCULAPIO", -"ESCULHAMBACAO", -"ESCULHAMBADO", -"ESCULHAMBAR", -"ESCULPIDO", -"ESCULPIR", -"ESCULTOR", -"ESCULTURA", -"ESCULTURAL", -"ESCUMADEIRA", -"ESCUNA", -"ESCURA", -"ESCURECER", -"ESCURECIMENTO", -"ESCURIDAO", -"ESCURO", -"ESCUTA", -"ESCUTAR", -"ESDRUXULO", -"ESFACELADO", -"ESFACELAMENTO", -"ESFACELAR", -"ESFALFADO", -"ESFALFAMENTO", -"ESFALFAR", -"ESFAQUEADO", -"ESFAQUEAR", -"ESFARELADO", -"ESFARELAMENTO", -"ESFARELAR", -"ESFARRAPADA", -"ESFARRAPADO", -"ESFARRAPAR", -"ESFERA", -"ESFERAS", -"ESFERICO", -"ESFEROGRAFICA", -"ESFINCTER", -"ESFINGE", -"ESFOLADO", -"ESFOLAMENTO", -"ESFOLAR", -"ESFOMEADO", -"ESFOMEAR", -"ESFORCADO", -"ESFORCAR", -"ESFORCO", -"ESFREGACAO", -"ESFREGAO", -"ESFREGAR", -"ESFRIAMENTO", -"ESFRIAR", -"ESFUMACADO", -"ESFUMACAR", -"ESFUZIANTE", -"ESGANADO", -"ESGANAR", -"ESGARCAR", -"ESGOELAMENTO", -"ESGOELAR", -"ESGOTADO", -"ESGOTAMENTO", -"ESGOTAR", -"ESGOTO", -"ESGRIMA", -"ESGRIMIR", -"ESGRIMISTA", -"ESGUEIRAR", -"ESGUICHAR", -"ESGUICHO", -"ESGUIO", -"ESLAVICO", -"ESLAVO", -"ESLAVONIO", -"ESLOVACO", -"ESLOVENO", -"ESMAECER", -"ESMAECIDO", -"ESMAGAMENTO", -"ESMAGAR", -"ESMALTADO", -"ESMALTAR", -"ESMALTE", -"ESMERADO", -"ESMERALDA", -"ESMERAR", -"ESMERIL", -"ESMERILHACAO", -"ESMERILHADO", -"ESMERILHAMENTO", -"ESMERILHAR", -"ESMERO", -"ESMIGALHAR", -"ESMIUCADO", -"ESMIUCAR", -"ESMO", -"ESMOLA", -"ESMOLAR", -"ESMORECER", -"ESMORECIDO", -"ESMORECIMENTO", -"ESMURRAR", -"ESNOBACAO", -"ESNOBAR", -"ESNOBE", -"ESNOBISMO", -"ESOFAGO", -"ESOTERICO", -"ESOTERISMO", -"ESPACADO", -"ESPACAMENTO", -"ESPACAR", -"ESPACEJAMENTO", -"ESPACEJAR", -"ESPACIAL", -"ESPACO", -"ESPACONAVE", -"ESPACOS", -"ESPACOSO", -"ESPADA", -"ESPADACHIM", -"ESPADAS", -"ESPADAUDO", -"ESPADILHA", -"ESPAGUETE", -"ESPAIRECER", -"ESPAIRECIMENTO", -"ESPALDAR", -"ESPALHADO", -"ESPALHAFATO", -"ESPALHAFATOSO", -"ESPALHAR", -"ESPALMADO", -"ESPALMAR", -"ESPANADOR", -"ESPANAR", -"ESPANCADO", -"ESPANCAMENTO", -"ESPANCAR", -"ESPANHA", -"ESPANHOL", -"ESPANHOLA", -"ESPANTADO", -"ESPANTALHO", -"ESPANTAR", -"ESPANTO", -"ESPANTOSO", -"ESPARADRAPO", -"ESPARGIR", -"ESPARRAMADO", -"ESPARRAMAR", -"ESPARSO", -"ESPARTANO", -"ESPARTILHO", -"ESPASMO", -"ESPASMODICO", -"ESPATIFADO", -"ESPATIFAR", -"ESPATULA", -"ESPAVENTO", -"ESPAVORIDO", -"ESPAVORIR", -"ESPECIAIS", -"ESPECIAL", -"ESPECIALIDADE", -"ESPECIALISTA", -"ESPECIALIZACAO", -"ESPECIALIZAR", -"ESPECIALMENTE", -"ESPECIARIA", -"ESPECIE", -"ESPECIFICA", -"ESPECIFICACAO", -"ESPECIFICACOES", -"ESPECIFICAR", -"ESPECIFICAS", -"ESPECIFICIDADE", -"ESPECIFICO", -"ESPECIME", -"ESPECIMEN", -"ESPECTADOR", -"ESPECTRAL", -"ESPECTRO", -"ESPECTROGRAFIA", -"ESPECTROGRAFICO", -"ESPECTROMETRIA", -"ESPECTROSCOPIO", -"ESPECULACAO", -"ESPECULADOR", -"ESPECULAR", -"ESPECULATIVO", -"ESPELEOLOGIA", -"ESPELEOLOGICO", -"ESPELEOLOGO", -"ESPELHADO", -"ESPELHAR", -"ESPELHO", -"ESPELUNCA", -"ESPERA", -"ESPERADO", -"ESPERANCA", -"ESPERANCAS", -"ESPERANCOSO", -"ESPERANTISTA", -"ESPERANTO", -"ESPERAR", -"ESPERMA", -"ESPERMATOZOIDE", -"ESPERMICIDA", -"ESPERNEAR", -"ESPERO", -"ESPERTALHAO", -"ESPERTEZA", -"ESPERTO", -"ESPESSA", -"ESPESSAR", -"ESPESSO", -"ESPESSURA", -"ESPETACULAR", -"ESPETACULO", -"ESPETADA", -"ESPETADELA", -"ESPETADO", -"ESPETAR", -"ESPETINHO", -"ESPETO", -"ESPEVITADO", -"ESPEVITAR", -"ESPEZINHADO", -"ESPEZINHAR", -"ESPIADA", -"ESPIAO", -"ESPIAR", -"ESPICACADO", -"ESPICACAR", -"ESPICHADO", -"ESPICHAR", -"ESPIGA", -"ESPIGAO", -"ESPINAFRACAO", -"ESPINAFRAR", -"ESPINAFRE", -"ESPINGARDA", -"ESPINHA", -"ESPINHAL", -"ESPINHO", -"ESPINHOS", -"ESPINHOSO", -"ESPINOSISMO", -"ESPINOSISTA", -"ESPIONAGEM", -"ESPIONAR", -"ESPIRACAO", -"ESPIRAL", -"ESPIRALADO", -"ESPIRAR", -"ESPIRITA", -"ESPIRITEIRA", -"ESPIRITISMO", -"ESPIRITO", -"ESPIRITUAL", -"ESPIRITUALIDADE", -"ESPIRITUALISMO", -"ESPIRITUALISTA", -"ESPIRITUALIZACAO", -"ESPIRITUALIZAR", -"ESPIRITUOSAMENTE", -"ESPIRITUOSO", -"ESPIRRAR", -"ESPIRRO", -"ESPLANADA", -"ESPLENDIDO", -"ESPLENDOR", -"ESPLENDOROSO", -"ESPOCAR", -"ESPOLETA", -"ESPOLIACAO", -"ESPOLIAR", -"ESPOLIO", -"ESPONJA", -"ESPONJOSO", -"ESPONSAIS", -"ESPONSAL", -"ESPONTANEA", -"ESPONTANEIDADE", -"ESPONTANEO", -"ESPORA", -"ESPORADICO", -"ESPOREAR", -"ESPORRAR", -"ESPORRO", -"ESPORTE", -"ESPORTES", -"ESPORTISTA", -"ESPORTIVA", -"ESPORTIVIDADE", -"ESPORTIVO", -"ESPOSA", -"ESPOSAR", -"ESPOSO", -"ESPRAIADO", -"ESPRAIAR", -"ESPREGUICADEIRA", -"ESPREGUICAMENTO", -"ESPREGUICAR", -"ESPREITA", -"ESPREMEDOR", -"ESPREMER", -"ESPUMA", -"ESPUMANTE", -"ESPUMAR", -"ESPURIO", -"ESQUADRA", -"ESQUADRAO", -"ESQUADRIA", -"ESQUADRILHA", -"ESQUADRINHAR", -"ESQUADRO", -"ESQUALIDO", -"ESQUARTEJAMENTO", -"ESQUARTEJAR", -"ESQUECER", -"ESQUECIDO", -"ESQUECIMENTO", -"ESQUECIVEL", -"ESQUELETICO", -"ESQUELETO", -"ESQUEMA", -"ESQUEMATICO", -"ESQUEMATIZACAO", -"ESQUEMATIZAR", -"ESQUENTADO", -"ESQUENTAR", -"ESQUERDA", -"ESQUERDISMO", -"ESQUERDISTA", -"ESQUERDO", -"ESQUI", -"ESQUIADOR", -"ESQUIAR", -"ESQUIFE", -"ESQUILO", -"ESQUIMO", -"ESQUINA", -"ESQUISITAO", -"ESQUISITICE", -"ESQUISITO", -"ESQUISTOSSOMO", -"ESQUISTOSSOMOSE", -"ESQUIVA", -"ESQUIVAR", -"ESQUIVO", -"ESQUIZOFRENIA", -"ESQUIZOFRENICO", -"ESSA", -"ESSAS", -"ESSE", -"ESSENCIA", -"ESSENCIAIS", -"ESSENCIAL", -"ESSENCIALMENTE", -"EST", -"ESTA", -"ESTABANADO", -"ESTABELECER", -"ESTABELECIDO", -"ESTABELECIMENTO", -"ESTABILIDADE", -"ESTABILIZACAO", -"ESTABILIZADO", -"ESTABILIZADOR", -"ESTABILIZAR", -"ESTABILIZAVEL", -"ESTABULO", -"ESTACA", -"ESTACAO", -"ESTACAR", -"ESTACIONAR", -"ESTACIONARIO", -"ESTADA", -"ESTADIA", -"ESTADIO", -"ESTADISTA", -"ESTADO", -"ESTADOS", -"ESTADUAL", -"ESTADUNIDENSE", -"ESTAFA", -"ESTAFADO", -"ESTAFANTE", -"ESTAFAR", -"ESTAFILOCOCO", -"ESTAGFLACAO", -"ESTAGIAR", -"ESTAGIARIO", -"ESTAGIO", -"ESTAGNACAO", -"ESTAGNADO", -"ESTAGNANTE", -"ESTAGNAR", -"ESTALACTITE", -"ESTALAGEM", -"ESTALAGMITE", -"ESTALAJADEIRO", -"ESTALAR", -"ESTALEIRO", -"ESTALIDO", -"ESTALO", -"ESTAMPA", -"ESTAMPADO", -"ESTAMPAR", -"ESTAMPARIA", -"ESTAMPAS", -"ESTAMPIDO", -"ESTANCAMENTO", -"ESTANCAR", -"ESTANCIA", -"ESTANDARDIZACAO", -"ESTANDARDIZADO", -"ESTANDARDIZAR", -"ESTANDARTE", -"ESTANDE", -"ESTANHO", -"ESTANQUE", -"ESTANTE", -"ESTAO", -"ESTAPAFURDIO", -"ESTAPEAR", -"ESTAR", -"ESTARA", -"ESTARDALHACO", -"ESTARRECER", -"ESTATAL", -"ESTATELADO", -"ESTATELAMENTO", -"ESTATELAR", -"ESTATICA", -"ESTATICO", -"ESTATISMO", -"ESTATISTICA", -"ESTATISTICO", -"ESTATIZACAO", -"ESTATIZADO", -"ESTATIZAR", -"ESTATUA", -"ESTATUETA", -"ESTATURA", -"ESTATUTARIO", -"ESTATUTO", -"ESTAVEL", -"ESTE", -"ESTEARATO", -"ESTEIO", -"ESTEIRA", -"ESTEJAM", -"ESTELAR", -"ESTELIONATARIO", -"ESTELIONATO", -"ESTENCIL", -"ESTENDER", -"ESTENDIDO", -"ESTENOGRAFAR", -"ESTENOGRAFIA", -"ESTENOGRAFICO", -"ESTENOGRAFO", -"ESTEPE", -"ESTEQUIOMETRIA", -"ESTEQUIOMETRICO", -"ESTER", -"ESTERCAR", -"ESTERCO", -"ESTEREO", -"ESTEREOFONICO", -"ESTEREOTIPO", -"ESTERIL", -"ESTERILIDADE", -"ESTERILIZACAO", -"ESTERILIZADO", -"ESTERILIZANTE", -"ESTERILIZAR", -"ESTERLINO", -"ESTERNO", -"ESTEROIDE", -"ESTERTOR", -"ESTETA", -"ESTETICA", -"ESTETICISTA", -"ESTETICO", -"ESTETOSCOPIO", -"ESTIAGEM", -"ESTIAR", -"ESTIBORDO", -"ESTICA", -"ESTICADA", -"ESTICADO", -"ESTICAR", -"ESTIGMA", -"ESTIGMATIZADO", -"ESTIGMATIZAR", -"ESTILETE", -"ESTILHACAR", -"ESTILHACO", -"ESTILINGUE", -"ESTILISTA", -"ESTILISTICA", -"ESTILISTICO", -"ESTILIZACAO", -"ESTILIZADO", -"ESTILIZAR", -"ESTILO", -"ESTIMA", -"ESTIMADO", -"ESTIMAR", -"ESTIMATIVA", -"ESTIMATIVO", -"ESTIMULACAO", -"ESTIMULANTE", -"ESTIMULAR", -"ESTIMULO", -"ESTIO", -"ESTIPENDIO", -"ESTIPULACAO", -"ESTIPULADO", -"ESTIPULAR", -"ESTIRADO", -"ESTIRAMENTO", -"ESTIRAR", -"ESTIRENO", -"ESTIRPE", -"ESTIVA", -"ESTIVADOR", -"ESTIVAL", -"ESTIVAR", -"ESTIVER", -"ESTOCADA", -"ESTOCADO", -"ESTOCAGEM", -"ESTOCAR", -"ESTOCASTICO", -"ESTOCAVEL", -"ESTOFADO", -"ESTOFAR", -"ESTOICISMO", -"ESTOICO", -"ESTOJO", -"ESTOMACAL", -"ESTOMAGO", -"ESTONIANO", -"ESTONTEADO", -"ESTONTEANTE", -"ESTONTEAR", -"ESTOPA", -"ESTOPIM", -"ESTOQUE", -"ESTORFO", -"ESTORNAR", -"ESTORNO", -"ESTORRICADO", -"ESTORRICAR", -"ESTORVAR", -"ESTORVO", -"ESTOU", -"ESTOURADO", -"ESTOURAR", -"ESTOURO", -"ESTRABICO", -"ESTRABISMO", -"ESTRACALHAR", -"ESTRADA", -"ESTRADIVARIO", -"ESTRADO", -"ESTRAGADO", -"ESTRAGAO", -"ESTRAGAR", -"ESTRAGO", -"ESTRALAR", -"ESTRAMBOTICO", -"ESTRANGEIRA", -"ESTRANGEIRISMO", -"ESTRANGEIRO", -"ESTRANGULACAO", -"ESTRANGULADO", -"ESTRANGULADOR", -"ESTRANGULAMENTO", -"ESTRANGULAR", -"ESTRANHAMENTO", -"ESTRANHAR", -"ESTRANHEZA", -"ESTRANHO", -"ESTRATAGEMA", -"ESTRATEGIA", -"ESTRATEGICA", -"ESTRATEGICO", -"ESTRATEGISTA", -"ESTRATIFICACAO", -"ESTRATIFICADO", -"ESTRATIFICAR", -"ESTRATO", -"ESTRATOSFERA", -"ESTRATOSFERICO", -"ESTREANTE", -"ESTREAR", -"ESTREBARIA", -"ESTREBUCHAMENTO", -"ESTREBUCHAR", -"ESTREIA", -"ESTREITA", -"ESTREITADO", -"ESTREITAMENTO", -"ESTREITAR", -"ESTREITEZA", -"ESTREITO", -"ESTRELA", -"ESTRELADO", -"ESTRELAR", -"ESTRELAS", -"ESTRELATO", -"ESTRELINHA", -"ESTRELISMO", -"ESTREMECER", -"ESTREMECIDO", -"ESTREMECIMENTO", -"ESTREPAR", -"ESTREPE", -"ESTREPITAR", -"ESTREPITO", -"ESTREPITOSO", -"ESTRESSANTE", -"ESTRESSAR", -"ESTRESSE", -"ESTRIA", -"ESTRIADO", -"ESTRIAMENTO", -"ESTRIAR", -"ESTRIBEIRA", -"ESTRIBILHO", -"ESTRIBO", -"ESTRICNINA", -"ESTRIDENTE", -"ESTRILAR", -"ESTRILO", -"ESTRIPAR", -"ESTRIPULIA", -"ESTRITAMENTE", -"ESTRITO", -"ESTROFE", -"ESTROGENIO", -"ESTROGENO", -"ESTROGONOFE", -"ESTRONCIO", -"ESTRONDAR", -"ESTRONDO", -"ESTRONDOSO", -"ESTROPIADO", -"ESTROPIAR", -"ESTROPICIO", -"ESTRUMBICA", -"ESTRUME", -"ESTRUTURA", -"ESTRUTURACAO", -"ESTRUTURADA", -"ESTRUTURADO", -"ESTRUTURAIS", -"ESTRUTURAL", -"ESTRUTURALISMO", -"ESTRUTURAR", -"ESTUARIO", -"ESTUDADO", -"ESTUDANTE", -"ESTUDANTIL", -"ESTUDAR", -"ESTUDEI", -"ESTUDIO", -"ESTUDIOSO", -"ESTUDO", -"ESTUFA", -"ESTULTICE", -"ESTULTICIA", -"ESTULTO", -"ESTUPEFACAO", -"ESTUPEFACIENTE", -"ESTUPEFATO", -"ESTUPEFAZER", -"ESTUPENDO", -"ESTUPIDEZ", -"ESTUPIDO", -"ESTUPOR", -"ESTUPORADO", -"ESTUPORAR", -"ESTUPRADOR", -"ESTUPRAR", -"ESTUPRO", -"ESTUQUE", -"ESTURJAO", -"ESTURRICADO", -"ESTURRICAR", -"ESVAIR", -"ESVAZIAMENTO", -"ESVAZIAR", -"ESVERDEADO", -"ESVERDEAR", -"ESVOACANTE", -"ESVOACAR", -"ET", -"ETA", -"ETANO", -"ETANOL", -"ETANOLAMINA", -"ETAPA", -"ETARIO", -"ETC", -"ETENO", -"ETER", -"ETEREO", -"ETERNAMENTE", -"ETERNIDADE", -"ETERNIZAR", -"ETERNO", -"ETICA", -"ETICO", -"ETILENO", -"ETILENOGLICOL", -"ETILICO", -"ETIMOLOGIA", -"ETIMOLOGICO", -"ETIMOLOGISTA", -"ETIMOLOGO", -"ETIOLOGIA", -"ETIOLOGICO", -"ETIOPE", -"ETIQUETA", -"ETIQUETADOR", -"ETIQUETADORA", -"ETIQUETAGEM", -"ETIQUETAR", -"ETNIA", -"ETNICIDADE", -"ETNICO", -"ETNOCENTRICO", -"ETNOCENTRISMO", -"ETNOLOGIA", -"ETNOLOGICO", -"ETNOLOGO", -"ETOLOGIA", -"ETOS", -"ETRUSCO", -"EU", -"EUCALIPTO", -"EUCALIPTOL", -"EUCARIONTE", -"EUCARIOTE", -"EUCARIOTICO", -"EUCARIOTO", -"EUCARISTIA", -"EUCARISTICO", -"EUCLIDES", -"EUCLIDIANA", -"EUCLIDIANO", -"EUFEMICO", -"EUFEMISMO", -"EUFEMISTICO", -"EUFEMIZAR", -"EUFONIA", -"EUFONICO", -"EUFORIA", -"EUFORICO", -"EUGENIA", -"EUGENICO", -"EUNUCO", -"EURASIATICO", -"EURECA", -"EURO", -"EUROCOMUNISMO", -"EURODOLAR", -"EUROPA", -"EUROPEU", -"EUROPIO", -"EUSTAQUIO", -"EUTANASIA", -"EV", -"EVACUACAO", -"EVACUAR", -"EVADIR", -"EVANGELHO", -"EVANGELICO", -"EVANGELISTA", -"EVANGELIZACAO", -"EVANGELIZAR", -"EVAPORACAO", -"EVAPORADO", -"EVAPORAR", -"EVASAO", -"EVASIVA", -"EVASIVO", -"EVENTO", -"EVENTOS", -"EVENTUAIS", -"EVENTUAL", -"EVENTUALIDADE", -"EVIDENCIA", -"EVIDENCIAR", -"EVIDENTE", -"EVIDENTEMENTE", -"EVITABILIDADE", -"EVITAR", -"EVITAVEL", -"EVOCACAO", -"EVOCAR", -"EVOCATIVO", -"EVOLUCAO", -"EVOLUCIONISMO", -"EVOLUCIONISTA", -"EVOLUIDO", -"EVOLUIR", -"EX", -"EXACERBAR", -"EXAGERACAO", -"EXAGERADO", -"EXAGERAR", -"EXAGERO", -"EXALACAO", -"EXALAR", -"EXALTACAO", -"EXALTADO", -"EXALTAR", -"EXAME", -"EXAMINACAO", -"EXAMINADO", -"EXAMINADOR", -"EXAMINADORA", -"EXAMINANDO", -"EXAMINAR", -"EXAMINAVEL", -"EXASPERACAO", -"EXASPERADO", -"EXASPERANTE", -"EXASPERAR", -"EXATA", -"EXATAMENTE", -"EXATAS", -"EXATIDAO", -"EXATO", -"EXAURIDO", -"EXAURIR", -"EXAURIVEL", -"EXAUSTAO", -"EXAUSTIVO", -"EXAUSTO", -"EXAUSTOR", -"EXCECAO", -"EXCEDENTE", -"EXCEDER", -"EXCELENCIA", -"EXCELENTE", -"EXCELENTISSIMO", -"EXCELSO", -"EXCENTRICIDADE", -"EXCENTRICO", -"EXCEPCIONAL", -"EXCEPCIONALIDADE", -"EXCERTO", -"EXCESSIVA", -"EXCESSIVAMENTE", -"EXCESSIVIDADE", -"EXCESSIVO", -"EXCESSO", -"EXCETO", -"EXCETUAR", -"EXCISAO", -"EXCITACAO", -"EXCITADO", -"EXCITAMENTO", -"EXCITANTE", -"EXCITAR", -"EXCLAMACAO", -"EXCLAMAR", -"EXCLAMATIVO", -"EXCLUIDO", -"EXCLUINDO", -"EXCLUIR", -"EXCLUSAO", -"EXCLUSIVA", -"EXCLUSIVE", -"EXCLUSIVIDADE", -"EXCLUSIVO", -"EXCLUSO", -"EXCLUSOES", -"EXCOMUNGADO", -"EXCOMUNGAR", -"EXCOMUNHAO", -"EXCRECAO", -"EXCREMENTO", -"EXCRESCENCIA", -"EXCRETAR", -"EXCRETOR", -"EXCRUCIANTE", -"EXCRUCIAR", -"EXCURSAO", -"EXCURSIONAR", -"EXCURSIONISTA", -"EXECRACAO", -"EXECRAR", -"EXECRAVEL", -"EXECUCAO", -"EXECUTADO", -"EXECUTAR", -"EXECUTAVEL", -"EXECUTIVA", -"EXECUTIVO", -"EXECUTOR", -"EXEGESE", -"EXEMPLAR", -"EXEMPLARIDADE", -"EXEMPLIFICACAO", -"EXEMPLIFICADOR", -"EXEMPLIFICANTE", -"EXEMPLIFICAR", -"EXEMPLO", -"EXEQUIAS", -"EXEQUIVEL", -"EXERCER", -"EXERCICIO", -"EXERCITAR", -"EXERCITO", -"EXFOLIACAO", -"EXFOLIADO", -"EXIBICAO", -"EXIBICIONISMO", -"EXIBICIONISTA", -"EXIBIDO", -"EXIBIDOR", -"EXIBIR", -"EXIGENCIA", -"EXIGENTE", -"EXIGIR", -"EXIGIVEL", -"EXIGUO", -"EXILADO", -"EXILAR", -"EXILIO", -"EXIMIO", -"EXIMIR", -"EXISTE", -"EXISTEM", -"EXISTENCIA", -"EXISTENCIAL", -"EXISTENTE", -"EXISTENTES", -"EXISTENTIALISMO", -"EXISTENTIALISTA", -"EXISTIR", -"EXITO", -"EXOBIOLOGIA", -"EXOBIOLOGICO", -"EXOBIOLOGO", -"EXODO", -"EXOESQUELETO", -"EXONERACAO", -"EXONERAR", -"EXONERAVEL", -"EXORBITANCIA", -"EXORBITANTE", -"EXORCISMO", -"EXORCISTA", -"EXORCIZAR", -"EXORTACAO", -"EXORTAR", -"EXOSQUELETO", -"EXOTERICO", -"EXOTICO", -"EXPANDIDO", -"EXPANDIR", -"EXPANSAO", -"EXPANSIONISMO", -"EXPANSIONISTA", -"EXPANSIVIDADE", -"EXPANSIVO", -"EXPATRIACAO", -"EXPATRIADO", -"EXPATRIAR", -"EXPECTATIVA", -"EXPECTORACAO", -"EXPECTORANTE", -"EXPECTORAR", -"EXPEDICAO", -"EXPEDICIONARIO", -"EXPEDIDOR", -"EXPEDIENCIA", -"EXPEDIENTE", -"EXPEDIR", -"EXPELIR", -"EXPERIENCIA", -"EXPERIENTE", -"EXPERIMENTACAO", -"EXPERIMENTADO", -"EXPERIMENTAL", -"EXPERIMENTAR", -"EXPERIMENTO", -"EXPERT", -"EXPERTISE", -"EXPIACAO", -"EXPIAR", -"EXPIATORIO", -"EXPIRACAO", -"EXPIRAR", -"EXPLANACAO", -"EXPLANAR", -"EXPLANATORIO", -"EXPLETIVA", -"EXPLETIVO", -"EXPLICACAO", -"EXPLICAR", -"EXPLICATIVA", -"EXPLICATIVO", -"EXPLICAVEL", -"EXPLICITACAO", -"EXPLICITAR", -"EXPLICITO", -"EXPLODIR", -"EXPLORACAO", -"EXPLORADO", -"EXPLORADOR", -"EXPLORAR", -"EXPLORATORIO", -"EXPLOSAO", -"EXPLOSIVO", -"EXPO", -"EXPOENTE", -"EXPONENCIAL", -"EXPOR", -"EXPORTACAO", -"EXPORTADOR", -"EXPORTADORA", -"EXPORTAR", -"EXPOSICAO", -"EXPOSICOES", -"EXPOSITOR", -"EXPOSTO", -"EXPRESSAO", -"EXPRESSAR", -"EXPRESSIONISMO", -"EXPRESSIONISTA", -"EXPRESSIVA", -"EXPRESSIVIDADE", -"EXPRESSIVO", -"EXPRESSO", -"EXPRESSOES", -"EXPRIMIR", -"EXPRIMIVEL", -"EXPROPRIACAO", -"EXPROPRIAR", -"EXPULSAO", -"EXPULSAR", -"EXPULSO", -"EXPURGADO", -"EXPURGAR", -"EXPURGO", -"EXSUDACAO", -"EXSUDAR", -"EXTASE", -"EXTASIADO", -"EXTASIAR", -"EXTATICO", -"EXTEMPORANEIDADE", -"EXTEMPORANEO", -"EXTENSAO", -"EXTENSIVO", -"EXTENSO", -"EXTENSOR", -"EXTENUADO", -"EXTENUAR", -"EXTERIOR", -"EXTERIORIZACAO", -"EXTERIORIZAR", -"EXTERMINACAO", -"EXTERMINADOR", -"EXTERMINAR", -"EXTERMINIO", -"EXTERNA", -"EXTERNAR", -"EXTERNATO", -"EXTERNO", -"EXTINCAO", -"EXTINGUIR", -"EXTINGUIVEL", -"EXTINTA", -"EXTINTO", -"EXTINTOR", -"EXTIRPAR", -"EXTORQUIR", -"EXTORSAO", -"EXTORSIVO", -"EXTRA", -"EXTRACAO", -"EXTRACONJUGAL", -"EXTRADICAO", -"EXTRADITADO", -"EXTRADITAR", -"EXTRAIR", -"EXTRAJUDICIAL", -"EXTRAORDINARIA", -"EXTRAORDINARIAMENTE", -"EXTRAORDINARIO", -"EXTRAPOLACAO", -"EXTRAPOLAR", -"EXTRATERRESTRE", -"EXTRATERRITORIAL", -"EXTRATERRITORIALIDADE", -"EXTRATIVISMO", -"EXTRATIVISTA", -"EXTRATIVO", -"EXTRATO", -"EXTRAVAGANCIA", -"EXTRAVAGANTE", -"EXTRAVASAMENTO", -"EXTRAVASAR", -"EXTRAVIADO", -"EXTRAVIAR", -"EXTRAVIO", -"EXTREMADO", -"EXTREMAMENTE", -"EXTREMAR", -"EXTREMIDADE", -"EXTREMIS", -"EXTREMISMO", -"EXTREMISTA", -"EXTREMO", -"EXTRINSECO", -"EXTROVERSAO", -"EXTROVERTIDO", -"EXTRUSAO", -"EXTRUSOR", -"EXTRUSORA", -"EXU", -"EXUBERANCIA", -"EXUBERANTE", -"EXULTACAO", -"EXULTANTE", -"EXULTAR", -"EXUMACAO", -"EXUMAR", -"FA", -"FAB", -"FABRICA", -"FABRICACAO", -"FABRICANTE", -"FABRICAR", -"FABRICO", -"FABRIL", -"FABRIQUETA", -"FABULA", -"FABULACAO", -"FABULOSO", -"FACA", -"FACADA", -"FACANHA", -"FACAO", -"FACCAO", -"FACE", -"FACEIRA", -"FACETA", -"FACHADA", -"FACHO", -"FACIAL", -"FACIL", -"FACILIDADE", -"FACILIDADES", -"FACILIMO", -"FACILITAR", -"FACILMENTE", -"FACINORA", -"FACTICA", -"FACTIVEL", -"FACTO", -"FACTUAL", -"FACULDADE", -"FACULDADES", -"FACULTAR", -"FACULTATIVO", -"FADA", -"FADADO", -"FADAR", -"FADIGA", -"FADO", -"FAGOCITO", -"FAGOCITOSE", -"FAGOTE", -"FAGULHA", -"FAHRENHEIT", -"FAIANCA", -"FAINA", -"FAISAO", -"FAISCA", -"FAISCANTE", -"FAISCAR", -"FAIXA", -"FAIXAS", -"FAJUTO", -"FALA", -"FALACAO", -"FALACIA", -"FALACIOSO", -"FALADO", -"FALADOR", -"FALANGE", -"FALANTE", -"FALAR", -"FALASTRAO", -"FALATORIO", -"FALCAO", -"FALCATRUA", -"FALCOARIA", -"FALECER", -"FALECIDO", -"FALECIMENTO", -"FALENCIA", -"FALESIA", -"FALHA", -"FALHADO", -"FALHAR", -"FALHO", -"FALIBILIDADE", -"FALICO", -"FALIDA", -"FALIDO", -"FALIR", -"FALO", -"FALOPIANO", -"FALOPIO", -"FALOU", -"FALSA", -"FALSARIO", -"FALSEAR", -"FALSETE", -"FALSIDADE", -"FALSIFICACAO", -"FALSIFICADO", -"FALSIFICADOR", -"FALSIFICAR", -"FALSO", -"FALTA", -"FALTAR", -"FALTOSO", -"FAMA", -"FAMIGERADO", -"FAMILIA", -"FAMILIAR", -"FAMILIARIDADE", -"FAMILIARIZAR", -"FAMINTO", -"FAMOSO", -"FANATICO", -"FANATISMO", -"FANATIZAR", -"FANDANGO", -"FANFARRA", -"FANFARRAO", -"FANFARRICE", -"FANFARRONADA", -"FANFARRONAR", -"FANFARRONICE", -"FANHO", -"FANHOSO", -"FANIQUITO", -"FANTASIA", -"FANTASIAR", -"FANTASIOSO", -"FANTASISTA", -"FANTASMA", -"FANTASMAGORICO", -"FANTASTICO", -"FANTOCHE", -"FANZINE", -"FAO", -"FAPESP", -"FAQUEIRO", -"FAQUIR", -"FARAD", -"FARADAY", -"FARAO", -"FARAONICO", -"FARDA", -"FARDAMENTO", -"FARDAO", -"FARDAR", -"FARDO", -"FAREJAR", -"FARELO", -"FARFALHANTE", -"FARFALHAR", -"FARINACEO", -"FARINGE", -"FARINGITE", -"FARINHA", -"FARINHENTO", -"FARISAICO", -"FARISEU", -"FARMACEUTICO", -"FARMACIA", -"FARMACOLOGIA", -"FARMACOLOGICO", -"FARMACOPEIA", -"FARO", -"FAROESTE", -"FAROFA", -"FAROFEIRO", -"FAROL", -"FAROLEIRO", -"FAROLETE", -"FARPA", -"FARRA", -"FARRAPO", -"FARREAR", -"FARRISTA", -"FARROUPILHA", -"FARSA", -"FARSANTE", -"FARSI", -"FARTAR", -"FARTO", -"FARTURA", -"FASCICULO", -"FASCINACAO", -"FASCINAR", -"FASCINIO", -"FASCISMO", -"FASCISTA", -"FASE", -"FASES", -"FASTIDIOSO", -"FASTIO", -"FATAL", -"FATALIDADE", -"FATALISMO", -"FATALISTA", -"FATALMENTE", -"FATIA", -"FATIADO", -"FATIAR", -"FATIDICO", -"FATIGADO", -"FATIGANTE", -"FATIGAR", -"FATO", -"FATOR", -"FATORACAO", -"FATORAR", -"FATORIAL", -"FATOS", -"FATURA", -"FATURACAO", -"FATURAMENTO", -"FATURAR", -"FATURISTA", -"FAUNA", -"FAUNO", -"FAUSTO", -"FAVA", -"FAVELA", -"FAVELADO", -"FAVO", -"FAVOR", -"FAVORAVEL", -"FAVORECER", -"FAVORECIDO", -"FAVORECIMENTO", -"FAVORITISMO", -"FAVORITO", -"FAX", -"FAXINA", -"FAXINEIRA", -"FAZ", -"FAZENDA", -"FAZENDEIRO", -"FAZENDO", -"FAZER", -"FE", -"FEALDADE", -"FEB", -"FEBEM", -"FEBRABAN", -"FEBRAO", -"FEBRE", -"FEBRIL", -"FECAL", -"FECHADA", -"FECHADO", -"FECHADURA", -"FECHAMENTO", -"FECHAR", -"FECHO", -"FECULA", -"FECUNDACAO", -"FECUNDAR", -"FECUNDIDADE", -"FECUNDO", -"FEDELHO", -"FEDER", -"FEDERACAO", -"FEDERADO", -"FEDERAL", -"FEDERALISMO", -"FEDERALISTA", -"FEDERATIVA", -"FEDERATIVO", -"FEDIDO", -"FEDOR", -"FEDORENTO", -"FEED", -"FEERICO", -"FEIA", -"FEIAS", -"FEICAO", -"FEICOES", -"FEIJAO", -"FEIJOADA", -"FEIO", -"FEIOSO", -"FEIRA", -"FEIRANTE", -"FEITA", -"FEITAS", -"FEITICARIA", -"FEITICEIRA", -"FEITICEIRO", -"FEITICO", -"FEITIO", -"FEITO", -"FEITOR", -"FEITORIA", -"FEIURA", -"FEIXE", -"FEL", -"FELACAO", -"FELDSPATO", -"FELICIDADE", -"FELICITACAO", -"FELICITAR", -"FELIDEO", -"FELINO", -"FELIZ", -"FELIZARDO", -"FELIZMENTE", -"FELPUDO", -"FELTRO", -"FEMEA", -"FEMINILIDADE", -"FEMININO", -"FEMINISMO", -"FEMINISTA", -"FEMORAL", -"FEMUR", -"FENDA", -"FENDER", -"FENDIDO", -"FENECER", -"FENICIO", -"FENILALANINA", -"FENIX", -"FENO", -"FENOLFTALEINA", -"FENOMENAL", -"FENOMENO", -"FENOMENOLOGIA", -"FENOMENOLOGICO", -"FENOMENOS", -"FENOTIPICO", -"FENOTIPO", -"FERA", -"FERETRO", -"FERIA", -"FERIADAO", -"FERIADO", -"FERIAS", -"FERIDA", -"FERIDO", -"FERIMENTO", -"FERINO", -"FERIR", -"FERMENTACAO", -"FERMENTAR", -"FERMENTO", -"FERMI", -"FERMIO", -"FEROCIDADE", -"FEROMONIO", -"FEROZ", -"FERRADO", -"FERRADURA", -"FERRAGEM", -"FERRAMENTA", -"FERRAMENTARIA", -"FERRAMENTEIRO", -"FERRAO", -"FERRAR", -"FERREA", -"FERREIRO", -"FERRENHO", -"FERREO", -"FERRICO", -"FERRO", -"FERROADA", -"FERROAR", -"FERROLHO", -"FERROMAGNETICO", -"FERROMAGNETISMO", -"FERROS", -"FERROSO", -"FERROVIA", -"FERROVIARIA", -"FERROVIARIO", -"FERRUGEM", -"FERRY", -"FERTIL", -"FERTILIDADE", -"FERTILIZACAO", -"FERTILIZANTE", -"FERTILIZAR", -"FERVENTAR", -"FERVENTE", -"FERVER", -"FERVILHAMENTO", -"FERVILHAR", -"FERVOR", -"FERVOROSO", -"FERVURA", -"FESTA", -"FESTANCA", -"FESTAS", -"FESTEIRO", -"FESTEJAR", -"FESTEJO", -"FESTIM", -"FESTIVA", -"FESTIVAL", -"FESTIVAMENTE", -"FESTIVIDADE", -"FESTIVO", -"FETAL", -"FETICHE", -"FETICHISMO", -"FETIDO", -"FETO", -"FEUDAL", -"FEUDALISMO", -"FEUDO", -"FEVEREIRO", -"FEZES", -"FEZINHA", -"FI", -"FIA", -"FIACAO", -"FIADA", -"FIADO", -"FIADOR", -"FIAMBRE", -"FIANCA", -"FIAPO", -"FIAR", -"FIASCO", -"FIBRA", -"FICAM", -"FICAR", -"FICARIAM", -"FICCAO", -"FICCIONAL", -"FICHA", -"FICHADO", -"FICHAR", -"FICHARIO", -"FICO", -"FICTICIO", -"FIDALGO", -"FIDALGUIA", -"FIDEDIGNO", -"FIDELIDADE", -"FIDUCIARIO", -"FIEL", -"FIESP", -"FIFA", -"FIGA", -"FIGADAL", -"FIGADO", -"FIGO", -"FIGUEIRA", -"FIGURA", -"FIGURACAO", -"FIGURADA", -"FIGURADO", -"FIGURANTE", -"FIGURAO", -"FIGURAR", -"FIGURAS", -"FIGURATIVO", -"FIGURINHA", -"FIGURINISTA", -"FIGURINO", -"FIJIANO", -"FILA", -"FILAMENTO", -"FILANTROPIA", -"FILANTROPICO", -"FILANTROPO", -"FILAO", -"FILAR", -"FILARMONICA", -"FILARMONICO", -"FILATELIA", -"FILATELICO", -"FILATELISTA", -"FILE", -"FILEIRA", -"FILEIRAS", -"FILHA", -"FILHARADA", -"FILHINHO", -"FILHO", -"FILHOTE", -"FILIACAO", -"FILIAL", -"FILIAR", -"FILIGRANA", -"FILIPINO", -"FILISTEU", -"FILMADORA", -"FILMAGEM", -"FILMAR", -"FILME", -"FILMES", -"FILMICO", -"FILMOGRAFIA", -"FILMOGRAFICO", -"FILMOTECA", -"FILO", -"FILOLOGIA", -"FILOLOGICO", -"FILOLOGO", -"FILOSOFAL", -"FILOSOFAR", -"FILOSOFIA", -"FILOSOFICAS", -"FILOSOFICO", -"FILOSOFO", -"FILTRACAO", -"FILTRADO", -"FILTRAGEM", -"FILTRANTE", -"FILTRAR", -"FILTRAVEL", -"FILTRO", -"FIM", -"FINA", -"FINADO", -"FINADOS", -"FINAL", -"FINALIDADE", -"FINALISSIMA", -"FINALISTA", -"FINALIZACAO", -"FINALIZAR", -"FINALMENTE", -"FINANCAS", -"FINANCEIRA", -"FINANCEIRAS", -"FINANCEIRO", -"FINANCIAMENTO", -"FINANCIAR", -"FINANCISTA", -"FINAR", -"FINCAR", -"FINDAR", -"FINEZA", -"FINGIDO", -"FINGIMENTO", -"FINGIR", -"FININHO", -"FINITO", -"FINLANDES", -"FINO", -"FINORIO", -"FINURA", -"FIO", -"FIORDE", -"FIPE", -"FIQUEI", -"FIRMA", -"FIRMAR", -"FIRME", -"FIRMEZA", -"FIRULA", -"FISCAL", -"FISCALIZACAO", -"FISCALIZAR", -"FISCO", -"FISGADA", -"FISGAR", -"FISICA", -"FISICAS", -"FISICO", -"FISICOS", -"FISIOCRACIA", -"FISIOCRATA", -"FISIOCRATICO", -"FISIOLOGIA", -"FISIOLOGICO", -"FISIOLOGISTA", -"FISIOLOGO", -"FISIONOMIA", -"FISIONOMICO", -"FISIOTERAPEUTA", -"FISIOTERAPIA", -"FISIOTERAPICO", -"FISSAO", -"FISSIONAR", -"FISSURA", -"FISSURADO", -"FISSURAR", -"FITA", -"FITAR", -"FITOPLANCTON", -"FITOTECA", -"FIVELA", -"FIXA", -"FIXACAO", -"FIXADO", -"FIXADOR", -"FIXAR", -"FIXO", -"FIZ", -"FL", -"FLA", -"FLACIDEZ", -"FLACIDO", -"FLAGELACAO", -"FLAGELADO", -"FLAGELADOS", -"FLAGELAR", -"FLAGELO", -"FLAGRA", -"FLAGRANTE", -"FLAGRAR", -"FLAMA", -"FLAMBAR", -"FLAMEJANTE", -"FLAMEJAR", -"FLAMENGO", -"FLAMENGUISTA", -"FLAMINGO", -"FLAMULA", -"FLANCO", -"FLANELA", -"FLANQUEAR", -"FLAP", -"FLASH", -"FLATULENCIA", -"FLAUTA", -"FLAUTIM", -"FLAUTISTA", -"FLEBITE", -"FLECHA", -"FLECHADA", -"FLECHAR", -"FLERTAR", -"FLERTE", -"FLEUMA", -"FLEUMATICO", -"FLEXAO", -"FLEXIBILIDADE", -"FLEXIONADO", -"FLEXIONAL", -"FLEXIONAMENTO", -"FLEXIONAR", -"FLEXIONAVEL", -"FLEXIVEL", -"FLEXIVO", -"FLEXOR", -"FLIBUSTEIRO", -"FLOCO", -"FLOGISTICO", -"FLOGISTO", -"FLOR", -"FLORA", -"FLORADA", -"FLORAL", -"FLORAO", -"FLOREADO", -"FLOREIO", -"FLORENTINO", -"FLORESCENCIA", -"FLORESCER", -"FLORESTA", -"FLORESTAL", -"FLORETE", -"FLORICULTOR", -"FLORICULTURA", -"FLORIDO", -"FLORIM", -"FLORIR", -"FLORISTA", -"FLOTILHA", -"FLUENCIA", -"FLUENTE", -"FLUIDEZ", -"FLUIDO", -"FLUIR", -"FLUMINENSE", -"FLUOR", -"FLUORESCENCIA", -"FLUORESCENTE", -"FLUORESCER", -"FLUORETO", -"FLUORIDRICO", -"FLUSH", -"FLUTE", -"FLUTUACAO", -"FLUTUADOR", -"FLUTUANTE", -"FLUTUAR", -"FLUVIAL", -"FLUXO", -"FLUXOGRAMA", -"FO", -"FOBIA", -"FOBIAS", -"FOBOS", -"FOCA", -"FOCAL", -"FOCALIZACAO", -"FOCALIZAR", -"FOCINHEIRA", -"FOCINHO", -"FOCO", -"FOFO", -"FOFOCA", -"FOFOCAR", -"FOFOQUEIRO", -"FOFURA", -"FOG", -"FOGACA", -"FOGAO", -"FOGAREIRO", -"FOGAREU", -"FOGE", -"FOGO", -"FOGOS", -"FOGOSIDADE", -"FOGOSO", -"FOGUEIRA", -"FOGUETE", -"FOGUETEIRO", -"FOGUETORIO", -"FOGUISTA", -"FOI", -"FOICE", -"FOIE", -"FOLCLORE", -"FOLCLORICA", -"FOLCLORICO", -"FOLCLORISTA", -"FOLE", -"FOLEGO", -"FOLES", -"FOLGA", -"FOLGADO", -"FOLGAR", -"FOLGAZAO", -"FOLGUEDO", -"FOLHA", -"FOLHAGEM", -"FOLHEAR", -"FOLHETIM", -"FOLHETINESCO", -"FOLHETO", -"FOLHINHA", -"FOLIA", -"FOLIAO", -"FOLICO", -"FOLICULO", -"FOME", -"FOMENTAR", -"FOMENTO", -"FOMINHA", -"FONACAO", -"FONADO", -"FONADOR", -"FONDUE", -"FONE", -"FONEMA", -"FONEMICO", -"FONETICA", -"FONETICO", -"FONFOM", -"FONOAUDIOLOGIA", -"FONOAUDIOLOGICO", -"FONOAUDIOLOGO", -"FONOGRAFICO", -"FONOGRAFO", -"FONOLOGIA", -"FONOLOGICO", -"FONOLOGO", -"FONOTECA", -"FONTE", -"FOR", -"FORA", -"FORAGIDO", -"FORAM", -"FORASTEIRO", -"FORCA", -"FORCADO", -"FORCAR", -"FORCAS", -"FORCEPS", -"FOREHAND", -"FORENSE", -"FORJA", -"FORJADO", -"FORJAR", -"FORMA", -"FORMACAO", -"FORMADO", -"FORMAL", -"FORMALDEIDO", -"FORMALIDADE", -"FORMALISMO", -"FORMALISTA", -"FORMALIZAR", -"FORMAO", -"FORMAR", -"FORMAS", -"FORMATACAO", -"FORMATAR", -"FORMATO", -"FORMATURA", -"FORMICA", -"FORMIDAVEL", -"FORMIGA", -"FORMIGAMENTO", -"FORMIGAR", -"FORMIGUEIRO", -"FORMOL", -"FORMOSO", -"FORMOSURA", -"FORMOU", -"FORMULA", -"FORMULACAO", -"FORMULAR", -"FORMULARIO", -"FORNADA", -"FORNALHA", -"FORNECEDOR", -"FORNECER", -"FORNECIMENTO", -"FORNICACAO", -"FORNICAR", -"FORNIDO", -"FORNO", -"FORO", -"FORQUILHA", -"FORRA", -"FORRACAO", -"FORRAGEM", -"FORRAMENTO", -"FORRAR", -"FORRO", -"FORROBODO", -"FORTALECER", -"FORTALECIMENTO", -"FORTALEZA", -"FORTE", -"FORTIFICACAO", -"FORTIFICADO", -"FORTIFICANTE", -"FORTIFICAR", -"FORTITUDE", -"FORTRAN", -"FORTUITAMENTE", -"FORTUITO", -"FORTUNA", -"FORUM", -"FOSCO", -"FOSFATO", -"FOSFORICO", -"FOSFORO", -"FOSSA", -"FOSSIL", -"FOSSILIZACAO", -"FOSSILIZADO", -"FOSSILIZAR", -"FOSSO", -"FOTELETRICA", -"FOTO", -"FOTOCOMPOSICAO", -"FOTOCOMPOSITORA", -"FOTOCOPIA", -"FOTOCOPIADORA", -"FOTOCOPIAR", -"FOTOELETRICIDADE", -"FOTOELETRICO", -"FOTOGENICO", -"FOTOGRAFAR", -"FOTOGRAFIA", -"FOTOGRAFICA", -"FOTOGRAFICO", -"FOTOGRAFO", -"FOTOJORNALISMO", -"FOTOLITO", -"FOTON", -"FOTONOVELA", -"FOTOSSINTESE", -"FOXTROTE", -"FOZ", -"FR", -"FRACA", -"FRACAO", -"FRACASSAR", -"FRACASSO", -"FRACIONAMENTO", -"FRACIONAR", -"FRACIONARIO", -"FRACO", -"FRACOTE", -"FRACTAL", -"FRADE", -"FRAGATA", -"FRAGIL", -"FRAGILIDADE", -"FRAGMENTACAO", -"FRAGMENTADO", -"FRAGMENTAR", -"FRAGMENTARIO", -"FRAGMENTO", -"FRAGOR", -"FRAGOROSO", -"FRAGRANCIA", -"FRAGRANTE", -"FRALDA", -"FRAMBOESA", -"FRANCA", -"FRANCES", -"FRANCESISMO", -"FRANCIO", -"FRANCISCANO", -"FRANCO", -"FRANCOFILIA", -"FRANCOFILO", -"FRANCOFONIA", -"FRANCOFONO", -"FRANGALHO", -"FRANGO", -"FRANGUEIRO", -"FRANJA", -"FRANQUEADO", -"FRANQUEAMENTO", -"FRANQUEAR", -"FRANQUEZA", -"FRANQUIA", -"FRANQUISMO", -"FRANQUISTA", -"FRANZIDO", -"FRANZINO", -"FRANZIR", -"FRAPPE", -"FRAQUE", -"FRAQUEJAR", -"FRAQUEZA", -"FRASAL", -"FRASCO", -"FRASE", -"FRASEADO", -"FRASEOLOGIA", -"FRASEOLOGICO", -"FRASQUEIRA", -"FRATERNAL", -"FRATERNIDADE", -"FRATERNIZACAO", -"FRATERNIZAR", -"FRATERNO", -"FRATRICIDA", -"FRATRICIDIO", -"FRATURA", -"FRATURAR", -"FRAUDADOR", -"FRAUDAR", -"FRAUDE", -"FRAUDULENCIA", -"FRAUDULENTO", -"FREADA", -"FREAR", -"FREELANCE", -"FREELANCER", -"FREEWARE", -"FREEZER", -"FREGUES", -"FREGUESIA", -"FREI", -"FREIO", -"FREIRA", -"FREIRE", -"FRENESI", -"FRENETICO", -"FRENTE", -"FRENTISTA", -"FREON", -"FREQUENCIA", -"FREQUENTACAO", -"FREQUENTAR", -"FREQUENTE", -"FREQUENTEMENTE", -"FREQUENTES", -"FRESA", -"FRESAGEM", -"FRESAR", -"FRESCO", -"FRESCOBOL", -"FRESCOR", -"FRESCURA", -"FRESTA", -"FRETADO", -"FRETAR", -"FRETE", -"FREUDIANO", -"FREVO", -"FRIA", -"FRIAGEM", -"FRICASSE", -"FRICATIVA", -"FRICATIVO", -"FRICCAO", -"FRICOTE", -"FRIEIRA", -"FRIEZA", -"FRIGIDEIRA", -"FRIGIDEZ", -"FRIGIDO", -"FRIGIR", -"FRIGOBAR", -"FRIGORIFICA", -"FRIGORIFICO", -"FRIO", -"FRIORENTO", -"FRIOS", -"FRISA", -"FRISADO", -"FRISAR", -"FRISSON", -"FRITADA", -"FRITAR", -"FRITO", -"FRITURA", -"FRIVOLIDADE", -"FRIVOLO", -"FRONDE", -"FRONDOSO", -"FRONHA", -"FRONT", -"FRONTAL", -"FRONTAO", -"FRONTE", -"FRONTEIRA", -"FRONTEIRICO", -"FRONTISPICIO", -"FROTA", -"FROUXIDAO", -"FROUXO", -"FRUFRU", -"FRUGAL", -"FRUGALIDADE", -"FRUICAO", -"FRUIR", -"FRUSTRACAO", -"FRUSTRADO", -"FRUSTRANTE", -"FRUSTRAR", -"FRUTA", -"FRUTARIANISMO", -"FRUTAS", -"FRUTEIRA", -"FRUTICULTOR", -"FRUTICULTURA", -"FRUTIDOR", -"FRUTIFERO", -"FRUTIFICACAO", -"FRUTIFICAR", -"FRUTO", -"FRUTOS", -"FRUTOSE", -"FU", -"FUBA", -"FUCA", -"FUCAR", -"FUCAS", -"FUCSIA", -"FUGA", -"FUGACIDADE", -"FUGAZ", -"FUGIDO", -"FUGIR", -"FUGITIVO", -"FUINHA", -"FUJAO", -"FULANO", -"FULEIRO", -"FULGENTE", -"FULGIDO", -"FULGOR", -"FULGURANTE", -"FULGURAR", -"FULGUROSO", -"FULIGEM", -"FULIGINOSO", -"FULMINACAO", -"FULMINADO", -"FULMINANTE", -"FULMINAR", -"FULO", -"FULUSTRECO", -"FUMACA", -"FUMANTE", -"FUMAR", -"FUMAROLA", -"FUME", -"FUMEGANTE", -"FUMEIRO", -"FUMINHO", -"FUMO", -"FUNAMBULO", -"FUNCAO", -"FUNCIONAL", -"FUNCIONALIDADE", -"FUNCIONALISMO", -"FUNCIONAMENTO", -"FUNCIONANDO", -"FUNCIONAR", -"FUNCIONARIO", -"FUNDA", -"FUNDACAO", -"FUNDADA", -"FUNDADO", -"FUNDADOR", -"FUNDAMENTADO", -"FUNDAMENTAL", -"FUNDAMENTALMENTE", -"FUNDAMENTAR", -"FUNDAMENTO", -"FUNDAO", -"FUNDAR", -"FUNDEADO", -"FUNDEAR", -"FUNDIARIO", -"FUNDICAO", -"FUNDIDO", -"FUNDIDOR", -"FUNDILHOS", -"FUNDIR", -"FUNDISTA", -"FUNDO", -"FUNEBRE", -"FUNEBRES", -"FUNERAIS", -"FUNERAL", -"FUNERARIA", -"FUNERARIO", -"FUNESTO", -"FUNGADA", -"FUNGAR", -"FUNGICIDA", -"FUNGO", -"FUNIL", -"FUNILARIA", -"FUNILEIRO", -"FURACAO", -"FURADA", -"FURADEIRA", -"FURADO", -"FURAR", -"FURGAO", -"FURIA", -"FURIAS", -"FURIOSO", -"FURO", -"FUROR", -"FURTAR", -"FURTIVO", -"FURTO", -"FURUNCULO", -"FUSA", -"FUSAO", -"FUSCA", -"FUSCAO", -"FUSCO", -"FUSELAGEM", -"FUSO", -"FUSQUINHA", -"FUSTIGAR", -"FUTEBOL", -"FUTEBOLISTA", -"FUTEBOLISTICO", -"FUTIL", -"FUTILIDADE", -"FUTURAMENTE", -"FUTURISMO", -"FUTURISTA", -"FUTURISTICO", -"FUTURO", -"FUTUROLOGIA", -"FUTUROLOGICO", -"FUTUROLOGISTA", -"FUTUROLOGO", -"FUXICAR", -"FUXICO", -"FUZIL", -"FUZILADA", -"FUZILADO", -"FUZILAMENTO", -"FUZILAR", -"FUZILEIRO", -"FUZUE", -"G", -"GA", -"GABAR", -"GABARDINE", -"GABARITADO", -"GABARITO", -"GABINETE", -"GABIRU", -"GABONES", -"GADO", -"GAELICO", -"GAFANHOTO", -"GAFE", -"GAFIEIRA", -"GAG", -"GAGA", -"GAGO", -"GAGUEIRA", -"GAGUEJAR", -"GAGUEJO", -"GAIATO", -"GAIJIN", -"GAIOLA", -"GAITA", -"GAITEIRO", -"GAIVOTA", -"GAJO", -"GALA", -"GALALAU", -"GALANTE", -"GALANTEADOR", -"GALANTEAR", -"GALANTEIO", -"GALAO", -"GALARDAO", -"GALAXIA", -"GALAXIAS", -"GALE", -"GALEAO", -"GALEGO", -"GALERA", -"GALERIA", -"GALETO", -"GALGAR", -"GALGO", -"GALHADA", -"GALHARDIA", -"GALHO", -"GALHOFA", -"GALHOFEIRO", -"GALICISMO", -"GALICO", -"GALIMIMO", -"GALINACEO", -"GALINHA", -"GALINHAGEM", -"GALINHAR", -"GALINHAS", -"GALINHEIRO", -"GALIO", -"GALO", -"GALOCHA", -"GALOPADA", -"GALOPANTE", -"GALOPAR", -"GALOPE", -"GALPAO", -"GALVANICO", -"GALVANISMO", -"GALVANIZACAO", -"GALVANIZAR", -"GALVANOMETRIA", -"GALVANOMETRO", -"GALVANOPLASTIA", -"GALVANOPLASTICO", -"GAMA", -"GAMADO", -"GAMAO", -"GAMAR", -"GAMBA", -"GAMBITO", -"GAME", -"GAMELA", -"GAMETA", -"GAMO", -"GANA", -"GANANCIA", -"GANANCIOSO", -"GANCHO", -"GANDAIA", -"GANDAIAR", -"GANDULA", -"GANGLIO", -"GANGLIOMA", -"GANGLIONAR", -"GANGORRA", -"GANGRENA", -"GANGRENAR", -"GANGSTER", -"GANGSTERISMO", -"GANHADOR", -"GANHAR", -"GANHO", -"GANIMEDES", -"GANSO", -"GARAGEM", -"GARAGISTA", -"GARANHAO", -"GARANTIA", -"GARANTIR", -"GARAPA", -"GARATUJA", -"GARATUJAR", -"GARBO", -"GARBOSO", -"GARCA", -"GARCOM", -"GARCONETE", -"GARDENIA", -"GARFADA", -"GARFAR", -"GARFO", -"GARGALHADA", -"GARGALHAR", -"GARGALO", -"GARGANTA", -"GARGANTILHA", -"GARGAREJAR", -"GARGAREJO", -"GARI", -"GARIMPAR", -"GARIMPEIRO", -"GARIMPO", -"GAROA", -"GAROAR", -"GAROTA", -"GAROTADA", -"GAROTAO", -"GAROTO", -"GAROUPA", -"GARRA", -"GARRAFA", -"GARRAFADA", -"GARRAFAO", -"GARRAFEIRO", -"GARRANCHO", -"GARRIDO", -"GARROTE", -"GARRUCHA", -"GAS", -"GASEIFICACAO", -"GASEIFICAR", -"GASODUTO", -"GASOGENIO", -"GASOLINA", -"GASOSO", -"GASPACHO", -"GASTAO", -"GASTAR", -"GASTO", -"GASTRENTERITE", -"GASTRENTEROLOGIA", -"GASTRENTEROLOGISTA", -"GASTRICO", -"GASTRONOMIA", -"GASTRONOMICO", -"GASTRONOMO", -"GATA", -"GATILHO", -"GATO", -"GATUNAGEM", -"GATUNAR", -"GATUNICE", -"GATUNO", -"GAUCHO", -"GAULES", -"GAUSS", -"GAUSSIANO", -"GAVETA", -"GAVIAO", -"GAXETA", -"GAZE", -"GAZELA", -"GAZETA", -"GAZETEAR", -"GAZETEIRO", -"GE", -"GEADA", -"GEAR", -"GEISER", -"GEL", -"GELADEIRA", -"GELADINHA", -"GELADO", -"GELAR", -"GELATINA", -"GELATINOSO", -"GELEIA", -"GELEIRA", -"GELIDO", -"GELO", -"GEMA", -"GEMADA", -"GEMEO", -"GEMEOS", -"GEMER", -"GEMIDO", -"GEMINADO", -"GEMINAR", -"GEMINIANO", -"GENCIANA", -"GENDARME", -"GENE", -"GENEALOGIA", -"GENEALOGICA", -"GENEALOGICO", -"GENERAL", -"GENERALATO", -"GENERALIDADE", -"GENERALIDADES", -"GENERALISSIMO", -"GENERALISTA", -"GENERALIZACAO", -"GENERALIZADO", -"GENERALIZAR", -"GENERATOR", -"GENERICO", -"GENERO", -"GENEROS", -"GENEROSIDADE", -"GENEROSO", -"GENESE", -"GENETICA", -"GENETICISTA", -"GENETICO", -"GENGIBRE", -"GENGIVA", -"GENGIVAL", -"GENGIVITE", -"GENIAL", -"GENIALIDADE", -"GENIO", -"GENIOSO", -"GENITAL", -"GENITALIA", -"GENITIVO", -"GENITOR", -"GENOCIDIO", -"GENOMA", -"GENOTIPO", -"GENOVES", -"GENRO", -"GENTALHA", -"GENTARADA", -"GENTE", -"GENTIL", -"GENTILEZA", -"GENTILICO", -"GENTINHA", -"GENTIO", -"GENTLEMAN", -"GENUINO", -"GEOCENTRICAS", -"GEOCENTRICO", -"GEOCIENCIAS", -"GEODESICA", -"GEODESICO", -"GEOFISICA", -"GEOFISICO", -"GEOGRAFIA", -"GEOGRAFICO", -"GEOGRAFICOS", -"GEOGRAFO", -"GEOLOG", -"GEOLOGIA", -"GEOLOGICO", -"GEOLOGO", -"GEOMETRA", -"GEOMETRIA", -"GEOMETRICA", -"GEOMETRICO", -"GEOPOLITICA", -"GEOPOLITICO", -"GEORGIANO", -"GEOSSINCLINAL", -"GERACAO", -"GERADOR", -"GERAL", -"GERALMENTE", -"GERANIO", -"GERAR", -"GERATIVA", -"GERATIVO", -"GERATRIZ", -"GERENCIA", -"GERENCIAL", -"GERENCIAMENTO", -"GERENCIAR", -"GERENTE", -"GERGELIM", -"GERIATRA", -"GERIATRIA", -"GERIATRICO", -"GERINGONCA", -"GERIR", -"GERMANICO", -"GERMANIO", -"GERMANISMO", -"GERMANISTA", -"GERME", -"GERMINACAO", -"GERMINAL", -"GERMINANTE", -"GERMINAR", -"GERONTOCRACIA", -"GERONTOLOGIA", -"GERONTOLOGICO", -"GERONTOLOGISTA", -"GERONTOLOGO", -"GERUNDIO", -"GESSO", -"GESTACAO", -"GESTALT", -"GESTALTISMO", -"GESTANTE", -"GESTAO", -"GESTAPO", -"GESTICULACAO", -"GESTICULADO", -"GESTICULAR", -"GESTO", -"GESTUAL", -"GETULISMO", -"GETULISTA", -"GI", -"GIBAO", -"GIBI", -"GIGABYTE", -"GIGANTE", -"GIGANTESCO", -"GIGANTISMO", -"GIGOLO", -"GILETE", -"GIM", -"GIMNOSPERMA", -"GINASIAL", -"GINASIANO", -"GINASIO", -"GINASTA", -"GINASTICA", -"GINCANA", -"GINECEU", -"GINECOLOGIA", -"GINECOLOGICO", -"GINECOLOGISTA", -"GINETE", -"GINSENG", -"GIRA", -"GIRAFA", -"GIRAR", -"GIRASSOL", -"GIRATORIO", -"GIRIA", -"GIRINO", -"GIRL", -"GIRO", -"GIRONDINO", -"GIROSCOPIO", -"GIZ", -"GL", -"GLACE", -"GLACIACAO", -"GLACIAL", -"GLACIARIO", -"GLADIADOR", -"GLADIO", -"GLAGOLITICO", -"GLAMOUR", -"GLAMOUROSO", -"GLANDE", -"GLANDULA", -"GLANDULAR", -"GLASNOST", -"GLAUCOMA", -"GLEBA", -"GLICEMIA", -"GLICEMICO", -"GLICERINA", -"GLICEROL", -"GLICIDIO", -"GLICOGENIO", -"GLICOL", -"GLICOSE", -"GLIDE", -"GLIFO", -"GLOBAL", -"GLOBALIZACAO", -"GLOBALIZAR", -"GLOBO", -"GLOBULAR", -"GLOBULINA", -"GLOBULO", -"GLOMERULO", -"GLORIA", -"GLORIAS", -"GLORIFICACAO", -"GLORIFICAR", -"GLORIOSO", -"GLOSSARIO", -"GLOSSOLALIA", -"GLOTAL", -"GLOTE", -"GLUCOSE", -"GLUGLU", -"GLUON", -"GLUTAMATO", -"GLUTAO", -"GLUTEN", -"GLUTEO", -"GLUTONIA", -"GN", -"GNOMO", -"GNOSE", -"GNOSTICISMO", -"GNOSTICO", -"GNU", -"GO", -"GOELA", -"GOGO", -"GOI", -"GOIABA", -"GOIABADA", -"GOIABEIRA", -"GOIANO", -"GOITACA", -"GOL", -"GOLA", -"GOLACO", -"GOLE", -"GOLEADA", -"GOLEADOR", -"GOLEAR", -"GOLEIRO", -"GOLFADA", -"GOLFAR", -"GOLFE", -"GOLFINHO", -"GOLFISTA", -"GOLFO", -"GOLPE", -"GOLPEADO", -"GOLPEAR", -"GOLPISMO", -"GOLPISTA", -"GOMA", -"GOMALINA", -"GOMO", -"GONADA", -"GONDOLA", -"GONDOLEIRO", -"GONDUANA", -"GONGO", -"GONORREIA", -"GONZO", -"GORAR", -"GORDA", -"GORDIO", -"GORDO", -"GORDUCHO", -"GORDURA", -"GORDUROSO", -"GORGONA", -"GORGONE", -"GORGONZOLA", -"GORGULHO", -"GORILA", -"GORJEAR", -"GORJEIO", -"GORJETA", -"GOROROBA", -"GORRO", -"GOSMA", -"GOSMENTO", -"GOSPEL", -"GOSTAR", -"GOSTARIAM", -"GOSTO", -"GOSTOSAO", -"GOSTOSO", -"GOSTOSONA", -"GOSTOSURA", -"GOSTOU", -"GOTA", -"GOTEIRA", -"GOTEJAMENTO", -"GOTEJANTE", -"GOTEJAR", -"GOTICA", -"GOTICO", -"GOTICULA", -"GOUDA", -"GOURMET", -"GOVERNABILIDADE", -"GOVERNADO", -"GOVERNADOR", -"GOVERNADORA", -"GOVERNAMENTAL", -"GOVERNANTA", -"GOVERNANTE", -"GOVERNAR", -"GOVERNAVEL", -"GOVERNISTA", -"GOVERNO", -"GOZACAO", -"GOZADO", -"GOZADOR", -"GOZAR", -"GOZO", -"GR", -"GRAAL", -"GRACA", -"GRACAS", -"GRACEJADOR", -"GRACEJAR", -"GRACEJO", -"GRACINHA", -"GRACIOSIDADE", -"GRACIOSO", -"GRADACAO", -"GRADATIVO", -"GRADE", -"GRADEADA", -"GRADEAR", -"GRADES", -"GRADIENTE", -"GRADIL", -"GRADUACAO", -"GRADUADO", -"GRADUAL", -"GRADUANDO", -"GRADUAR", -"GRAFAR", -"GRAFEMA", -"GRAFIA", -"GRAFICA", -"GRAFICAS", -"GRAFICO", -"GRAFISMO", -"GRAFITAR", -"GRAFITE", -"GRAFOLOGIA", -"GRAFOLOGICO", -"GRAFOLOGO", -"GRALHA", -"GRALHAR", -"GRAMA", -"GRAMADO", -"GRAMAR", -"GRAMATICA", -"GRAMATICAL", -"GRAMATICO", -"GRAMINEAS", -"GRAMINEO", -"GRAMOFONE", -"GRANA", -"GRANADA", -"GRANADINO", -"GRANDALHAO", -"GRANDE", -"GRANDES", -"GRANDEZA", -"GRANDILOQUENCIA", -"GRANDILOQUENTE", -"GRANDIOSIDADE", -"GRANDIOSO", -"GRANEL", -"GRANITICO", -"GRANITO", -"GRANIZO", -"GRANULADO", -"GRANULOSO", -"GRAO", -"GRAS", -"GRASNADO", -"GRASNAR", -"GRASSAR", -"GRATIDAO", -"GRATIFICACAO", -"GRATIFICANTE", -"GRATIFICAR", -"GRATINAR", -"GRATIS", -"GRATO", -"GRATUITO", -"GRAU", -"GRAVACAO", -"GRAVADO", -"GRAVADOR", -"GRAVAR", -"GRAVATA", -"GRAVE", -"GRAVETO", -"GRAVIDA", -"GRAVIDADE", -"GRAVIDEZ", -"GRAVITACAO", -"GRAVITACIONAL", -"GRAVITAR", -"GRAVURA", -"GRAXA", -"GRAXO", -"GREENWICH", -"GREGA", -"GREGARIO", -"GREGO", -"GREGORIANO", -"GREGOS", -"GRELHA", -"GRELHADO", -"GRELHAR", -"GREMIO", -"GREVE", -"GREVISTA", -"GRIFAR", -"GRIFO", -"GRILADO", -"GRILAGEM", -"GRILAR", -"GRILEIRO", -"GRILHAO", -"GRILO", -"GRINALDA", -"GRINGO", -"GRIPADO", -"GRIPAL", -"GRIPE", -"GRISALHO", -"GRITA", -"GRITANTE", -"GRITAR", -"GRITARIA", -"GRITO", -"GROENLANDES", -"GROGUE", -"GROSA", -"GROSELHA", -"GROSSA", -"GROSSEIRAO", -"GROSSEIRO", -"GROSSERIA", -"GROSSO", -"GROSSURA", -"GROTESCO", -"GRUA", -"GRUDADO", -"GRUDAR", -"GRUDE", -"GRUNHIDO", -"GRUNHIR", -"GRUPAL", -"GRUPO", -"GRUPOS", -"GRUTA", -"GU", -"GUACAMOLE", -"GUACHE", -"GUANABARINO", -"GUAPO", -"GUARA", -"GUARANA", -"GUARANI", -"GUARANIA", -"GUARDA", -"GUARDANAPO", -"GUARDAR", -"GUARDIAO", -"GUARITA", -"GUARNECER", -"GUARNICAO", -"GUATEMALTECO", -"GUAXINIM", -"GUDE", -"GUEDELHA", -"GUEI", -"GUEIXA", -"GUELRA", -"GUEPARDO", -"GUERRA", -"GUERREAR", -"GUERREIRO", -"GUERRILHA", -"GUERRILHEIRO", -"GUETO", -"GUIA", -"GUIADO", -"GUIAR", -"GUICHE", -"GUIDAO", -"GUIDOM", -"GUILDER", -"GUILHOTINA", -"GUILHOTINAR", -"GUINADA", -"GUINCHAR", -"GUINCHO", -"GUINDASTE", -"GUINEANO", -"GUINEU", -"GUIRLANDA", -"GUISADO", -"GUISAR", -"GUITARRA", -"GUITARRISTA", -"GUIZO", -"GULA", -"GULAG", -"GULODICE", -"GULOSEIMA", -"GULOSO", -"GUME", -"GURI", -"GURIZADA", -"GURU", -"GUSA", -"GUSTATIVO", -"GUTURAL", -"H", -"HA", -"HABANERA", -"HABIL", -"HABILIDADE", -"HABILIDOSO", -"HABILIS", -"HABILITACAO", -"HABILITADO", -"HABILITAR", -"HABITACAO", -"HABITACIONAL", -"HABITACULO", -"HABITADO", -"HABITANTE", -"HABITANTES", -"HABITAR", -"HABITAT", -"HABITAVEL", -"HABITO", -"HABITUADO", -"HABITUAL", -"HABITUAR", -"HABITUE", -"HACHURA", -"HACHURAR", -"HACKER", -"HADOQUE", -"HADRON", -"HAFNIO", -"HAIA", -"HAICAI", -"HAITIANO", -"HALITO", -"HALITOSE", -"HALL", -"HALLEY", -"HALO", -"HALTERE", -"HALTEROFILIA", -"HALTEROFILISMO", -"HALTEROFILISTA", -"HAMADRIADE", -"HAMBURGUER", -"HAND", -"HANDBALL", -"HANDEBOL", -"HANDICAP", -"HANGAR", -"HANSA", -"HANSEATICO", -"HANSENIANO", -"HANSENIASE", -"HAPLOIDE", -"HAPLOLOGIA", -"HAPPENING", -"HARAQUIRI", -"HARAS", -"HARDWARE", -"HAREM", -"HARMONIA", -"HARMONICA", -"HARMONICO", -"HARMONIOSO", -"HARMONIZACAO", -"HARMONIZAR", -"HARMONIZAVEL", -"HARPA", -"HARPIA", -"HARPISTA", -"HASTE", -"HASTEADO", -"HASTEAMENTO", -"HASTEAR", -"HAVAIANA", -"HAVAIANO", -"HAVANA", -"HAVER", -"HAVERES", -"HE", -"HEBDOMADARIO", -"HEBRAICO", -"HEBREU", -"HECATOMBE", -"HECTARE", -"HECTOGRAMA", -"HECTOLITRO", -"HECTOMETRO", -"HEDIONDO", -"HEDONICO", -"HEDONISMO", -"HEDONISTA", -"HEGELIANISMO", -"HEGELIANO", -"HEGEMONIA", -"HEGEMONICO", -"HEGIRA", -"HEIN", -"HELENICO", -"HELENISMO", -"HELENISTA", -"HELENISTICO", -"HELICE", -"HELICOIDAL", -"HELICOPTERO", -"HELIO", -"HELIOCENTRICO", -"HELIOCENTRISMO", -"HELMINTO", -"HEMACIA", -"HEMATITA", -"HEMATOMA", -"HEMEROTECA", -"HEMISFERICO", -"HEMISFERIO", -"HEMODIALISE", -"HEMOFILIA", -"HEMOFILICO", -"HEMOGLOBINA", -"HEMOGRAMA", -"HEMORRAGIA", -"HEMORRAGICO", -"HEMORROIDAS", -"HENRY", -"HEPATICO", -"HEPATITE", -"HEPTAEDRO", -"HEPTAGONAL", -"HEPTAGONO", -"HEPTAMETRO", -"HEPTASSILABICO", -"HEPTASSILABO", -"HERA", -"HERALDICA", -"HERALDICO", -"HERANCA", -"HERBACEO", -"HERBICIDA", -"HERBIVORO", -"HERCULEO", -"HERDAR", -"HERDEIRO", -"HEREDITARIA", -"HEREDITARIEDADE", -"HEREDITARIO", -"HEREGE", -"HERESIA", -"HERETICO", -"HERMAFRODITA", -"HERMAFRODITISMO", -"HERMENEUTA", -"HERMENEUTICA", -"HERMETICO", -"HERMETISMO", -"HERNIA", -"HEROI", -"HEROICO", -"HEROINA", -"HEROISMO", -"HERPES", -"HERTZ", -"HERTZIANO", -"HESITACAO", -"HESITANTE", -"HESITAR", -"HETERODOXO", -"HETEROGENEIDADE", -"HETEROGENEO", -"HETEROSSEXUAL", -"HEURISTICA", -"HEURISTICO", -"HEXADECIMAL", -"HEXAEDRO", -"HEXAGONAL", -"HEXAGONO", -"HI", -"HIATO", -"HIBERNACAO", -"HIBERNAR", -"HIBISCO", -"HIBRIDISMO", -"HIBRIDO", -"HIDRA", -"HIDRAMATICO", -"HIDRANTE", -"HIDRARGIRICO", -"HIDRARGIRIO", -"HIDRATACAO", -"HIDRATADO", -"HIDRATANTE", -"HIDRATAR", -"HIDRAULICA", -"HIDRAULICO", -"HIDRAVIAO", -"HIDRELETRICA", -"HIDRELETRICO", -"HIDROAVIAO", -"HIDROCARBONETO", -"HIDROCEFALIA", -"HIDROCEFALICO", -"HIDRODINAMICA", -"HIDRODINAMICO", -"HIDROELETRICA", -"HIDROELETRICO", -"HIDROFILO", -"HIDROFOBIA", -"HIDROFOBICO", -"HIDROFOBO", -"HIDROGENACAO", -"HIDROGENADO", -"HIDROGENAR", -"HIDROGENIO", -"HIDROGRAFIA", -"HIDROGRAFICA", -"HIDROGRAFICO", -"HIDROMASSAGEM", -"HIDROMEL", -"HIDROPLANO", -"HIDROPONICO", -"HIDROSFERA", -"HIDROSTATICA", -"HIDROSTATICO", -"HIENA", -"HIERARQUIA", -"HIERARQUICO", -"HIERARQUIZAR", -"HIEROGLIFICO", -"HIEROGLIFO", -"HIFEN", -"HIFENIZACAO", -"HIFENIZAR", -"HIGIENE", -"HIGIENICO", -"HIGIENISTA", -"HIGIENIZAR", -"HILARIANTE", -"HILARIAR", -"HILARIO", -"HIMEN", -"HINARIO", -"HINDU", -"HINDUISMO", -"HINDUSTANI", -"HINO", -"HIPERBATO", -"HIPERBOLE", -"HIPERBOLICA", -"HIPERBOLICO", -"HIPERBOLOIDE", -"HIPERBOREO", -"HIPERESPACO", -"HIPERGLICEMIA", -"HIPERINFLACAO", -"HIPERMERCADO", -"HIPERMETROPE", -"HIPERMETROPIA", -"HIPERSENSIBILIDADE", -"HIPERSENSIVEL", -"HIPERTENSAO", -"HIPERTENSO", -"HIPERTIREOIDISMO", -"HIPERTROFIA", -"HIPERTROFIAR", -"HIPICO", -"HIPISMO", -"HIPNOSE", -"HIPNOTICO", -"HIPNOTISMO", -"HIPNOTIZAR", -"HIPOCAMPO", -"HIPOCONDRIA", -"HIPOCONDRIACO", -"HIPOCORISTICO", -"HIPOCRATICO", -"HIPOCRISIA", -"HIPOCRITA", -"HIPODERME", -"HIPODERMICA", -"HIPODERMICO", -"HIPODROMO", -"HIPOFISE", -"HIPOGLICEMIA", -"HIPOPOTAMO", -"HIPOTALAMO", -"HIPOTECA", -"HIPOTECAR", -"HIPOTENUSA", -"HIPOTERMIA", -"HIPOTESE", -"HIPOTETICO", -"HIPPIE", -"HIRAGANA", -"HIRSUTO", -"HISPANICO", -"HISTAMINA", -"HISTAMINICO", -"HISTERECTOMIA", -"HISTERIA", -"HISTERICO", -"HISTOGRAMA", -"HISTOLOGIA", -"HISTOLOGICO", -"HISTOLOGISTA", -"HISTORIA", -"HISTORIADOR", -"HISTORICA", -"HISTORICO", -"HISTORIOGRAFIA", -"HIT", -"HITITA", -"HITLERISMO", -"HITLERISTA", -"HIV", -"HO", -"HOBBY", -"HODOMETRO", -"HOJE", -"HOLANDES", -"HOLDING", -"HOLISMO", -"HOLLERITH", -"HOLMIO", -"HOLOCAUSTO", -"HOLOFOTE", -"HOLOGRAFIA", -"HOLOGRAFICO", -"HOLOGRAMA", -"HOMBRIDADE", -"HOMEM", -"HOMENAGEADO", -"HOMENAGEAR", -"HOMENAGEM", -"HOMENS", -"HOMENZARRAO", -"HOMEOPATA", -"HOMEOPATIA", -"HOMEOPATICO", -"HOMEOTERMICO", -"HOMEOTERMO", -"HOMEPAGE", -"HOMERICO", -"HOMESSA", -"HOMICIDA", -"HOMICIDIO", -"HOMILIA", -"HOMINIDEOS", -"HOMO", -"HOMOFOBIA", -"HOMOFOBICO", -"HOMOFOBO", -"HOMOFONO", -"HOMOGENEIDADE", -"HOMOGENEIZACAO", -"HOMOGENEIZADO", -"HOMOGENEIZAR", -"HOMOGENEO", -"HOMOGRAFO", -"HOMOLOGACAO", -"HOMOLOGAR", -"HOMOLOGO", -"HOMONIMIA", -"HOMONIMO", -"HOMOS", -"HOMOSSEXUAIS", -"HOMOSSEXUAL", -"HOMOSSEXUALIDADE", -"HOMOSSEXUALISMO", -"HOMUNCULO", -"HOMUS", -"HONDURENHO", -"HONESTIDADE", -"HONESTO", -"HONORARIO", -"HONORARIOS", -"HONORAVEL", -"HONORIFICO", -"HONORIS", -"HONRA", -"HONRADEZ", -"HONRADO", -"HONRAR", -"HONRARIA", -"HONRAS", -"HONROSO", -"HOPI", -"HOQUEI", -"HORA", -"HORARIA", -"HORARIO", -"HORAS", -"HORDA", -"HORISTA", -"HORIZONTAL", -"HORIZONTE", -"HORMONAL", -"HORMONIO", -"HOROSCOPISTA", -"HOROSCOPO", -"HORRENDO", -"HORRIBILIDADE", -"HORRIPILANTE", -"HORRIPILAR", -"HORRIVEL", -"HORROR", -"HORRORIZAR", -"HORROROSO", -"HORTA", -"HORTALICA", -"HORTELA", -"HORTICULTOR", -"HORTICULTURA", -"HORTIFRUTIGRANJEIRO", -"HORTO", -"HOSPEDAGEM", -"HOSPEDAR", -"HOSPEDARIA", -"HOSPEDE", -"HOSPEDEIRO", -"HOSPICIO", -"HOSPITAL", -"HOSPITALAR", -"HOSPITALEIRO", -"HOSPITALIDADE", -"HOSPITALIZACAO", -"HOSPITALIZAR", -"HOSTIA", -"HOSTIL", -"HOSTILIDADE", -"HOSTILIZAR", -"HOT", -"HOTEL", -"HOTELARIA", -"HOTELEIRO", -"HOTENTOTE", -"HU", -"HUGUENOTE", -"HUM", -"HUMANA", -"HUMANAS", -"HUMANIDADE", -"HUMANIDADES", -"HUMANISMO", -"HUMANISTA", -"HUMANISTICO", -"HUMANITARIO", -"HUMANIZACAO", -"HUMANIZADO", -"HUMANIZAR", -"HUMANO", -"HUMANOS", -"HUMILDADE", -"HUMILDE", -"HUMILHACAO", -"HUMILHADO", -"HUMILHANTE", -"HUMILHAR", -"HUMO", -"HUMOR", -"HUMORISMO", -"HUMORISTA", -"HUMORISTICO", -"HUMUS", -"HUNGARO", -"HUNO", -"HURI", -"HURONIANO", -"HURRA", -"HUSKY", -"HUTU", -"I", -"IA", -"IAIA", -"IALORIXA", -"IAMBICO", -"IANOMAMI", -"IANQUE", -"IANSA", -"IAQUE", -"IARA", -"IATAGA", -"IATE", -"IATISMO", -"IATISTA", -"IB", -"IBERICO", -"IBIS", -"IC", -"ICAMENTO", -"ICAR", -"ICEBERG", -"ICONE", -"ICONICIDADE", -"ICONICO", -"ICONOCLASTA", -"ICONOCLASTICO", -"ICONOGRAFIA", -"ICONOGRAFICO", -"ICOSAEDRO", -"ICOSAGONO", -"ICTERICIA", -"ICTIOLOGIA", -"ICTIOLOGICO", -"ICTIOLOGO", -"ICTIOSSAURO", -"ID", -"IDA", -"IDADE", -"IDEAL", -"IDEALISMO", -"IDEALISTA", -"IDEALIZACAO", -"IDEALIZAR", -"IDEALIZAVEL", -"IDEARIO", -"IDEIA", -"IDEM", -"IDENTICO", -"IDENTIDADE", -"IDENTIFICACAO", -"IDENTIFICADOR", -"IDENTIFICAR", -"IDEOGRAMA", -"IDEOLOGIA", -"IDEOLOGICO", -"IDEOLOGO", -"IDICHE", -"IDILICO", -"IDILIO", -"IDIOMA", -"IDIOMATICA", -"IDIOMATICO", -"IDIOMATISMO", -"IDIOSSINCRASIA", -"IDIOSSINCRATICO", -"IDIOTA", -"IDIOTIA", -"IDIOTICE", -"IDO", -"IDOLATRA", -"IDOLATRAR", -"IDOLATRIA", -"IDOLATRICO", -"IDOLO", -"IDONEIDADE", -"IDONEO", -"IDOS", -"IDOSO", -"IE", -"IEMANJA", -"IEMENITA", -"IEN", -"IENE", -"IG", -"IGAPO", -"IGARA", -"IGARAPE", -"IGLU", -"IGNARO", -"IGNEO", -"IGNICAO", -"IGNOBIL", -"IGNOMINIA", -"IGNORADO", -"IGNORANCIA", -"IGNORANTE", -"IGNORAR", -"IGREJA", -"IGUAL", -"IGUALAR", -"IGUALAVEL", -"IGUALDADE", -"IGUALITARIO", -"IGUALITARISMO", -"IGUALMENTE", -"IGUANA", -"IGUANODONTE", -"IGUARIA", -"IIDICHE", -"IL", -"ILACAO", -"ILATIVO", -"ILEGAL", -"ILEGALIDADE", -"ILEGITIMO", -"ILEGIVEL", -"ILESO", -"ILETRADO", -"ILHA", -"ILHAR", -"ILHARGA", -"ILIACO", -"ILIBADO", -"ILICITO", -"ILIMITADO", -"ILOGICO", -"ILOGISMO", -"ILUDIDO", -"ILUDIR", -"ILUMINACAO", -"ILUMINADO", -"ILUMINAR", -"ILUMINISMO", -"ILUMINISTA", -"ILUMINURA", -"ILUSAO", -"ILUSIONISMO", -"ILUSIONISTA", -"ILUSORIO", -"ILUSTRACAO", -"ILUSTRADO", -"ILUSTRADOR", -"ILUSTRAR", -"ILUSTRE", -"ILUSTRISSIMO", -"IM", -"IMA", -"IMACULADA", -"IMACULADO", -"IMAGEM", -"IMAGENS", -"IMAGINACAO", -"IMAGINACOES", -"IMAGINAR", -"IMAGINARIO", -"IMAGINATIVO", -"IMAGINAVEL", -"IMANENTE", -"IMANTACAO", -"IMANTAR", -"IMATERIAL", -"IMATURIDADE", -"IMATURO", -"IMBATIVEL", -"IMBECIL", -"IMBECILIDADE", -"IMBERBE", -"IMBRICACAO", -"IMBRICADO", -"IMBRICAR", -"IMBROGLIO", -"IMBU", -"IMBUIA", -"IMBUIR", -"IMBUZEIRO", -"IMEDIACOES", -"IMEDIATO", -"IMEMORAVEL", -"IMEMORIAL", -"IMENSIDADE", -"IMENSIDAO", -"IMENSO", -"IMENSURAVEL", -"IMERECIDO", -"IMERGIR", -"IMERSAO", -"IMERSO", -"IMIGRACAO", -"IMIGRADO", -"IMIGRANTE", -"IMIGRAR", -"IMIGRATORIO", -"IMINENCIA", -"IMINENTE", -"IMITACAO", -"IMITADOR", -"IMITAR", -"IMITATIVO", -"IMITAVEL", -"IML", -"IMOBILIARIA", -"IMOBILIARIO", -"IMOBILIDADE", -"IMOBILIZACAO", -"IMOBILIZADO", -"IMOBILIZAR", -"IMODESTIA", -"IMODESTO", -"IMOLACAO", -"IMOLAR", -"IMORAL", -"IMORALIDADE", -"IMORREDOURO", -"IMORTAIS", -"IMORTAL", -"IMORTALIDADE", -"IMORTALIZACAO", -"IMORTALIZAR", -"IMOVEL", -"IMPACIENCIA", -"IMPACIENTAR", -"IMPACIENTE", -"IMPACTO", -"IMPAGAVEL", -"IMPALA", -"IMPALPAVEL", -"IMPALUDISMO", -"IMPAR", -"IMPARCIAL", -"IMPARCIALIDADE", -"IMPASSE", -"IMPASSIBILIDADE", -"IMPASSIVEL", -"IMPAVIDO", -"IMPEACHMENT", -"IMPECAVEL", -"IMPECAVELMENTE", -"IMPEDANCIA", -"IMPEDIDO", -"IMPEDIMENTO", -"IMPEDIR", -"IMPELIR", -"IMPENETRABILIDADE", -"IMPENETRAVEL", -"IMPENHORAVEL", -"IMPENITENTE", -"IMPENSADO", -"IMPENSAVEL", -"IMPERADOR", -"IMPERAR", -"IMPERATIVO", -"IMPERATRIZ", -"IMPERCEBIDO", -"IMPERCEPTIVEL", -"IMPERDIVEL", -"IMPERDOAVEL", -"IMPERFECTIVO", -"IMPERFEICAO", -"IMPERFEITO", -"IMPERIAL", -"IMPERIALISMO", -"IMPERIALISTA", -"IMPERIO", -"IMPERIOSO", -"IMPERMEABILIDADE", -"IMPERMEABILIZACAO", -"IMPERMEABILIZADO", -"IMPERMEABILIZAR", -"IMPERMEAVEL", -"IMPERSCRUTAVEL", -"IMPERTINENCIA", -"IMPERTINENTE", -"IMPERTURBAVEL", -"IMPESSOAL", -"IMPETO", -"IMPETUOSIDADE", -"IMPETUOSO", -"IMPIEDOSO", -"IMPINGIR", -"IMPIO", -"IMPLACAVEL", -"IMPLANTACAO", -"IMPLANTAR", -"IMPLANTE", -"IMPLAUSIVEL", -"IMPLEMENTACAO", -"IMPLEMENTADO", -"IMPLEMENTAR", -"IMPLEMENTO", -"IMPLEMENTOS", -"IMPLICACAO", -"IMPLICANCIA", -"IMPLICANTE", -"IMPLICAR", -"IMPLICITO", -"IMPLODIR", -"IMPLORANTE", -"IMPLORAR", -"IMPLOSAO", -"IMPLUME", -"IMPOLIDEZ", -"IMPOLIDO", -"IMPONDERABILIDADE", -"IMPONDERADO", -"IMPONDERAVEL", -"IMPONENCIA", -"IMPONENTE", -"IMPOPULAR", -"IMPOPULARIDADE", -"IMPOR", -"IMPORTACAO", -"IMPORTADO", -"IMPORTADOR", -"IMPORTADOS", -"IMPORTANCIA", -"IMPORTANTE", -"IMPORTAR", -"IMPORTUNACAO", -"IMPORTUNADO", -"IMPORTUNADOR", -"IMPORTUNAR", -"IMPOSICAO", -"IMPOSSIBILIDADE", -"IMPOSSIBILITAR", -"IMPOSSIVEL", -"IMPOSTACAO", -"IMPOSTAR", -"IMPOSTO", -"IMPOSTOR", -"IMPOSTURA", -"IMPOTENCIA", -"IMPOTENTE", -"IMPRATICABILIDADE", -"IMPRATICAVEL", -"IMPRECACAO", -"IMPRECAR", -"IMPRECISAO", -"IMPRECISO", -"IMPREGNACAO", -"IMPREGNAR", -"IMPRENSA", -"IMPRENSAR", -"IMPRESCINDIVEL", -"IMPRESSA", -"IMPRESSAO", -"IMPRESSIONADO", -"IMPRESSIONANTE", -"IMPRESSIONAR", -"IMPRESSIONAVEL", -"IMPRESSIONISMO", -"IMPRESSIONISTA", -"IMPRESSO", -"IMPRESSOR", -"IMPRESSORA", -"IMPRESTAVEL", -"IMPRETERIVEL", -"IMPREVIDENCIA", -"IMPREVIDENTE", -"IMPREVISIVEL", -"IMPREVISTO", -"IMPRIMIR", -"IMPROBABILIDADE", -"IMPROBIDADE", -"IMPROBO", -"IMPROCEDENCIA", -"IMPROCEDENTE", -"IMPRODUTIVIDADE", -"IMPRODUTIVO", -"IMPROMPTU", -"IMPRONUNCIAVEL", -"IMPROPERIO", -"IMPROPRIEDADE", -"IMPROPRIO", -"IMPROVAVEL", -"IMPROVIDENCIA", -"IMPROVIDENTE", -"IMPROVISACAO", -"IMPROVISADO", -"IMPROVISADOR", -"IMPROVISAR", -"IMPROVISO", -"IMPRUDENCIA", -"IMPRUDENTE", -"IMPUDENCIA", -"IMPUDENTE", -"IMPUDICO", -"IMPUGNACAO", -"IMPUGNAR", -"IMPULSIONAR", -"IMPULSIVO", -"IMPULSO", -"IMPUNE", -"IMPUNIDADE", -"IMPUREZA", -"IMPURO", -"IMPUTAR", -"IMUNDICIE", -"IMUNDO", -"IMUNE", -"IMUNIDADE", -"IMUNIZACAO", -"IMUNIZADOR", -"IMUNIZANTE", -"IMUNIZAR", -"IMUNODEFICIENCIA", -"IMUNOLOGIA", -"IMUNOLOGICO", -"IMUNOLOGISTA", -"IMUTAVEL", -"IN", -"INABALAVEL", -"INABDICAVEL", -"INABIL", -"INABILIDADE", -"INABILIDADES", -"INABILITACAO", -"INABILITAR", -"INABITADO", -"INABITAVEL", -"INABITUAL", -"INABORDAVEL", -"INACABADO", -"INACABAVEL", -"INACAO", -"INACEITAVEL", -"INACESSIBILIDADE", -"INACESSIVEL", -"INACREDITAVEL", -"INADAPTABILIDADE", -"INADAPTADO", -"INADAPTAVEL", -"INADEQUABILIDADE", -"INADEQUACAO", -"INADEQUADO", -"INADEQUAVEL", -"INADIABILIDADE", -"INADIAVEL", -"INADIMPLENCIA", -"INADIMPLENTE", -"INADMISSAO", -"INADMISSIBILIDADE", -"INADMISSIVEL", -"INADVERTENCIA", -"INADVERTIDO", -"INAFIANCAVEL", -"INALACAO", -"INALADO", -"INALADOR", -"INALAR", -"INALCANCAVEL", -"INALIENAVEL", -"INALTERABILIDADE", -"INALTERADO", -"INALTERAVEL", -"INAMISTOSO", -"INAMOVIVEL", -"INANICAO", -"INANIMADO", -"INAPELAVEL", -"INAPLICAVEL", -"INAPREENSIVEL", -"INAPRESENTAVEL", -"INAPROVEITADO", -"INAPROVEITAVEL", -"INAPTIDAO", -"INAPTO", -"INARREDAVEL", -"INARTICULADO", -"INASSIDUO", -"INASSIMILAVEL", -"INATACAVEL", -"INATENCAO", -"INATINGIDO", -"INATINGIVEL", -"INATISMO", -"INATIVAR", -"INATIVIDADE", -"INATIVO", -"INATO", -"INAUDITO", -"INAUDIVEL", -"INAUGURACAO", -"INAUGURADOR", -"INAUGURAL", -"INAUGURAR", -"INAVEGAVEL", -"INAVERIGUAVEL", -"INCA", -"INCABIVEL", -"INCAICO", -"INCALCULAVEL", -"INCANDESCENCIA", -"INCANDESCENTE", -"INCANDESCER", -"INCANSAVEL", -"INCAPACIDADE", -"INCAPACITACAO", -"INCAPACITADO", -"INCAPACITAR", -"INCAPAZ", -"INCAUTO", -"INCENDIAR", -"INCENDIARIA", -"INCENDIARIO", -"INCENDIO", -"INCENSO", -"INCENTIVADOR", -"INCENTIVAR", -"INCENTIVO", -"INCERTEZA", -"INCERTO", -"INCESSANTE", -"INCESTO", -"INCESTUOSO", -"INCHACAO", -"INCHACO", -"INCHADO", -"INCHAMENTO", -"INCHAR", -"INCIDENCIA", -"INCIDENTAL", -"INCIDENTE", -"INCIDIR", -"INCINERACAO", -"INCINERAR", -"INCIPIENTE", -"INCISAO", -"INCISIVO", -"INCISO", -"INCITACAO", -"INCITADOR", -"INCITAMENTO", -"INCITAR", -"INCIVILIZADO", -"INCLASSIFICAVEL", -"INCLEMENCIA", -"INCLEMENTE", -"INCLINACAO", -"INCLINADO", -"INCLINAR", -"INCLINAVEL", -"INCLUIDAS", -"INCLUIR", -"INCLUSAO", -"INCLUSIVE", -"INCLUSIVO", -"INCLUSO", -"INCLUSOES", -"INCOAGULAVEL", -"INCOBRAVEL", -"INCOERENCIA", -"INCOERENTE", -"INCOGNITA", -"INCOGNITO", -"INCOLOR", -"INCOLUME", -"INCOMBUSTIVEL", -"INCOMENSURABILIDADE", -"INCOMENSURAVEL", -"INCOMODADO", -"INCOMODAR", -"INCOMODO", -"INCOMPARAVEL", -"INCOMPATIBILIDADE", -"INCOMPATIBILIZAR", -"INCOMPATIVEL", -"INCOMPETENCIAM", -"INCOMPETENTE", -"INCOMPLETO", -"INCOMPREENDIDO", -"INCOMPREENSAO", -"INCOMPREENSIVEL", -"INCOMUM", -"INCOMUNICABILIDADE", -"INCOMUNICAVEL", -"INCONCEBIVEL", -"INCONCILIAVEL", -"INCONDICIONAL", -"INCONFESSADO", -"INCONFESSAVEL", -"INCONFIDENCIA", -"INCONFIDENTE", -"INCONFORMACAO", -"INCONFORMADO", -"INCONFORMIDADE", -"INCONFORMISMO", -"INCONFUNDIVEL", -"INCONGRUENCIA", -"INCONGRUENTE", -"INCONJUGAVEL", -"INCONQUISTADO", -"INCONQUISTAVEL", -"INCONSCIENCIA", -"INCONSCIENTE", -"INCONSEQUENCIA", -"INCONSEQUENTE", -"INCONSIDERACAO", -"INCONSIDERADO", -"INCONSISTENCIA", -"INCONSISTENTE", -"INCONSOLADO", -"INCONSOLAVEL", -"INCONSTANCIA", -"INCONSTANTE", -"INCONSTITUCIONAL", -"INCONSTITUCIONALIDADE", -"INCONTAVEL", -"INCONTESTADO", -"INCONTESTAVEL", -"INCONTIDO", -"INCONTINENCIA", -"INCONTINENTE", -"INCONTORNAVEL", -"INCONTRASTAVEL", -"INCONTROLADO", -"INCONTROLAVEL", -"INCONVENIENCIA", -"INCONVENIENTE", -"INCORPORACAO", -"INCORPORADAS", -"INCORPORADO", -"INCORPORAR", -"INCORPOREO", -"INCORRECAO", -"INCORRER", -"INCORRETAMENTE", -"INCORRETO", -"INCORRIGIVEL", -"INCORRUPTIBILIDADE", -"INCORRUPTIVEL", -"INCREDULIDADE", -"INCREDULO", -"INCREMENTACAO", -"INCREMENTADO", -"INCREMENTAL", -"INCREMENTAR", -"INCREMENTO", -"INCRIMINACAO", -"INCRIMINAR", -"INCRIVEL", -"INCRUSTACAO", -"INCRUSTAR", -"INCUBACAO", -"INCUBADEIRA", -"INCUBADORA", -"INCUBAR", -"INCUBO", -"INCULCAR", -"INCULPAR", -"INCULTA", -"INCULTO", -"INCUMBENCIA", -"INCUMBIR", -"INCURAVEL", -"INCURSAO", -"INCUTIR", -"INDAGACAO", -"INDAGAR", -"INDECENCIA", -"INDECENTE", -"INDECIDIDO", -"INDECIFRAVEL", -"INDECISAO", -"INDECISO", -"INDECLINAVEL", -"INDECOROSO", -"INDEFECTIVEL", -"INDEFENSAVEL", -"INDEFERIDO", -"INDEFERIMENTO", -"INDEFERIR", -"INDEFERIVEL", -"INDEFESO", -"INDEFINICAO", -"INDEFINIDO", -"INDEFINIVEL", -"INDEFORMADO", -"INDEFORMAVEL", -"INDELEVEL", -"INDELICADEZA", -"INDELICADO", -"INDEMONSTRAVEL", -"INDENIZACAO", -"INDENIZAR", -"INDEPENDENCIA", -"INDEPENDENTE", -"INDESCRITIVEL", -"INDESCULPAVEL", -"INDESEJAVEL", -"INDESTRUTIVEL", -"INDETERMINACAO", -"INDETERMINADO", -"INDETERMINAR", -"INDETERMINAVEL", -"INDETERMINISMO", -"INDEVIDO", -"INDEX", -"INDEXACAO", -"INDEXAR", -"INDIANA", -"INDIANISMO", -"INDIANISTA", -"INDIANO", -"INDICACAO", -"INDICADO", -"INDICADOR", -"INDICAR", -"INDICATIVO", -"INDICE", -"INDICES", -"INDICIACAO", -"INDICIADO", -"INDICIAMENTO", -"INDICIANTE", -"INDICIAR", -"INDICIO", -"INDICO", -"INDIFERENCA", -"INDIFERENTE", -"INDIGENA", -"INDIGENCIA", -"INDIGENISMO", -"INDIGENISTA", -"INDIGENTE", -"INDIGESTAO", -"INDIGESTO", -"INDIGNACAO", -"INDIGNADO", -"INDIGNAR", -"INDIGNIDADE", -"INDIGNO", -"INDIGO", -"INDIO", -"INDIRETA", -"INDIRETO", -"INDISCERNIVEL", -"INDISCIPLINA", -"INDISCIPLINADO", -"INDISCRETO", -"INDISCRICAO", -"INDISCRIMINADO", -"INDISCUTIVEL", -"INDISFARCAVEL", -"INDISPENSAVEL", -"INDISPOR", -"INDISPOSICAO", -"INDISPOSTO", -"INDISSOCIAVEL", -"INDISSOLUVEL", -"INDISTINGUIVEL", -"INDISTINTO", -"INDIVIDUAIS", -"INDIVIDUAL", -"INDIVIDUALIDADE", -"INDIVIDUALISMO", -"INDIVIDUALISTA", -"INDIVIDUALIZACAO", -"INDIVIDUALIZADO", -"INDIVIDUALIZANTE", -"INDIVIDUALIZAR", -"INDIVIDUO", -"INDIVISIBILIDADE", -"INDIVISIVEL", -"INDIZIVEL", -"INDOCHINES", -"INDOLE", -"INDOLENCIA", -"INDOLENTE", -"INDOLOR", -"INDOMAVEL", -"INDOMITO", -"INDONESIO", -"INDUBITAVEL", -"INDUCAO", -"INDULGENCIA", -"INDULGENTE", -"INDULTADO", -"INDULTAR", -"INDULTO", -"INDUMENTARIA", -"INDUMENTARIO", -"INDUSTRIA", -"INDUSTRIAL", -"INDUSTRIALIZACAO", -"INDUSTRIALIZADO", -"INDUSTRIALIZADOS", -"INDUSTRIALIZAR", -"INDUSTRIARIO", -"INDUSTRIOSO", -"INDUTANCIA", -"INDUTIVO", -"INDUZIDO", -"INDUZIR", -"INEBRIANTE", -"INEBRIAR", -"INEDITO", -"INEFABILIDADE", -"INEFAVEL", -"INEFICACIA", -"INEFICAZ", -"INEFICIENCIA", -"INEFICIENTE", -"INEGAVEL", -"INEGOCIAVEL", -"INELASTICO", -"INELEGIBILIDADE", -"INELEGIVEL", -"INELUTAVEL", -"INENARRAVEL", -"INEPCIA", -"INEPTIDAO", -"INEPTO", -"INEQUACAO", -"INEQUIVOCO", -"INERCIA", -"INERCIAL", -"INERENCIA", -"INERENTE", -"INERTE", -"INESCAPAVEL", -"INESCRUPULOSO", -"INESCRUTABILIDADE", -"INESCRUTAVEL", -"INESGOTAVEL", -"INESPECIFICO", -"INESPERADAMENTE", -"INESPERADO", -"INESQUECIVEL", -"INESTIMAVEL", -"INEVITABILIDADE", -"INEVITAVEL", -"INEVITAVELMENTE", -"INEXATIDAO", -"INEXATO", -"INEXAURIVEL", -"INEXEQUIVEL", -"INEXIGIVEL", -"INEXISTENCIA", -"INEXISTENTE", -"INEXORABILIDADE", -"INEXORAVEL", -"INEXPERIENCIA", -"INEXPERIENTE", -"INEXPLICAVEL", -"INEXPLORADO", -"INEXPRESSIVIDADE", -"INEXPRESSIVO", -"INEXPRIMIVEL", -"INEXPUGNAVEL", -"INEXTINGUIVEL", -"INEXTRICAVEL", -"INFALIVEL", -"INFAME", -"INFAMIA", -"INFANCIA", -"INFANTARIA", -"INFANTE", -"INFANTICIDA", -"INFANTICIDIO", -"INFANTIL", -"INFANTILIDADE", -"INFANTIS", -"INFARTO", -"INFATIGAVEL", -"INFECCAO", -"INFECCIONADO", -"INFECCIONAR", -"INFECCIOSO", -"INFECTADO", -"INFECTAR", -"INFECTO", -"INFECTOLOGIA", -"INFECTOLOGICO", -"INFECUNDIDADE", -"INFECUNDO", -"INFELICIDADE", -"INFELICISSIMO", -"INFELIZ", -"INFELIZMENTE", -"INFERIOR", -"INFERIORES", -"INFERIORIDADE", -"INFERIORIZACAO", -"INFERIORIZAR", -"INFERIR", -"INFERNAL", -"INFERNAR", -"INFERNINHO", -"INFERNIZAR", -"INFERNO", -"INFERTIL", -"INFESTACAO", -"INFESTADO", -"INFESTAR", -"INFIDELIDADE", -"INFIEL", -"INFILTRACAO", -"INFILTRAR", -"INFIMO", -"INFINDAVEL", -"INFINIDADE", -"INFINITESIMAL", -"INFINITIVO", -"INFINITO", -"INFIXO", -"INFLACAO", -"INFLACIONADO", -"INFLACIONAR", -"INFLACIONARIO", -"INFLACIONISTA", -"INFLADO", -"INFLAMACAO", -"INFLAMADO", -"INFLAMAR", -"INFLAMATORIO", -"INFLAMAVEL", -"INFLAR", -"INFLAVEL", -"INFLEXAO", -"INFLEXIBILIDADE", -"INFLEXIVEL", -"INFLIGIR", -"INFLORESCENCIA", -"INFLUENCIA", -"INFLUENCIAR", -"INFLUENCIAVEL", -"INFLUENTE", -"INFLUENZA", -"INFLUIR", -"INFLUXO", -"INFORMACAO", -"INFORMACOES", -"INFORMADO", -"INFORMAL", -"INFORMALIDADE", -"INFORMALISMO", -"INFORMAR", -"INFORMATICA", -"INFORMATIVO", -"INFORMATIZACAO", -"INFORMATIZAR", -"INFORME", -"INFORTUNADO", -"INFORTUNAR", -"INFORTUNIO", -"INFRACAO", -"INFRATOR", -"INFRAVERMELHA", -"INFRAVERMELHO", -"INFREQUENCIA", -"INFREQUENTE", -"INFRINGIR", -"INFRUTESCENCIA", -"INFRUTIFERO", -"INFUNDADO", -"INFUNDIR", -"INFUSAO", -"INGENUIDADE", -"INGENUO", -"INGERENCIA", -"INGERIR", -"INGESTAO", -"INGLES", -"INGLESA", -"INGLORIO", -"INGOVERNAVEL", -"INGRATIDAO", -"INGRATO", -"INGREDIENTE", -"INGREME", -"INGRESSAR", -"INGRESSO", -"INGUA", -"INHACA", -"INHAME", -"INIBICAO", -"INIBIDO", -"INIBIR", -"INICIACAO", -"INICIADO", -"INICIADOR", -"INICIAL", -"INICIANTE", -"INICIAR", -"INICIATIVA", -"INICIO", -"INIGUALAVEL", -"INIMAGINAVEL", -"INIMIGO", -"INIMITAVEL", -"INIMIZADE", -"INIMIZAR", -"ININTELIGIVEL", -"ININTERRUPTO", -"INIQUIDADE", -"INIQUO", -"INJECAO", -"INJETAR", -"INJETAVEL", -"INJETOR", -"INJETORA", -"INJUNCAO", -"INJURIA", -"INJURIAR", -"INJURIOSO", -"INJUSTICA", -"INJUSTICADO", -"INJUSTIFICAVEL", -"INJUSTO", -"INNING", -"INOBSERVANCIA", -"INOCENCIA", -"INOCENTAR", -"INOCENTE", -"INOCULACAO", -"INOCULAR", -"INOCULAVEL" -] \ No newline at end of file diff --git "a/commands/Configura\303\247\303\265es/botchat.js" "b/commands/Configura\303\247\303\265es/botchat.js" new file mode 100644 index 0000000..e3be722 --- /dev/null +++ "b/commands/Configura\303\247\303\265es/botchat.js" @@ -0,0 +1,129 @@ +const { + MessageEmbed +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +module.exports = { + name: "botchat", //the command name for execution & for helpcmd [OPTIONAL] + + category: "Configuracões", + aliases: ["botch"], + usage: "botchat <#Channel>", + + cooldown: 1, //the command cooldown for execution & for helpcmd [OPTIONAL] + description: "Gerencia os bot-chats!", //the command description for helpcmd [OPTIONAL] + memberpermissions: ["MANAGE_GUILD "], //Only allow members with specific Permissions to execute a Commmand [OPTIONAL] + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + + if (!args[0]) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Por favor, dicione um Método + Canal!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(message.guild.id, "prefix")}botchat <#Channel>\``) + ], + }); + } + let add_remove = args[0].toLowerCase(); + if (!["add", "remover"].includes(add_remove)) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Por favor adicione um Método + Canal!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(message.guild.id, "prefix")}botchat <#Channel>\``) + ], + }); + } + let Channel = message.mentions.channels.first(); + if (!Channel) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Por favor Adicione um Método + Canal!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(message.guild.id, "prefix")}botchat <#Channel>\``) + ], + }); + } + client.settings.ensure(guild.id, { + botchannel: [] + }); + + if (add_remove == "add") { + if (client.settings.get(guild.id, "botchannel").includes(Channel.id)) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Este canal já é um canal de bot na lista de permissões!**`) + ], + }) + } + client.settings.push(guild.id, Channel.id, "botchannel"); + var djs = client.settings.get(guild.id, `botchannel`).map(r => `<#${r}>`); + if (djs.length == 0) djs = "`não configurado`"; + else djs.join(", "); + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.color) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.check_mark} **O canal \`${Channel.name}\` foi adicionado ao ${client.settings.get (guild.id, "djroles").Length - 1} Canais-bot permitidos!**`) + .addField(`**Canais-bot${client.settings.get(guild.id, "botchannel").length > 1 ? "": ""}:**`, `>>> ${djs}`, true) + ], + }) + } else { + if (!client.settings.get(guild.id, "botchannel").includes(Channel.id)) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Este canal ainda não é um canal de bot na lista de permissões!**`) + ], + }) + } + client.settings.remove(guild.id, Channel.id, "botchannel"); + var djs = client.settings.get(guild.id, `botchannel`).map(r => `<#${r}>`); + if (djs.length == 0) djs = "`não configurado`"; + else djs.join(", "); + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.color) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.check_mark} **O Canal \`${Channel.name}\` foi removido dos Canais-Bot autorizados ${client.settings.get (guild.id, "djroles").Length}!**`) + .addField(`**Canias-bot${client.settings.get(guild.id, "botchannel").length > 1 ? "": ""}:**`, `>>> ${djs}`, true) + ], + }) + } + + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git "a/commands/Configura\303\247\303\265es/defaultautoplay.js" "b/commands/Configura\303\247\303\265es/defaultautoplay.js" new file mode 100644 index 0000000..d86d3ea --- /dev/null +++ "b/commands/Configura\303\247\303\265es/defaultautoplay.js" @@ -0,0 +1,57 @@ +const { + MessageEmbed +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +module.exports = { + name: "defaultautoplay", //the command name for execution & for helpcmd [OPTIONAL] + + category: "Configurações", + aliases: ["dautoplay"], + usage: "defaultautoplay", + + cooldown: 10, //the command cooldown for execution & for helpcmd [OPTIONAL] + description: "Define se a reprodução automática deve ser habilitada no padrão ou não!", //the command description for helpcmd [OPTIONAL] + memberpermissions: ["MANAGE_GUILD "], //Only allow members with specific Permissions to execute a Commmand [OPTIONAL] + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + client.settings.ensure(guild.id, { + defaultvolume: 50, + defaultautoplay: false, + defaultfilters: [`bassboost6`, `clear`] + }); + + client.settings.set(guild.id, !client.settings.get(guild.id, "defaultautoplay"), "defaultautoplay"); + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.color) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.check_mark} **O Autoplay-Padrão está __\`${client.settings.get(guild.id, "defaultautoplay") ? "Ativado" : "Desativado"}\`__!**`) + ], + }) + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git "a/commands/Configura\303\247\303\265es/defaultfilter.js" "b/commands/Configura\303\247\303\265es/defaultfilter.js" new file mode 100644 index 0000000..603757c --- /dev/null +++ "b/commands/Configura\303\247\303\265es/defaultfilter.js" @@ -0,0 +1,81 @@ +const { + MessageEmbed +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const filters = require("../../botconfig/filters.json") +module.exports = { + name: "defaultfilter", //the command name for execution & for helpcmd [OPTIONAL] + category: "Configurações", + + aliases: ["dfilter"], + usage: "defaultfilter ", + cooldown: 10, //the command cooldown for execution & for helpcmd [OPTIONAL] + usage: "defaultfilter", //the command usage for helpcmd [OPTIONAL] + description: "Define o(s) filtro(s) padrão", //the command description for helpcmd [OPTIONAL] + memberpermissions: ["MANAGE_GUILD "], //Only allow members with specific Permissions to execute a Commmand [OPTIONAL] + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL], //Only allow specific Users to execute a Command [OPTIONAL] + + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + client.settings.ensure(guild.id, { + defaultvolume: 50, + defaultautoplay: false, + defaultfilters: [`bassboost6`, `clear`] + }); + if (args.some(a => !filters[a])) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **You added at least one Filter, which is invalid!**`) + .setDescription("**To define Multiple Filters add a SPACE (` `) in between!**") + .addField("**All Valid Filters:**", Object.keys(filters).map(f => `\`${f}\``).join(", ")) + ], + }) + } + + client.settings.set(guild.id, args, "defaultfilters"); + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.color) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.check_mark} **The new Default-Filter${args.length > 0 ? "s are": " is"}:**`) + .setDescription(`${args.map(a=>`\`${a}\``).join(", ")}`) + ], + }) + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} +/** + * @INFO + * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/Discord-Js-Handler-Template + * @INFO + * Work for Milrato Development | https://milrato.eu + * @INFO + * Please mention Him / Milrato Development, when using this Code! + * @INFO + */ diff --git "a/commands/Configura\303\247\303\265es/defaultvolume.js" "b/commands/Configura\303\247\303\265es/defaultvolume.js" new file mode 100644 index 0000000..e4ee971 --- /dev/null +++ "b/commands/Configura\303\247\303\265es/defaultvolume.js" @@ -0,0 +1,75 @@ +const { + MessageEmbed +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +module.exports = { + name: "defaultvolume", //the command name for execution & for helpcmd [OPTIONAL] + category: "Configurações", + aliases: ["dvolume"], + usage: "defaultvolume ", + cooldown: 1, //the command cooldown for execution & for helpcmd [OPTIONAL] + description: "Define o volume padrão do bot!", //the command description for helpcmd [OPTIONAL] + memberpermissions: ["MANAGE_GUILD "], //Only allow members with specific Permissions to execute a Commmand [OPTIONAL] + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + if (!args[0]) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Por favor adicione um Volume!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(guild.id, "prefix")}defaultvolume \``) + ], + }) + } + let volume = Number(args[0]); + client.settings.ensure(guild.id, { + defaultvolume: 50 + }); + + if (!volume || (volume > 150 || volume < 1)) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **O Volume _deve_ estar\`1\` e \`150\`!**`) + ], + }) + } + client.settings.set(guild.id, volume, "defaultvolume"); + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.color) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.check_mark} **O Volume Padrão foi definido para: \`${volume}\`!**`) + ], + }) + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git "a/commands/Configura\303\247\303\265es/dj.js" "b/commands/Configura\303\247\303\265es/dj.js" new file mode 100644 index 0000000..8c09374 --- /dev/null +++ "b/commands/Configura\303\247\303\265es/dj.js" @@ -0,0 +1,127 @@ +const { + MessageEmbed +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +module.exports = { + name: "dj", //the command name for execution & for helpcmd [OPTIONAL] + + category: "Configurações", + aliases: ["djrole", "role", "drole", "djs", "dj-role"], + Use: "dj <@Role>", + + cooldown: 1, //the command cooldown for execution & for helpcmd [OPTIONAL] + description: "Gerencia os Djs!", //the command description for helpcmd [OPTIONAL] + memberpermissions: ["MANAGE_GUILD "], //Only allow members with specific Permissions to execute a Commmand [OPTIONAL] + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + if (!args[0]) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Adicione um Método + Função!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(message.guild.id, "prefix")}botchat <@Role>\``) + ], + }); + } + let add_remove = args[0].toLowerCase(); + if (!["add", "remover"].includes(add_remove)) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Adicione um Método + Função!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(message.guild.id, "prefix")}botchat <@Role>\``) + ], + }); + } + let Role = message.mentions.channels.first(); + if (!Role) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Adicione um Método + Função!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(message.guild.id, "prefix")}botchat <@Role>\``) + ], + }); + } + client.settings.ensure(guild.id, { + djroles: [] + }); + if (add_remove == "add") { + if (client.settings.get(guild.id, "djroles").includes(Role.id)) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Este cargo já é um CARGO-DJ!**`) + ], + }) + } + client.settings.push(guild.id, Role.id, "djroles"); + var djs = client.settings.get(guild.id, `djroles`).map(r => `<@&${r}>`); + if (djs.length == 0) djs = "`não configurado"; + else djs.join(", "); + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.color) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.check_mark} **Um cargo \`${Role.name}\` foi adicionado ao ${client.settings.get(guild.id, "djroles").length - 1} CARGO-DJ!**`) + .addField(`**CARGO-DJ${client.settings.get(guild.id, "djroles").length > 1 ? "s": ""}:**`, `>>> ${djs}`, true) + ], + }) + } else { + if (!client.settings.get(guild.id, "djroles").includes(Role.id)) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Este cargo ainda não é um CARGO-DJ!**`) + ], + }) + } + client.settings.remove(guild.id, Role.id, "djroles"); + var djs = client.settings.get(guild.id, `djroles`).map(r => `<@&${r}>`); + if (djs.length == 0) djs = "`não configurado`"; + else djs.join(", "); + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.color) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.check_mark} **O cargo \`${Role.name}\` foi removido do ${client.settings.get(guild.id, "djroles").length} CARGO-DJ!**`) + .addField(`**CARGO-DJ${client.settings.get(guild.id, "djroles").length > 1 ? "s": ""}:**`, `>>> ${djs}`, true) + ], + }) + } + + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git "a/commands/Configura\303\247\303\265es/prefix.js" "b/commands/Configura\303\247\303\265es/prefix.js" new file mode 100644 index 0000000..a3f8325 --- /dev/null +++ "b/commands/Configura\303\247\303\265es/prefix.js" @@ -0,0 +1,66 @@ +const { + MessageEmbed +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +module.exports = { + name: "prefix", //the command name for execution & for helpcmd [OPTIONAL] + category: "Settings", + aliases: ["setprefix"], + usage: "prefix ", + cooldown: 1, //the command cooldown for execution & for helpcmd [OPTIONAL] + description: "Changes the Prefix of the Bot!", //the command description for helpcmd [OPTIONAL] + memberpermissions: ["MANAGE_GUILD "], //Only allow members with specific Permissions to execute a Commmand [OPTIONAL] + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + if (!args[0]) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Please add a Prefix!**`) + .setDescription(`**Usage:**\n> \`${client.settings.get(guild.id, "prefix")}prefix \``) + ], + }) + } + let newPrefix = args[0]; + client.settings.ensure(guild.id, { + prefix: config.prefix + }); + + client.settings.set(guild.id, newPrefix, "prefix"); + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.color) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.check_mark} **The new Prefix is now: \`${newPrefix}\`**`) + ], + }) + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Dev/getinvite.js b/commands/Dev/getinvite.js new file mode 100644 index 0000000..3abfa4e --- /dev/null +++ b/commands/Dev/getinvite.js @@ -0,0 +1,46 @@ +const ownerid = "718669518452293713"; + +module.exports = { + name: "getinvite", + aliases: ['getinv', 'gi'], + category: "Dev", + description: "Gera um convite para o servidor em questão.", + usage: "[ID | nome]", + + run: async(bot, message, args) => { + if (message.author.id === ownerid) { + let guild = null; + + if (!args[0]) return message.channel.send("Digite um nome") + + if(args[0]){ + let fetched = bot.guilds.cache.find(g => g.name === args.join(" ")); + let found = bot.guilds.cache.get(args[0]); + if(!found) { + if(fetched) { + guild = fetched; + } + } else { + guild = found + } + } else { + return message.channel.send("Nome inválido!"); + } + if(guild){ + let tChannel = guild.channels.cache.find(ch => ch.type == "text" && ch.permissionsFor(ch.guild.me).has("CREATE_INSTANT_INVITE")); + if(!tChannel) { + return message.channel.send("Ocorreu um erro, tente novamente!"); + } + let invite = await tChannel.createInvite({ temporary: false, maxAge: 0 }).catch(err => { + return message.channel.send(`${err} ocorreu!`); + }); + message.channel.send(invite.url); + } else { + return message.channel.send(`\`${args.join(' ')}\` - O bot não está neste servidor`); + } + } else { + return; + } + } + +} \ No newline at end of file diff --git "a/commands/Divers\303\243o/ratewaifu.js" "b/commands/Divers\303\243o/ratewaifu.js" new file mode 100644 index 0000000..0fdac86 --- /dev/null +++ "b/commands/Divers\303\243o/ratewaifu.js" @@ -0,0 +1,43 @@ +module.exports = { + name: "ratewaifu", + aliases: ['waifu', 'avaliarwaifu'], + category:"Diversão", + cooldown: "5", + run:async (client, message, args) => { + + let user = message.mentions.users.first() || client.users.cache.get(args[0]); + + if (!user) { + return message.reply('lembre-se de mencionar um usuário válido para avaliar!'); + } + + if (user == 794291443454836766) return message.reply('Eu dou nota **∞** para <@794291443454836766> sim eu sou muito lindo 😘') + + if(user == 718669518452293713) return message.reply(`Sobre ${user}... Eu dou nota **1000** para essa waifu. Se vc procurar definição de perfeição no dicionário aparece ${user}! <:cut:808443704028823574>`) + + if(user == 772855488756580404) return message.reply(`Sobre ${user}... Eu dou nota **1000** para essa waifu. Se vc procurar definição de perfeição no dicionário aparece ${user}! <:cut:808443704028823574>`) + + if(user == 532413362940936213) return message.reply(`Sobre ${user}... Eu dou nota **1000** para essa waifu. Se vc procurar definição de perfeição no dicionário aparece ${user}! <:cut1:808444488086847538>`) + + if(user == 446123064363712523) return message.reply(`Sobre ${user}... Eu dou nota **1000** para essa waifu. Se vc procurar definição de perfeição no dicionário aparece ${user}! <:cut1:808444488086847538>`) + + if(user == 757434569011232879) return message.reply(`Sobre ${user}... Eu dou nota **1000** para essa waifu. Se vc procurar definição de perfeição no dicionário aparece ${user}! <:cut1:808444488086847538>`) + + if(user == 765113381094817812) return message.reply(`Sobre ${user}... Eu dou nota **1000** para essa waifu. Se vc procurar definição de perfeição no dicionário aparece ${user}! <:cut1:808444488086847538>`) + +var list = [ + '**1** para essa waifu. Eu não gostei <:hm:808446536533934100> ', + '**5** para essa waifu. <:hmmm:779010951420051457> ', + '**7** para essa waifu. Achei ela bonitinha <:cut1:808444488086847538> ', + '**4** para essa waifu. Bonitinha <:hm:808446536533934100>', + '**3** para essa waifu. Bonitinha, mas acho que pode melhorar *na minha opinião* <:hm:808446536533934100>', + '**5** para essa waifu.', + '**8** para essa waifu.', + '**10** para essa waifu. Essa waifu é perfeita! Eu não trocaria ela por nada se fosse você! <:cut:808443704028823574>' +]; + +var rand = list[Math.floor(Math.random() * list.length)]; + + await message.reply(`Sobre ${user}... Eu dou nota ${rand}`); +} +} \ No newline at end of file diff --git "a/commands/divers\303\243o/say.js" "b/commands/Divers\303\243o/say.js" similarity index 87% rename from "commands/divers\303\243o/say.js" rename to "commands/Divers\303\243o/say.js" index 804f860..9f5210a 100644 --- "a/commands/divers\303\243o/say.js" +++ "b/commands/Divers\303\243o/say.js" @@ -3,7 +3,8 @@ const discord = require('discord.js'); module.exports = { name:"say", aliases:["falar", "dizer"], - category:"diversão", + category:"Diversão", + cooldown: "3", run: async (client, message, args) => { const sayMessage = args.join(' '); message.delete().catch(O_o => {}); diff --git a/commands/Fila/clear.js b/commands/Fila/clear.js new file mode 100644 index 0000000..594c9e1 --- /dev/null +++ b/commands/Fila/clear.js @@ -0,0 +1,102 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "clear", //the command name for the Slash Command + + category: "Fila", + aliases: ["clearqueue", "clearq", "clearqu", "limparfila"], + usage: "clear", + + description: "Limpa a fila", //the command description for Slash Command Overview + cooldown: 10, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de Voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ Canal de Voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGOS-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + let amount = newQueue.songs.length - 2; + newQueue.songs = [newQueue.songs[0]]; + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`🗑 **Limpou a fila e excluiu ${amount} Músicas!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Fila/jump.js b/commands/Fila/jump.js new file mode 100644 index 0000000..5092707 --- /dev/null +++ b/commands/Fila/jump.js @@ -0,0 +1,119 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "jump", //the command name for the Slash Command + + category: "Fila", + aliases: ["jump", "skipto"], + usage: "jump ", + + description: "Salta para uma música específica na fila", //the command description for Slash Command Overview + cooldown: 10, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de Voz primeiro**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ Canal de Voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada!**`) + ], + + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGOS-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + if (!args[0]) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Adicione uma posição para a qual saltar!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(message.guild.id, "prefix")}jump \``) + ], + }); + } + let Position = Number(args[0]) + if (Position > newQueue.songs.length - 1 || Position < 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **A posição deve estar entre \`0\` e \`${newQueue.songs.length - 1}\`!**`) + ], + + }) + await newQueue.jump(Position); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`👌 **Saltou para a \`${Position}ª \` música da fila!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Fila/list.js b/commands/Fila/list.js new file mode 100644 index 0000000..3310287 --- /dev/null +++ b/commands/Fila/list.js @@ -0,0 +1,136 @@ +const { + MessageEmbed, + MessageSelectMenu, + MessageActionRow +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "list", //the command name for the Slash Command + + category: "Fila", + aliases: ["list", "queue", "queuelist"], + usage: "list", + + description: "Lista a fila atual", //the command description for Slash Command Overview + cooldown: 10, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor Junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de Voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no meu Canal de Voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + let embeds = []; + let k = 10; + let theSongs = newQueue.songs; + //defining each Pages + for (let i = 0; i < theSongs.length; i += 10) { + let qus = theSongs; + const current = qus.slice(i, k) + let j = i; + const info = current.map((track) => `**${j++} -** [\`${String(track.name).replace(/\[/igu, "{").replace(/\]/igu, "}").substr(0, 60)}\`](${track.url}) - \`${track.formattedDuration}\``).join("\n") + const embed = new MessageEmbed() + .setColor(ee.color) + .setDescription(`${info}`) + if (i < 10) { + embed.setTitle(`📑 **Top ${theSongs.length > 50 ? 50 : theSongs.length} | Fila de ${guild.name}**`) + embed.setDescription(`**(0) Música atual:**\n> [\`${theSongs[0].name.replace(/\[/igu, "{").replace(/\]/igu, "}")}\`](${theSongs[0].url})\n\n${info}`) + } + embeds.push(embed); + k += 10; //Raise k to 10 + } + embeds[embeds.length - 1] = embeds[embeds.length - 1] + .setFooter(ee.footertext + `\n${theSongs.length} Músicas na fila | Duração: ${newQueue.formattedDuration}`, ee.footericon) + let pages = [] + for (let i = 0; i < embeds.length; i += 3) { + pages.push(embeds.slice(i, i + 3)); + } + pages = pages.slice(0, 24) + const Menu = new MessageSelectMenu() + .setCustomId("QUEUEPAGES") + .setPlaceholder("Selecione uma página") + .addOptions([ + pages.map((page, index) => { + let Obj = {}; + Obj.label = `Página ${index}` + Obj.value = `${index}`; + Obj.description = `Mostra o ${index}/${pages.length - 1} Página!` + return Obj; + }) + ]) + const row = new MessageActionRow().addComponents([Menu]) + message.reply({ + embeds: [embeds[0]], + components: [row], + }); + //Event + client.on('interactionCreate', (i) => { + if (!i.isSelectMenu()) return; + if (i.customId === "QUEUEPAGES" && i.applicationId == client.user.id) { + i.reply({ + embeds: pages[Number(i.values[0])], + }).catch(e => {}) + } + }); + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Fila/loop.js b/commands/Fila/loop.js new file mode 100644 index 0000000..c923dc0 --- /dev/null +++ b/commands/Fila/loop.js @@ -0,0 +1,143 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "loop", //the command name for the Slash Command + + category: "Fila", + aliases: ["repeat", "repeatmode", "l"], + usage: "loop ", + + description: "Ativar/desativar o Song-/ Queue-Loop", //the command description for Slash Command Overview + cooldown: 5, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor Junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de Voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no meu Canal de Voz primeiro!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada!**`) + ], + + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + if (!args[0]) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Adicione opções válidas!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(message.guild.id, "prefix")}loop \``) + ], + }); + } + let loop = String(args[0]) + if (!["off", "song", "queue"].includes(loop.toLowerCase())) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Adicione opções válidas!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(message.guild.id, "prefix")}loop \``) + ], + }); + } + if (loop.toLowerCase() == "off") loop = 0; + else if (loop.toLowerCase() == "song") loop = 1; + else if (loop.toLowerCase() == "queue") loop = 2; + await newQueue.setRepeatMode(loop); + if (newQueue.repeatMode == 0) { + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`${client.allEmojis.x} **Desativou o modo de loop!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } else if (newQueue.repeatMode == 1) { + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`🔁 **Habilitou o __Loop__- Música** || (Desabilitou o **Loop-Fila**)||`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } else { + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`🔂 **Habilitou o __Loop__-Fila! ** || (Desabilitou o ** __Loop-Música__**)||`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} diff --git a/commands/Fila/move.js b/commands/Fila/move.js new file mode 100644 index 0000000..b8b4f70 --- /dev/null +++ b/commands/Fila/move.js @@ -0,0 +1,160 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "move", //the command name for the Slash Command + + category: "Fila", + usage: "move ", + + description: "Move uma música para outro lugar", //the command description for Slash Command Overview + cooldown: 10, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor Junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de Voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no meu Canal de Voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + if (!args[0]) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Por favor, adicione um Song-Position!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(message.guild.id, "prefix")}move \``) + ], + }); + } + if (!args[1]) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Please add a To-Move-Position!**`) + .setDescription(`**Usage:**\n> \`${client.settings.get(message.guild.id, "prefix")}play \``) + ], + }); + } + let songIndex = Number(args[0]); + if (!songIndex) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Adicione uma posição de música [NUMERO]!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(message.guild.id, "prefix")}move \``) + ], + }); + } + let position = Number(args[1]); + if (!position) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Adicione um NÚMERO de posição para mover!**`) + .setDescription(`**Usage:**\n> \`${client.settings.get(message.guild.id, "prefix")}play = newQueue.songs.length || position < 0) position = -1; + if (songIndex > newQueue.songs.length - 1) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Esta música não existe!**`) + .setDescription(`**Ta última música da fila tem o índice: \`${newQueue.songs.length}\`**`) + ], + + }) + if (position == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Não é possível mover a música antes de tocá-la!**`) + ], + + }) + let song = newQueue.songs[songIndex]; + //remove the song + newQueue.songs.splice(songIndex); + //Add it to a specific Position + newQueue.addToQueue(song, position) + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`📑 Movido ** ${song.name} ** para a** \`${position}ª\` ** lugar logo após **_${newQueue.songs[position - 1].name}_!**`) + .setFooter(`: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Fila/previous.js b/commands/Fila/previous.js new file mode 100644 index 0000000..2906e3e --- /dev/null +++ b/commands/Fila/previous.js @@ -0,0 +1,106 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "previous", //the command name for the Slash Command + category: "Fila", + aliases: ["pre"], + usage: "previous", + + description: "Toca a música anterior!", //the command description for Slash Command Overview + cooldown: 10, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de Voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no meu Canal!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + if (!newQueue || !newQueue.previousSongs || newQueue.previousSongs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Não há músicas anteriores!**`) + ], + + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + await newQueue.previous(); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`▶️ **Tocando agora a faixa anterior!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Fila/remove.js b/commands/Fila/remove.js new file mode 100644 index 0000000..012a19a --- /dev/null +++ b/commands/Fila/remove.js @@ -0,0 +1,144 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "remove", //the command name for the Slash Command + + category: "Fila", + aliases: ["delete", "del", "rem"], + usage: "remove [Amount]", + + description: "Remove uma(s) + música(s)", //the command description for Slash Command Overview + cooldown: 10, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor Junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de Voz Primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no meu Canal de Voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + if (!args[0]) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Por favor, adicione a posição da música!**`) + .setDescription(`**Usage:**\n> \`${client.settings.get(message.guild.id, "prefix")}remove [quantidade]\``) + ], + }); + } + let songIndex = Number(args[0]); + if (!songIndex) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Adicione a posição da música [NUMERO]!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(message.guild.id, "prefix")}remove [quantia]\``) + ], + }); + } + let amount = Number(args[1] ? args[1] : "1"); + if (!amount) amount = 1; + if (songIndex > newQueue.songs.length - 1) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Esta música não existe!**`) + .setDescription(`**A última música da fila tem o índice: \`${newQueue.songs.length}\`**`) + ], + + }) + if (songIndex <= 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Você não pode remover a música atual (0)!**`) + .setDescription(`**Use o \`${client.settings.get(guild.id, "prefix")}skip\` (Slash)Command em vez disso!**`) + ], + + }) + if (amount <= 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Você precisa remover pelo menos 1 música!**`) + ], + + }) + newQueue.songs.splice(songIndex, amount); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`🗑 **Removida ${amount} Música ${amount> 1? "s": ""} da fila!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Fila/shuffle.js b/commands/Fila/shuffle.js new file mode 100644 index 0000000..441430b --- /dev/null +++ b/commands/Fila/shuffle.js @@ -0,0 +1,101 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "shuffle", //the command name for the Slash Command + + category: "Fila", + aliases: ["mix", "embaralhar", "misturar"], + usage: "shuffle", + + description: "Embaralha (mistura) a fila", //the command description for Slash Command Overview + cooldown: 10, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor Junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de Voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no meu canal de voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + await newQueue.shuffle(); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`🔀 **Embaralhou ${newQueue.songs.length} Músicas!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} diff --git a/commands/Fila/status.js b/commands/Fila/status.js new file mode 100644 index 0000000..941eb35 --- /dev/null +++ b/commands/Fila/status.js @@ -0,0 +1,106 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "status", //the command name for the Slash Command + + category: "Fila", + aliases: ["stats"], + usage: "status", + + description: "Mostra o status da fila", //the command description for Slash Command Overview + cooldown: 10, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor entre em ${guild.me.voice.channel ? "__meu__" : "um"} canal de voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ canal de voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + var djs = client.settings.get(newQueue.id, `djroles`).map(r => `<@&${r}>`); + if (djs.length == 0) djs = "`não configurado`"; + else djs.join(", "); + let newTrack = newQueue.songs[0]; + let embed = new MessageEmbed().setColor(ee.color) + .setDescription(`Veja a [fila no **DASHBOARD** ao vivo!](https://king-v13.kingprogrammer.repl.co/queuedashboard${newQueue.id})`) + .addField(`💡 Requerido por:`, `>>> ${newTrack.user}`, true) + .addField(`⏱ Duração:`, `>>> \`${newQueue.formattedCurrentTime} / ${newTrack.formattedDuration}\``, true) + .addField(`🌀 Fila:`, `>>> \`${newQueue.songs.length} song(s)\`\n\`${newQueue.formattedDuration}\``, true) + .addField(`🔊 Volume:`, `>>> \`${newQueue.volume} %\``, true) + .addField(`♾ Loop:`, `>>> ${newQueue.repeatMode ? newQueue.repeatMode === 2 ? `${client.allEmojis.check_mark} \`Queue\`` : `${client.allEmojis.check_mark} \`Song\`` : `${client.allEmojis.x}`}`, true) + .addField(`↪️ Reprodução automática:`, `>>> ${newQueue.autoplay ? `${client.allEmojis.check_mark}` : `${client.allEmojis.x}`}`, true) + .addField(`❔ Baixar música:`, `>>> [\`Clique aqui\`](${newTrack.streamURL})`, true) + .addField(`❔ Filtros${newQueue.filters.length > 0 ? "s": ""}:`, `>>> ${newQueue.filters && newQueue.filters.length > 0 ? `${newQueue.filters.map(f=>`\`${f}\``).join(`, `)}` : `${client.allEmojis.x}`}`, newQueue.filters.length > 1 ? false : true) + .addField(`🎧 CARGOS-DJ${client.settings.get(newQueue.id, "djroles").length > 1 ? "s": ""}:`, `>>> ${djs}`, client.settings.get(newQueue.id, "djroles").length > 1 ? false : true) + .setAuthor(`${newTrack.name}`, `https://c.tenor.com/HJvqN2i4Zs4AAAAj/milk-and-mocha-cute.gif`, newTrack.url) + .setThumbnail(`https://img.youtube.com/vi/${newTrack.id}/mqdefault.jpg`) + .setFooter(`${newTrack.user.tag}`, newTrack.user.displayAvatarURL({ + dynamic: true + })); + message.reply({ + embeds: [embed] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} diff --git a/commands/Fila/volume.js b/commands/Fila/volume.js new file mode 100644 index 0000000..71c0f2a --- /dev/null +++ b/commands/Fila/volume.js @@ -0,0 +1,119 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "volume", //the command name for the Slash Command + + category: "Fila", + aliases: ["vol"], + usage: "volume <80>", + + description: "Ajusta o volume da música", //the command description for Slash Command Overview + cooldown: 10, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um "} Canal de Voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ Canal de voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu n~so estou tocando nada agora!**`) + ], + + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + if (!args[0]) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Por favor, adicione um volume!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(message.guild.id, "prefix")}volume <80>\``) + ], + }); + } + let volume = Number(args[0]) + if (volume > 150 || volume < 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **O volume deve estar entre \`0\` e \`150\`!**`) + ], + + }) + await newQueue.setVolume(volume); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`🔊 **Volume definido para \`${volume}\`!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Filtro/add.js b/commands/Filtro/add.js new file mode 100644 index 0000000..ba5c87b --- /dev/null +++ b/commands/Filtro/add.js @@ -0,0 +1,117 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const FiltersSettings = require("../../botconfig/filters.json"); +const { + check_if_dj +} = require("../../handlers/functions") + +module.exports = { + name: "addfilter", //the command name for the Slash Command + category: "Filtro", + usage: "addfilter ", + aliases: ["addfilters", "add", "addf", "addfiltro"], + + description: "Adicione um filtro aos filtros", //the command description for Slash Command Overview + cooldown: 5, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + const { + member, + guildId, + guild + } = message; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Junte-se ${guild.me.voice.channel? "__ao meu__": "a um"} canal de voz primeiro!**`) + ], + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Junte-se ao __meu__ canal de voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x}**Você não é um DJ e a música não foi requisitada por você!**`) + .setDescription(`**CARGOS-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + let filters = args; + if (filters.some(a => !FiltersSettings[a])) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você adicionou pelo menos um filtro, que é inválido!**`) + .setDescription("**Para definir vários filtros, adicione um ESPAÇO (` `) entre! ** ") .addField ("** Todos os filtros válidos:**", Object.keys(FiltersSettings).map(f => `\`${f}\``).join(", ") + "\n\n**Nota:**\n> *Todos os filtros, começando com o personalizado, têm seu próprio Comando, use-os para definir o valor personalizado que você deseja!*") + ], + }) + } + let toAdded = []; + //add new filters + filters.forEach((f) => { + if (!newQueue.filters.includes(f)) { + toAdded.push(f) + } + }) + if (!toAdded || toAdded.length == 0) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não adicionou um Filtro, que ainda não está nos Filtros.**`) + .addField("**Todos os __Filtros__ Atuais**", newQueue.filters.map(f => `\`${f}\``).join(", ")) + ], + }) + } + await newQueue.setFilter(toAdded); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`♨️ **Adicionado ${toAdded.length} ${toAdded.length == filters.length ? "Filtros": `de ${filters.length} Filtros! O Resto já fazia parte dos Filtros!`}**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Filtro/clear.js b/commands/Filtro/clear.js new file mode 100644 index 0000000..a9433ff --- /dev/null +++ b/commands/Filtro/clear.js @@ -0,0 +1,89 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "clear", //the command name for the Slash Command + + category: "Filtro", + usage: "clear", + aliases: ["clearfilters", "clearf", "cfilters", "cfilter", "clearfilter"], + + description: "Limpa todos os filtros", //the command description for Slash Command Overview + cooldown: 5, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + const { + member, + guildId, + guild + } = message; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ Canal de voz primeiro!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora**`) + ], + + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x}**Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + await newQueue.setFilter(false); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`🗑 **Todos os filtros foram apagados!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} diff --git a/commands/Filtro/custombassboost.js b/commands/Filtro/custombassboost.js new file mode 100644 index 0000000..30235f0 --- /dev/null +++ b/commands/Filtro/custombassboost.js @@ -0,0 +1,119 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +const FiltersSettings = require("../../botconfig/filters.json"); +module.exports = { + name: "custombassboost", //the command name for the Slash Command + + category: "Filtro", + usage: "custombassboost ", + aliases: ["bassboost", "bb", "bass", "custombass", "cbassboost", "cbass", "cbb", "custombb"], + + description: "Define um Bassboost personalizado com ganho!", //the command description for Slash Command Overview + cooldown: 5, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + const { + member, + guildId, + guild + } = message; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ Canal de voz primeiro!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x}**Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + if (!args[0]) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Por favor, adicione um Bassboost-Gain entre 0 e 20!**`) + ], + }) + } + let bass_gain = parseInt(args[0]) + + if (bass_gain > 20 || bass_gain < 0) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **O ganho de Bassboost deve estar entre 0 e 20!**`) + ], + }) + } + FiltersSettings.custombassboost = `bass=g=${bass_gain},dynaudnorm=f=200`; + client.distube.filters = FiltersSettings; + //add old filters so that they get removed + //if it was enabled before then add it + if (newQueue.filters.includes("custombassboost")) { + await newQueue.setFilter(["custombassboost"]); + } + await newQueue.setFilter(["custombassboost"]); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`♨️ **Bassboost definido para ${bass_gain}!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Filtro/customspeed.js b/commands/Filtro/customspeed.js new file mode 100644 index 0000000..7eabd98 --- /dev/null +++ b/commands/Filtro/customspeed.js @@ -0,0 +1,118 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +const FiltersSettings = require("../../botconfig/filters.json"); +module.exports = { + name: "customspeed", //the command name for the Slash Command + + category: "Filtro", + usage: "speed ", + aliases: ["customspeed", "changespeed", "cspeed", "mudarvelocidade", "velocidade"], + + description: "Altera a velocidade da música!", //the command description for Slash Command Overview + cooldown: 5, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + const { + member, + guildId, + guild + } = message; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ Canal de voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x}**Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + if (!args[0]) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Adicione um valor de velocidade entre 0+ e 2!**`) + ], + }) + } + let speed_amount = parseInt(args[0]) + if (speed_amount <= 0 || speed_amount > 2) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Adicione um valor de velocidade entre 0+ e 2!**`) + ], + }) + } + FiltersSettings.customspeed = `atempo=${speed_amount}`; + client.distube.filters = FiltersSettings; + //add old filters so that they get removed + //if it was enabled before then add it + if (newQueue.filters.includes("customspeed")) { + await newQueue.setFilter(["customspeed"]); + } + await newQueue.setFilter(["customspeed"]); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`♨**Velociade definida para ${speed_amount}!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Filtro/list.js b/commands/Filtro/list.js new file mode 100644 index 0000000..1152b2c --- /dev/null +++ b/commands/Filtro/list.js @@ -0,0 +1,68 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const FiltersSettings = require("../../botconfig/filters.json"); +const { + check_if_dj +} = require("../../handlers/functions") + +module.exports = { + name: "filters", //the command name for the Slash Command + + category: "Filtro", + usage: "filters", + aliases: ["listfilter", "listfilters", "allfilters"], + + description: "Liste todos os filtros ativos e possíveis!", //the command description for Slash Command Overview + cooldown: 5, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + const { + member, + guildId, + guild + } = message; + const { + channel + } = member.voice; + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .addField("**Todos os filtros disponíveis:**", Object.keys(FiltersSettings).map(f => `\`${f}\``).join(", ") + "\n\n**Nota:**\n> *Todos os filtros, começando com o personalizado, têm seu próprio Comando, use-os para definir o valor personalizado que você deseja!*") + ], + }) + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .addField("**Todos os filtros disponíveis:**", Object.keys(FiltersSettings).map(f => `\`${f}\``).join(", ") + "\n\n**Nota:**\n> *Todos os filtros, começando com o personalizado, têm seu próprio Comando, use-os para definir o valor personalizado que você deseja!*") + .addField("**Todos os Filtros _disponiveis__:**", newQueue.filters.map(f => `\`${f}\``).join(", ")) + ], + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Filtro/remove.js b/commands/Filtro/remove.js new file mode 100644 index 0000000..83500bf --- /dev/null +++ b/commands/Filtro/remove.js @@ -0,0 +1,121 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +const FiltersSettings = require("../../botconfig/filters.json"); +module.exports = { + name: "removefilter", //the command name for the Slash Command + + category: "Filtro", + usage: "removefilter ", + aliases: ["removefilters", "remove", "removef"], + + description: "Remove um filtro da fila", //the command description for Slash Command Overview + cooldown: 5, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + const { + member, + guildId, + guild + } = message; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ canal de voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x}**Você não é um DJ e não é Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + let filters = args; + if (filters.some(a => !FiltersSettings[a])) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você adicionou pelo menos um filtro, que é inválido!**`) + .setDescription("**Para definir vários filtros, adicione um ESPAÇO entre (` `)!**") + .addField("**All Valid Filters:**", Object.keys(FiltersSettings).map(f => `\`${f}\``).join(", ") + "\n\n**Nota:**\n> *Todos os filtros, começando com o personalizado, têm seu próprio Comando, use-os para definir o valor personalizado que você deseja!*") + ], + }) + } + let toRemove = []; + //add new filters bassboost, clear --> [clear] -> [bassboost] + filters.forEach((f) => { + if (newQueue.filters.includes(f)) { + toRemove.push(f) + } + }) + if (!toRemove || toRemove.length == 0) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não adicionou um Filtro, que está nos Filtros.**`) + .addField("**Todos os Filtros __Disponiveis__:**", newQueue.filters.map(f => `\`${f}\``).join(", ")) + ], + }) + } + await newQueue.setFilter(toRemove); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`♨**Removido ${toRemove.length} ${toRemove.length == filters.length ? "Filtros": `de ${filters.length} Filtros! O resto ainda não fazia parte dos filtros!`}**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Filtro/set.js b/commands/Filtro/set.js new file mode 100644 index 0000000..5eab689 --- /dev/null +++ b/commands/Filtro/set.js @@ -0,0 +1,122 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +const FiltersSettings = require("../../botconfig/filters.json"); +module.exports = { + name: "setfilter", //the command name for the Slash Command + + category: "Filtro", + usage: "setfilter ", + aliases: ["setfilters", "set", "setf", "definirfiltro", "mudarfiltro"], + + description: "Define (substitui) todos os filtros", //the command description for Slash Command Overview + cooldown: 5, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + const { + member, + guildId, + guild + } = message; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ canal de voz primeiro!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x}**Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + let filters = args; + if (filters.some(a => !FiltersSettings[a])) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você adicionou pelo menos um filtro, que é inválido!**`) + .setDescription("**Para definir vários filtros, adicione um ESPAÇO no meio (` `)!**") + .addField("**All Valid Filters:**", Object.keys(FiltersSettings).map(f => `\`${f}\``).join(", ") + "\n\n**Nota:**\n> *Todos os filtros, começando com o personalizado, têm seu próprio Comando, use-os para definir o valor personalizado que você deseja!*") + ], + }) + } + let amount = filters.length; + let toAdded = filters; + //add old filters so that they get removed + newQueue.filters.forEach((f) => { + if (!filters.includes(f)) { + toAdded.push(f) + } + }) + if (!toAdded || toAdded.length == 0) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não adicionou um Filtro, que (não) ainda está nos Filtros.**`) + .addField("**Todo os Filtros __Disponiveis__:**", newQueue.filters.map(f => `\`${f}\``).join(", ")) + ], + }) + } + await newQueue.setFilter(filters); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`♨**Definido ${amount} Filtros!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Info/botinfo.js b/commands/Info/botinfo.js new file mode 100644 index 0000000..5a5aa64 --- /dev/null +++ b/commands/Info/botinfo.js @@ -0,0 +1,184 @@ +const { + MessageEmbed +} = require("discord.js"); +const Discord = require("discord.js"); +const config = require("../../botconfig/config.json"); +const prefix = require("../../botconfig/config.json"); +var ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const prettyMilliseconds = require("pretty-ms"); +let cpuStat = require("cpu-stat"); +let os = require("os"); +module.exports = { + name: "botinfo", //the command name for execution & for helpcmd [OPTIONAL] + category: "Info", + usage: "botinfo", + aliases: ["info",], + cooldown: 5, //the command cooldown for execution & for helpcmd [OPTIONAL] + description: "Mostra informações sobre o bot", //the command description for helpcmd [OPTIONAL] + memberpermissions: [], //Only allow members with specific Permissions to execute a Commmand [OPTIONAL] + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + let prefix = client.settings.get(message.guild.id, `prefix`); + if (prefix === null) prefix = config.prefix; + + let djs = ""; + if (client.settings.get(message.guild.id, `djroles`).join("") === "") djs = "não configurado" + else + for (let i = 0; i < client.settings.get(message.guild.id, `djroles`).length; i++) { + djs += "<@&" + client.settings.get(message.guild.id, `djroles`)[i] + "> | " + } + + try { + cpuStat.usagePercent(function (e, percent, seconds) { + try { + if (e) return console.log(String(e.stack).red); + + let connectedchannelsamount = 0; + let guilds = client.guilds.cache.map((guild) => guild); + for (let i = 0; i < guilds.length; i++) { + if (guilds[i].me.voice.channel) connectedchannelsamount += 1; + } + if (connectedchannelsamount > client.guilds.cache.size) connectedchannelsamount = client.guilds.cache.size; + + const botinfo = new MessageEmbed() + .setAuthor(client.user.username, client.user.displayAvatarURL()) + .setTitle("__**Informações Basicas:**__") + .setColor(ee.color) + .addField(`<:world:884218357304422420> Servidores`, `\`Total: ${client.guilds.cache.size} servidores\``, true) + .addField(`<:people:814336053648949268> Usuarios`, `\`Total: ${client.users.cache.size}\` usuarios`, true) + .addField("\u200b", `\u200b`, true) + .addField(`<:channel:884228094456627270> Canais`, `\`Total: ${client.channels.cache.size}\``, true) + .addField(`<:commands:884244807608827934> Comandos`, `\`Total: ${client.commands.map(cmd => cmd.name).length}\``, true) + .addField("\u200b", `\u200b`, true) + .addField("<:voice:884221993510133822> Canais de Voz", `\`${client.channels.cache.filter((ch) => ch.type === "GUILD_VOICE" || ch.type === "GUILD_STAGE_VOICE").size}\``, true) + .addField("<:voice:884221993510133822> Canais de Voz Conectados", `\`${connectedchannelsamount}\``, true) + .addField("\u200b", `\u200b`, true) + .addField("<:discord:884218858108489759> Livraria", `\`v${Discord.version}\``, true) + .addField("<:node:884214638567387176> Node", `\`${process.version}\``, true) + .addField("\u200b", `\u200b`, true) + .addField(`<:ram:884220163354927154> RAM`, `\`${Math.trunc((process.memoryUsage().heapUsed) / 1024 / 1000)} MB / ${Math.trunc(os.totalmem() / 1024 / 1000)} MB (${Math.round((Math.round(process.memoryUsage().heapUsed / 1024 / 1024) / Math.round(os.totalmem() / 1024 / 1024)) * 100)}%)\``, true) + .addField("<:cpu:884219478664175687> CPU", `\`\`\`md\n${os.cpus().map((i) => `${i.model}`)[0]}\`\`\``) + .addField("<:cpu:884219478664175687> Uso da CPU", `\`${percent.toFixed(2)}%\``, true) + .addField(":gear: Arquitetura", `\`${os.arch()}\``, true) + .addField("\u200b", `\u200b`, true) + .addField("<:linux:884229003672686612> Sistema operacional", `\`${os.platform()}\``, true) + .addField("\u200b", `\u200b`, true) + .addField('__**Configurações do Servidor:**__', `\u200b`, true) + .addField(`📌 Prefixo do Servidor`, `\`${prefix}\``, true) .addField(`🎧 Cargos-DJ`, `${djs}`, true) + .addField("\u200b", `\u200b`) + .addField(":alarm_clock: Tempo de atividade ", `\`${prettyMilliseconds(client.uptime)}\``, true) + .addField("<:latency:884230247032180806> Latência da API", `\`${client.ws.ping}ms\``, true) + .setFooter('Criado por: KingKiller®#1889','https://cdn.discordapp.com/avatars/718669518452293713/1893ff302ddf846e106f47159d308367.webp?size=4096'); + message.reply({ + embeds: [botinfo] + }); + + } catch (e) { + console.log(e) + let connectedchannelsamount = 0; + let guilds = client.guilds.cache.map((guild) => guild); + for (let i = 0; i < guilds.length; i++) { + if (guilds[i].me.voice.channel) connectedchannelsamount += 1; + } + if (connectedchannelsamount > client.guilds.cache.size) connectedchannelsamount = client.guilds.cache.size; + const botinfo = new MessageEmbed() + .setAuthor(client.user.username, client.user.displayAvatarURL()) + .setTitle("__**Informações Basicas:**__") + .setColor(ee.color) + .addField(`<:world:884218357304422420> Servidores`, `\`Total: ${client.guilds.cache.size}\``, true) + .addField(`<:people:814336053648949268> Usuarios`, `\`Total: ${client.users.cache.size}\``, true) + .addField("\u200b", `\u200b`, true) + .addField(`<:channel:884228094456627270> Canais`, `\`Total: ${client.channels.cache.size}\``, true) + .addField(`<:commands:884244807608827934> Comandos`, `\`Total: ${client.commands.map(cmd => cmd.name).length}\``, true) + .addField("\u200b", `\u200b`, true) + .addField("<:voice:884221993510133822> Canais de Voz", `\`${client.channels.cache.filter((ch) => ch.type === "GUILD_VOICE" || ch.type === "GUILD_STAGE_VOICE").size}\``, true) + .addField("<:voice:884221993510133822> Canais de Voz Conectados", `\`${connectedchannelsamount}\``, true) + .addField("\u200b", `\u200b`, true) + .addField("<:discord:884218858108489759> Livraria", `\`v${Discord.version}\``, true) + .addField("<:node:884214638567387176> Node", `\`${process.version}\``, true) + .addField("\u200b", `\u200b`, true) + .addField(`<:ram:884220163354927154> RAM`, `\`${Math.trunc((process.memoryUsage().heapUsed) / 1024 / 1000)} MB / ${Math.trunc(os.totalmem() / 1024 / 1000)} MB (${Math.round((Math.round(process.memoryUsage().heapUsed / 1024 / 1024) / Math.round(os.totalmem() / 1024 / 1024)) * 100)}%)\``, true) + .addField("<:cpu:884219478664175687> CPU", `\`\`\`md\n${os.cpus().map((i) => `${i.model}`)[0]}\`\`\``) + .addField("<:cpu:884219478664175687> Uso da CPU", `\`${percent.toFixed(2)}%\``, true) + .addField(":gear: Arquitetura", `\`${os.arch()}\``, true) + .addField("\u200b", `\u200b`, true) + .addField("<:linux:884229003672686612> Sistema operacional", `\`${os.platform()}\``, true) + .addField("\u200b", `\u200b`, true) + .addField('__**Configurações do Servidor:**__', `\u200b`, true) + .addField(`📌 Prefixo do Servidor`, `\`${prefix}\``, true) .addField(`🎧 Cargos-DJ`, `${djs}`, true) + .addField("\u200b", `\u200b`) + .addField(":alarm_clock: Tempo de atividade ", `\`${prettyMilliseconds(client.uptime)}\``, true) + .addField("<:latency:884230247032180806> Latência da API", `\`${client.ws.ping}ms\``, true) + .setFooter('Criado por: KingKiller®#1889','https://cdn.discordapp.com/avatars/718669518452293713/1893ff302ddf846e106f47159d308367.webp?size=4096'); + message.reply({ + embeds: [botinfo] + }); + } + }) + + function duration(duration, useMilli = false) { + let remain = duration; + let days = Math.floor(remain / (1000 * 60 * 60 * 24)); + remain = remain % (1000 * 60 * 60 * 24); + let hours = Math.floor(remain / (1000 * 60 * 60)); + remain = remain % (1000 * 60 * 60); + let minutes = Math.floor(remain / (1000 * 60)); + remain = remain % (1000 * 60); + let seconds = Math.floor(remain / (1000)); + remain = remain % (1000); + let milliseconds = remain; + let time = { + days, + hours, + minutes, + seconds, + milliseconds + }; + let parts = [] + if (time.days) { + let ret = time.days + ' Dia' + if (time.days !== 1) { + ret += 's' + } + parts.push(ret) + } + if (time.hours) { + let ret = time.hours + ' Hr' + if (time.hours !== 1) { + ret += 's' + } + parts.push(ret) + } + if (time.minutes) { + let ret = time.minutes + ' Min' + if (time.minutes !== 1) { + ret += 's' + } + parts.push(ret) + + } + if (time.seconds) { + let ret = time.seconds + ' Seg' + if (time.seconds !== 1) { + ret += 's' + } + parts.push(ret) + } + if (useMilli && time.milliseconds) { + let ret = time.milliseconds + ' ms' + parts.push(ret) + } + if (parts.length === 0) { + return ['instantly'] + } else { + return parts + } + } + return; + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Info/commandcount.js b/commands/Info/commandcount.js new file mode 100644 index 0000000..808644f --- /dev/null +++ b/commands/Info/commandcount.js @@ -0,0 +1,31 @@ +const { + MessageEmbed +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +var ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +module.exports = { + name: "commandcount", //the command name for execution & for helpcmd [OPTIONAL] + category: "Info", + usage: "commandcount", + aliases: ["cmds", "commandc", "count", "cmdcount"], + cooldown: 1, //the command cooldown for execution & for helpcmd [OPTIONAL] + description: "Mostra a quantidade de comandos e categorias", //the command description for helpcmd [OPTIONAL] + memberpermissions: [], //Only allow members with specific Permissions to execute a Commmand [OPTIONAL] + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`:gear: **[${client.commands.size}] Comandos**`) + .setDescription(`:gear: **[${client.categories.length}] Categorias**\n\n:gear: **[${client.slashCommands.size + client.slashCommands.map(d => d.options).flat().length}]Comandos Slash**\n\n`) + ] + }); + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Info/help.js b/commands/Info/help.js new file mode 100644 index 0000000..a3e0c0f --- /dev/null +++ b/commands/Info/help.js @@ -0,0 +1,31 @@ +const { + MessageEmbed +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const websiteSettings = require("../../dashboard/settings.json"); +module.exports = { + name: "help", //the command name for execution & for helpcmd [OPTIONAL] + + category: "Info", + usage: "help [cmdname]", + aliases: ["h", "halp", "helpme", "hilfe"], + + cooldown: 1, //the command cooldown for execution & for helpcmd [OPTIONAL] + description: "Retorna todos os comandos ou um comando específico", //the command description for helpcmd [OPTIONAL] + memberpermissions: [], //Only allow members with specific Permissions to execute a Commmand [OPTIONAL] + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + + const embed = new MessageEmbed() + .setColor(ee.color) + .setThumbnail(ee.footericon) + .setTitle("⚠ Comando ainda em deselvolvimento") + + await message.reply({ embeds: [embed]}); + + } +} + diff --git a/commands/Info/invite.js b/commands/Info/invite.js new file mode 100644 index 0000000..f1ab662 --- /dev/null +++ b/commands/Info/invite.js @@ -0,0 +1,32 @@ +const { + MessageEmbed +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +var ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +module.exports = { + name: "invite", //the command name for execution & for helpcmd [OPTIONAL] + + category: "Info", + usage: "invite", + aliases: ["inviteme", "addme", "convite", "convidar" ], + + cooldown: 5, //the command cooldown for execution & for helpcmd [OPTIONAL] + description: "Envia um link de convite para você", //the command description for helpcmd [OPTIONAL] + memberpermissions: [], //Only allow members with specific Permissions to execute a Commmand [OPTIONAL] + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.color) + .setFooter(ee.footertext, ee.footericon) + .setDescription(`[**Clique aqui para me convidar!**](https://discord.com/api/oauth2/authorize?client_id=${client.user.id}&permissions=8&scope=bot%20applications.commands)\n\n||[**Clique aqui para me convidar __SEM__ Comandos Slash!**](https://discord.com/api/oauth2/authorize?client_id=${client.user.id}&permissions=8&scope=bot)||`) + ] + }); + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Info/ping.js b/commands/Info/ping.js new file mode 100644 index 0000000..a8013b9 --- /dev/null +++ b/commands/Info/ping.js @@ -0,0 +1,26 @@ +const { MessageEmbed } = require('discord.js'); +var ee = require(`../../botconfig/embed.json`) +module.exports = { + name: "ping", + description: "Exibe a latência do usuário e do bot", + category: "info", + + run: async (client, message, args) => { + + let start = Date.now(); + + message.channel.send("**Parece que o bot está lento...**").then(m => { + + let end = Date.now(); + let ping = m.createdTimestamp - message.createdTimestamp + const embed = new MessageEmbed() + .setAuthor("🏓 | Pong!", message.author.avatarURL()) + .setColor("#00FA9A") + .addField("Latência da API", `\`${Math.round(client.ws.ping)}ms\``, true) + .addField("latência do Usuário", `\`${end - start}ms\``, true) + .setFooter(ee.footertext, ee.footericon); + message.channel.send({ embeds: [embed]}) + m.delete() + }) + } +}; \ No newline at end of file diff --git a/commands/Info/source.js b/commands/Info/source.js new file mode 100644 index 0000000..91ee885 --- /dev/null +++ b/commands/Info/source.js @@ -0,0 +1,32 @@ +const { + MessageEmbed +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +var ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +module.exports = { + name: "source", //the command name for execution & for helpcmd [OPTIONAL] + + category: "Info", + usage: "source", + aliases: ["github"], + + cooldown: 5, //the command cooldown for execution & for helpcmd [OPTIONAL] + description: "Envia a você informações de código-fonte", //the command description for helpcmd [OPTIONAL] + memberpermissions: [], //Only allow members with specific Permissions to execute a Commmand [OPTIONAL] + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.color) + .setFooter(ee.footertext, ee.footericon) + .setDescription(`**WHEN YOU USE THE SOURCE CODE, __GIVE CREDITS__!** :heart:\n\n[Link para a fonte](https://github.com/Programador-jr/King)`) + ] + }); + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Info/support.js b/commands/Info/support.js new file mode 100644 index 0000000..6dabcd3 --- /dev/null +++ b/commands/Info/support.js @@ -0,0 +1,54 @@ +const { + MessageEmbed +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +var ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +module.exports = { + name: "support", //the command name for execution & for helpcmd [OPTIONAL] + + category: "Info", + usage: "support", + aliases: ["server"], + + cooldown: 1, //the command cooldown for execution & for helpcmd [OPTIONAL] + description: "Sends a Link of the Support Server", //the command description for helpcmd [OPTIONAL] + memberpermissions: [], //Only allow members with specific Permissions to execute a Commmand [OPTIONAL] + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + message.reply({ + content: "https://discord.gg/milrato" + }); + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} +/** + * @INFO + * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js + * @INFO + * Work for Milrato Development | https://milrato.eu + * @INFO + * Please mention Him / Milrato Development, when using this Code! + * @INFO + */ diff --git a/commands/Info/uptime.js b/commands/Info/uptime.js new file mode 100644 index 0000000..93d36df --- /dev/null +++ b/commands/Info/uptime.js @@ -0,0 +1,60 @@ +const { + MessageEmbed +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const { + duration +} = require("../../handlers/functions") +const settings = require("../../botconfig/settings.json"); +module.exports = { + name: "uptime", //the command name for execution & for helpcmd [OPTIONAL] + + category: "Info", + usage: "uptime", + + cooldown: 1, //the command cooldown for execution & for helpcmd [OPTIONAL] + description: "Returns the duration on how long the Bot is online", //the command description for helpcmd [OPTIONAL] + memberpermissions: [], //Only allow members with specific Permissions to execute a Commmand [OPTIONAL] + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`:white_check_mark: **${client.user.username}** is since:\n ${duration(client.uptime).map(t=>`\`${t}\``).join(", ")} online`) + ] + }); + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} +/** + * @INFO + * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/Discord-Js-Handler-Template + * @INFO + * Work for Milrato Development | https://milrato.eu + * @INFO + * Please mention Him / Milrato Development, when using this Code! + * @INFO + */ diff --git a/commands/Musica/addrelated.js b/commands/Musica/addrelated.js new file mode 100644 index 0000000..a173dde --- /dev/null +++ b/commands/Musica/addrelated.js @@ -0,0 +1,96 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +module.exports = { + name: "addrelated", //the command name for the Slash Command + category: "Musica", + usage: "addrelated", + aliases: ["semelhante", "igual", "addigual"], + description: "Adicione uma música semelhante / relacionada à música atual!", //the command description for Slash Command Overview + cooldown: 2, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Junte-se ${guild.me.voice.channel? "__ao meu__": "a um"} canal de voz primeiro!**`) + ], + + }) + if (channel.userLimit != 0 && channel.full) + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`<:declined:780403017160982538> Seu canal de voz está cheio, não consigo entrar!`) + ], + }); + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`<:declined:780403017160982538> Já estou conectado em outro lugar`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não esto tocando nada agora**`) + ], + }) + //update it without a response! + let thenewmsg = await message.reply({ + content: `🔍 Procurando música relacionada por... **${newQueue.songs[0].name}**`, + }).catch(e => { + console.log(e) + }) + await newQueue.addRelatedSong(); + await thenewmsg.edit({ + content: `👍 Adicionado: **${newQueue.songs[newQueue.songs.length - 1].name}**`, + }).catch(e => { + console.log(e) + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Musica/autoplay.js b/commands/Musica/autoplay.js new file mode 100644 index 0000000..9821aa5 --- /dev/null +++ b/commands/Musica/autoplay.js @@ -0,0 +1,100 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "autoplay", //the command name for the Slash Command + + category: "Musica", + aliases: ["ap"], + usage: "autoplay", + + description: "Alterna a reprodução automática", //the command description for Slash Command Overview + cooldown: 5, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "ao meu" : "a um"} canal de voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Junte-se ao __meu__ canal de voz de!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + await newQueue.toggleAutoplay(); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`**${newQueue.autoplay ? `${client.allEmojis.check_mark} Habilitado` :`${client.allEmojis.x} Desabilitado`} Autoplay!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Musica/mix.js b/commands/Musica/mix.js new file mode 100644 index 0000000..95880a1 --- /dev/null +++ b/commands/Musica/mix.js @@ -0,0 +1,128 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +module.exports = { + name: "mix", //the command name for the Slash Command + + category: "Musica", + aliases: ["musicmix", "playmix", "playlist", "playmusicmix"], + usage: "mix [MIXNOME]", + + description: "Toca uma mixagem definida", //the command description for Slash Command Overview + cooldown: 2, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de voz primeiro!**`) + ], + + }) + if (channel.userLimit != 0 && channel.full) + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`<:declined:780403017160982538> Seu canal de voz está cheio, não consigo entrar!`) + ], + }); + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`<:declined:780403017160982538> Já estou conectado em outro lugar`) + ], + }); + } + + let link = "https://open.spotify.com/playlist/37i9dQZF1DXc6IFF23C9jj"; + if (args[0]) { + //ncs | no copyrighted music + if (args[0].toLowerCase().startsWith("n")) link = "https://open.spotify.com/playlist/7sZbq8QGyMnhKPcLJvCUFD"; + //pop + if (args[0].toLowerCase().startsWith("p")) link = "https://open.spotify.com/playlist/37i9dQZF1DXc6IFF23C9jj"; + //default + if (args[0].toLowerCase().startsWith("d")) link = "https://open.spotify.com/playlist/37i9dQZF1DXc6IFF23C9jj"; + //remixes from Magic Release + if (args[0].toLowerCase().startsWith("re")) link = "https://www.youtube.com/watch?v=NX7BqdQ1KeU&list=PLYUn4YaogdahwfEkuu5V14gYtTqODx7R2" + //rock + if (args[0].toLowerCase().startsWith("ro")) link = "https://open.spotify.com/playlist/37i9dQZF1DWXRqgorJj26U"; + //oldgaming + if (args[0].toLowerCase().startsWith("o")) link = "https://www.youtube.com/watch?v=iFOAJ12lDDU&list=PLYUn4YaogdahPQPTnBGCrytV97h8ABEav" + //gaming + if (args[0].toLowerCase().startsWith("g")) link = "https://open.spotify.com/playlist/4a54P2VHy30WTi7gix0KW6"; + //Charts + if (args[0].toLowerCase().startsWith("cha")) link = "https://www.youtube.com/playlist?list=PLMC9KNkIncKvYin_USF1qoJQnIyMAfRxl" + //Chill + if (args[0].toLowerCase().startsWith("chi")) link = "https://open.spotify.com/playlist/37i9dQZF1DX4WYpdgoIcn6"; + //Jazz + if (args[0].toLowerCase().startsWith("j")) link = "https://open.spotify.com/playlist/37i9dQZF1DXbITWG1ZJKYt"; + //blues + if (args[0].toLowerCase().startsWith("b")) link = "https://open.spotify.com/playlist/37i9dQZF1DXd9rSDyQguIk"; + //strange-fruits + if (args[0].toLowerCase().startsWith("s")) link = "https://open.spotify.com/playlist/6xGLprv9fmlMgeAMpW0x51"; + //magic-release + if (args[0].toLowerCase().startsWith("ma")) link = "https://www.youtube.com/watch?v=WvMc5_RbQNc&list=PLYUn4Yaogdagvwe69dczceHTNm0K_ZG3P" + //metal + if (args[0].toLowerCase().startsWith("me")) link = "https://open.spotify.com/playlist/37i9dQZF1DX9qNs32fujYe"; + //heavy metal + if (args[0].toLowerCase().startsWith("h")) link = "https://open.spotify.com/playlist/37i9dQZF1DX9qNs32fujYe"; + } + let newMsg = await message.reply({ + content: `${client.allEmojis.loading} Carregando o**'Mix de música ${args[0] ? args[0] : "Predefinido"}'**`, + }); + try { + let queue = client.distube.getQueue(guildId) + let options = { + member: member, + } + if (!queue) options.textChannel = guild.channels.cache.get(channelId) + await client.distube.playVoiceChannel(channel, link, options) + //Edit the reply + newMsg.edit({ + content: `${queue.songs.length > 0 ? "👍 Carregado" : "🎶 Tocando Agora"}: **'${args[0] ? args[0] : "Predefinido"}'**`, + }); + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Musica/play.js b/commands/Musica/play.js new file mode 100644 index 0000000..323bd65 --- /dev/null +++ b/commands/Musica/play.js @@ -0,0 +1,112 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +module.exports = { + name: "play", //the command name for the Slash Command + + category: "Musica", + aliases: ["p", "pley", "tocar"], + usage: "play ", + + description: "Toca uma música / lista de reprodução em seu canal de voz", //the command description for Slash Command Overview + cooldown: 2, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //console.log(interaction, StringOption) + + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor entre em ${guild.me.voice.channel ? "__meu__" : "um"} canal de voz primeiro!**`) + ], + + }) + if (channel.userLimit != 0 && channel.full) + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(` Seu canal de voz está cheio, não consigo entrar!`) + ], + }); + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(` Já estou conectado em outro lugar`) + ], + }); + } + if (!args[0]) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Por favor adicione uma consulta de pesquisa!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(message.guild.id, "prefix")}play \``) + ], + }); + } + //let IntOption = options.getInteger("OPTIONNAME"); //same as in IntChoices //RETURNS NUMBER + const Text = args.join(" ") //same as in StringChoices //RETURNS STRING + //update it without a response! + let newmsg = await message.reply({ + content: `🔍 Procurando... \`\`\`${Text}\`\`\``, + }).catch(e => { + console.log(e) + }) + try { + let queue = client.distube.getQueue(guildId) + let options = { + member: member, + } + if (!queue) options.textChannel = guild.channels.cache.get(channelId) + await client.distube.playVoiceChannel(channel, Text, options) + //Edit the reply + newmsg.edit({ + content: `${queue.songs.length > 0 ? "👍 Adicionado" : "🎶 Tocando agora"}: \`\`\`css\n${Text}\n\`\`\``, + }).catch(e => { + console.log(e) + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Musica/playskip.js b/commands/Musica/playskip.js new file mode 100644 index 0000000..85c10ec --- /dev/null +++ b/commands/Musica/playskip.js @@ -0,0 +1,126 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "playskip", //the command name for the Slash Command + + category: "Musica", + aliases: ["ps"], + usage: "playskip ", + + description: "Toca uma música/lista de reprodução e pula!", //the command description for Slash Command Overview + cooldown: 2, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de voz primeiro!**`) + ], + + }) + if (channel.userLimit != 0 && channel.full) + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`<:declined:780403017160982538> Seu canal de voz está cheio, não consigo entrar!`) + ], + }); + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`<:declined:780403017160982538> Já estou conectado em outro lugar`) + ], + }); + } + if (!args[0]) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Adicione uma consulta de pesquisa!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(message.guild.id, "prefix")}playskip \``) + ], + }); + } + //let IntOption = options.getInteger("OPTIONNAME"); //same as in IntChoices //RETURNS NUMBER + const Text = args.join(" "); //same as in StringChoices //RETURNS STRING + //update it without a response! + let newmsg = await message.reply({ + content: `🔍 Procurando... \`\`\`${Text}\`\`\``, + }).catch(e => { + console.log(e) + }) + try { + let queue = client.distube.getQueue(guildId) + let options = { + member: member, + skip: true + } + if (!queue) options.textChannel = guild.channels.cache.get(channelId) + if (queue) { + if (check_if_dj(client, member, queue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, queue.songs[0])}`) + ], + }); + } + } + await client.distube.playVoiceChannel(channel, Text, options) + //Edit the reply + newmsg.edit({ + content: `${queue.songs.length > 0 ? "⏭ Pulando para" : "🎶 Tocando Agora"}: \`\`\`css\n${Text}\n\`\`\``, + }).catch(e => { + console.log(e) + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Musica/playtop.js b/commands/Musica/playtop.js new file mode 100644 index 0000000..05a1b56 --- /dev/null +++ b/commands/Musica/playtop.js @@ -0,0 +1,129 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "playtop", //the command name for the Slash Command + + category: "Musica", + aliases: ["pt"], + usage: "playtop ", + + description: "Toca uma música/lista de reprodução e adiciona ao topo!", //the command description for Slash Command Overview + cooldown: 2, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + + run: async (client, message, args) => { + try { + //console.log(interaction, StringOption) + + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de voz primeiro!**`) + ], + + }) + if (channel.userLimit != 0 && channel.full) + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`<:declined:780403017160982538> Seu canal de voz está cheio, não consigo entrar!`) + ], + }); + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`<:declined:780403017160982538> Já estou conectado em outro lugar`) + ], + }); + } + if (!args[0]) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Adicione uma consulta de pesquisa!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(message.guild.id, "prefix")}playtop \``) + ], + }); + } + //let IntOption = options.getInteger("OPTIONNAME"); //same as in IntChoices //RETURNS NUMBER + const Text = args.join(" "); //same as in StringChoices //RETURNS STRING + //update it without a response! + let newmsg = await message.reply({ + content: `🔍 Procurando... \`\`\`${Text}\`\`\``, + }).catch(e => { + console.log(e) + }) + try { + let queue = client.distube.getQueue(guildId) + let options = { + member: member, + unshift: true + } + if (!queue) options.textChannel = guild.channels.cache.get(channelId) + if (queue) { + if (check_if_dj(client, member, queue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, queue.songs[0])}`) + ], + }); + } + } + await client.distube.playVoiceChannel(channel, Text, options) + //Edit the reply + newmsg.edit({ + content: `${queue.songs.length > 0 ? "👍 Adicionado ao topo da fila" : "🎶 Tocando Agora"}: \`\`\`css\n${Text}\n\`\`\``, + }).catch(e => { + console.log(e) + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Musica/skip.js b/commands/Musica/skip.js new file mode 100644 index 0000000..b79d0d3 --- /dev/null +++ b/commands/Musica/skip.js @@ -0,0 +1,100 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "skip", //the command name for the Slash Command + + category: "Musica", + aliases: ["s", "proximo", "pular"], + usage: "skip", + + description: "Pula a faixa atual", //the command description for Slash Command Overview + cooldown: 5, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "ao meu" : "a um"} Canal de voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ canal de voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + await newQueue.skip(); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`⏭ **Pulei para a próxima música!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Musica/stop.js b/commands/Musica/stop.js new file mode 100644 index 0000000..ac2d1ac --- /dev/null +++ b/commands/Musica/stop.js @@ -0,0 +1,103 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "stop", //the command name for the Slash Command + + category: "Musica", + aliases: ["leave", "break", "destroy", "dis", "disconnect", "parar"], + usage: "stop", + + description: "Para de tocar e sai do canal!", //the command description for Slash Command Overview + cooldown: 5, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "ao meu" : "a um"} Canal de voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ canal de voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if(!newQueue) + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + await newQueue.stop() + //Reply with a Message + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`⏹ **Parou de tocar e saiu do canal!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + return + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/NSFW/4k.js b/commands/NSFW/4k.js deleted file mode 100644 index beed8f2..0000000 --- a/commands/NSFW/4k.js +++ /dev/null @@ -1,38 +0,0 @@ -const Discord = require("discord.js"); -const errors = require('../../assets/json/errors'); -module.exports = { - name: "4k", - category: "NSFW", - run:async (client, message, args) => { - message.delete({timeout: 5000}) - var superagent = require('superagent'); - - var errMessage = errors[Math.round(Math.random() * (errors.length - 1))]; - if (!message.channel.nsfw) { - message.react('💢'); - return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(errMessage)).then(msg => { - msg.delete({ timeout: 5000 }) - }) - } - - var lo = new Discord.MessageEmbed() - .setDescription(`Por favor, espere...`) - .setTimestamp() - - message.channel.send(lo).then(m => { - - superagent.get('https://nekobot.xyz/api/image').query({ type: '4k'}).end((err, response) => { - - var embed_nsfw = new Discord.MessageEmbed() - .setDescription(`**[A imagem não está carregando? Clique aqui](${response.body.message})**`) - .setColor('#FF1493') - .setTimestamp() - .setImage(response.body.message) - - m.edit(embed_nsfw); - }); - }); -} -} \ No newline at end of file diff --git a/commands/NSFW/anal.js b/commands/NSFW/anal.js deleted file mode 100644 index faa7291..0000000 --- a/commands/NSFW/anal.js +++ /dev/null @@ -1,40 +0,0 @@ -const Discord = require("discord.js"); -const errors = require('../../assets/json/errors'); - module.exports = { - name: "anal", - category: "NSFW", - run: async (client, message, args) => { - - message.delete({timeout: 5000}) - - var superagent = require('superagent'); - - var errMessage = errors[Math.round(Math.random() * (errors.length - 1))]; - if (!message.channel.nsfw) { - message.react('💢'); - return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(errMessage)).then(msg => { - msg.delete({ timeout: 5000 }) - }) - } - - var lo = new Discord.MessageEmbed() - .setDescription(`Por favor, espere...`) - .setTimestamp() - - message.channel.send(lo).then(m => { - - superagent.get('https://nekobot.xyz/api/image').query({ type: 'anal'}).end((err, response) => { - - var embed_nsfw = new Discord.MessageEmbed() - .setDescription(`**[A imagem não está carregando? Clique aqui](${response.body.message})**`) - .setColor(' #FF1493') - .setTimestamp() - .setImage(response.body.message) - - m.edit(embed_nsfw); - }); - }); -} -} \ No newline at end of file diff --git a/commands/NSFW/ass.js b/commands/NSFW/ass.js deleted file mode 100644 index 76f35a3..0000000 --- a/commands/NSFW/ass.js +++ /dev/null @@ -1,39 +0,0 @@ -const Discord = require("discord.js"); -const errors = require('../../assets/json/errors'); -module.exports = { - name: "ass", - category: "NSFW", - run:async (client, message, args) => { - message.delete({timeout: 5000}) - var superagent = require('superagent'); - - var errMessage = errors[Math.round(Math.random() * (errors.length - 1))]; - if (!message.channel.nsfw) { - message.react('💢'); - return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(errMessage)).then(msg => { - msg.delete({ timeout: 5000 }) - }) - } - - var lo = new Discord.MessageEmbed() - .setDescription(`Por favor, espere...`) - .setTimestamp() - - message.channel.send(lo).then(m => { - - superagent.get('https://nekobot.xyz/api/image').query({ type: 'ass'}).end((err, response) => { - - var embed_nsfw = new Discord.MessageEmbed() - .setTitle('Aqui está sua imagem...👀') - .setDescription(`**[A imagem não está carregando? Clique aqui](${response.body.message})**`) - .setColor('#FF1493') - .setTimestamp() - .setImage(response.body.message) - - m.edit(embed_nsfw); - }); - }); -} -} \ No newline at end of file diff --git a/commands/NSFW/boobs.js b/commands/NSFW/boobs.js deleted file mode 100644 index 19bd5bd..0000000 --- a/commands/NSFW/boobs.js +++ /dev/null @@ -1,36 +0,0 @@ -const client = require('nekos.life'); -const Discord = require('discord.js'); -const errors = require('../../assets/json/errors'); -const neko = new client(); - -module.exports = { - name: "boobs", - category: "NSFW", - run: async (client, message, args) => { - message.delete({timeout: 5000}) - var errMessage = errors[Math.round(Math.random() * (errors.length - 1))]; - if (!message.channel.nsfw) { - message.react('💢'); - return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(errMessage)).then(msg => { - msg.delete({ timeout: 5000 }) - }) - } - - async function work() { - let owo = (await neko.nsfw.boobs()); - - const hentaigif = new Discord.MessageEmbed() - .setTitle("A imagem não está carregando? Clique aqui") - .setDescription('Aqui está sua imagem...👀') - .setImage(owo.url) - .setColor(`#FF1493`) - .setURL(owo.url); - message.channel.send(hentaigif); - -} - - work(); -} - }; \ No newline at end of file diff --git a/commands/NSFW/gif.js b/commands/NSFW/gif.js deleted file mode 100644 index f65b7c1..0000000 --- a/commands/NSFW/gif.js +++ /dev/null @@ -1,38 +0,0 @@ -const Discord = require("discord.js"); -const errors = require('../../assets/json/errors'); - module.exports = { - name: "gif", - category: "NSFW", - run: async (client, message, args) => { - message.delete({timeout: 5000}) - var superagent = require('superagent'); - - var errMessage = errors[Math.round(Math.random() * (errors.length - 1))]; - if (!message.channel.nsfw) { - message.react('💢'); - return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(errMessage)).then(msg => { - msg.delete({ timeout: 5000 }) - }) - } - - var lo = new Discord.MessageEmbed() - .setDescription(`Por favor, espere...`) - .setTimestamp() - - message.channel.send(lo).then(m => { - - superagent.get('https://nekobot.xyz/api/image').query({ type: 'pgif'}).end((err, response) => { - - var embed_nsfw = new Discord.MessageEmbed() - .setDescription(`**[A imagem não está carregando? Clique aqui](${response.body.message})**`) - .setColor(' #FF1493') - .setTimestamp() - .setImage(response.body.message) - - m.edit(embed_nsfw); - }); - }); -} -} \ No newline at end of file diff --git a/commands/NSFW/hentai.js b/commands/NSFW/hentai.js deleted file mode 100644 index d626ca3..0000000 --- a/commands/NSFW/hentai.js +++ /dev/null @@ -1,40 +0,0 @@ -const Discord = require("discord.js"); -const errors = require('../../assets/json/errors'); -module.exports = { - name: "hentai", - category: "NSFW", - run:async (client, message, args) => { - message.delete({timeout: 5000}) - var superagent = require('superagent'); - - var errMessage = errors[Math.round(Math.random() * (errors.length - 1))]; - if (!message.channel.nsfw) { - message.react('💢'); - return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(errMessage)).then(msg => { - msg.delete({ timeout: 5000 }) - }) - } - - var lo = new Discord.MessageEmbed() - .setDescription(`Por favor, espere...`) - .setTimestamp() - - message.channel.send(lo).then(m => { - - superagent.get('https://nekobot.xyz/api/image').query({ type: 'hentai'}).end((err, response) => { - - var embed_nsfw = new Discord.MessageEmbed() - .setTimestamp() - .setFooter(message.author.username) - .setTitle('Aqui está sua imagem...👀') - .setColor('#FF1493') - .setDescription(`**[A imagem não está carregando? Clique aqui](${response.body.message})**`) - .setImage(response.body.message) - - m.edit(embed_nsfw); - }); - }); -} -} \ No newline at end of file diff --git a/commands/NSFW/hentaigif.js b/commands/NSFW/hentaigif.js deleted file mode 100644 index bd0518e..0000000 --- a/commands/NSFW/hentaigif.js +++ /dev/null @@ -1,36 +0,0 @@ -const client = require('nekos.life'); -const Discord = require('discord.js'); -const errors = require('../../assets/json/errors'); -const neko = new client(); - -module.exports = { - name: "hentaigif", - category: "NSFW", - run: async (client, message, args) => { - message.delete({timeout: 5000}) - var errMessage = errors[Math.round(Math.random() * (errors.length - 1))]; - if (!message.channel.nsfw) { - message.react('💢'); - return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(errMessage)).then(msg => { - msg.delete({ timeout: 5000 }) - }) - } - - async function work() { - let owo = (await neko.nsfw.randomHentaiGif()); - - const hentaigif = new Discord.MessageEmbed() - .setTitle("A imagem não está carregando? Clique aqui") - .setDescription('Aqui está sua imagem...👀') - .setImage(owo.url) - .setColor(`#FF1493`) - .setURL(owo.url); - message.channel.send(hentaigif); - -} - - work(); -} - }; \ No newline at end of file diff --git a/commands/NSFW/holo.js b/commands/NSFW/holo.js deleted file mode 100644 index e90b6c7..0000000 --- a/commands/NSFW/holo.js +++ /dev/null @@ -1,38 +0,0 @@ -const Discord = require("discord.js"); -const errors = require('../../assets/json/errors'); - module.exports = { - name: "holo", - category: "NSFW", - run: async (client, message, args) => { - message.delete({timeout: 5000}) - var superagent = require('superagent'); - - var errMessage = errors[Math.round(Math.random() * (errors.length - 1))]; - if (!message.channel.nsfw) { - message.react('💢'); - return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(errMessage)).then(msg => { - msg.delete({ timeout: 5000 }) - }) - } - - var lo = new Discord.MessageEmbed() - .setDescription(`Por favor, espere...`) - .setTimestamp() - - message.channel.send(lo).then(m => { - - superagent.get('https://nekobot.xyz/api/image').query({ type: 'holo'}).end((err, response) => { - - var embed_nsfw = new Discord.MessageEmbed() - .setDescription(`**[A imagem não está carregando? Clique aqui](${response.body.message})**`) - .setColor(' #FF1493') - .setTimestamp() - .setImage(response.body.message) - - m.edit(embed_nsfw); - }); - }); -} -} \ No newline at end of file diff --git a/commands/NSFW/lewd.js b/commands/NSFW/lewd.js deleted file mode 100644 index 2920ff6..0000000 --- a/commands/NSFW/lewd.js +++ /dev/null @@ -1,40 +0,0 @@ -const Discord = require("discord.js"); -const errors = require('../../assets/json/errors'); -module.exports = { - name: "lewd", - category: "NSFW", - run:async (client, message, args) => { - message.delete({timeout: 5000}) - var superagent = require('superagent'); - - var errMessage = errors[Math.round(Math.random() * (errors.length - 1))]; - if (!message.channel.nsfw) { - message.react('💢'); - return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(errMessage)).then(msg => { - msg.delete({ timeout: 5000 }) - }) - } - - var lo = new Discord.MessageEmbed() - .setDescription(`Por favor, espere...`) - .setTimestamp() - - message.channel.send(lo).then(m => { - - superagent.get('https://nekobot.xyz/api/image').query({ type: 'lewd'}).end((err, response) => { - - var embed_nsfw = new Discord.MessageEmbed() - .setTimestamp() - .setFooter(message.author.username) - .setTitle('Aqui está sua imagem...👀') - .setColor('#FF1493') - .setDescription(`**[A imagem não está carregando? Clique aqui](${response.body.message})**`) - .setImage(response.body.message) - - m.edit(embed_nsfw); - }); - }); -} -} \ No newline at end of file diff --git a/commands/NSFW/pussy.js b/commands/NSFW/pussy.js deleted file mode 100644 index e6fc2b0..0000000 --- a/commands/NSFW/pussy.js +++ /dev/null @@ -1,39 +0,0 @@ -const Discord = require("discord.js"); -const errors = require('../../assets/json/errors'); -module.exports = { - name: "pussy", - category: "NSFW", - run:async (client, message, args) => { - - var superagent = require('superagent'); - message.delete({timeout: 5000}) - var errMessage = errors[Math.round(Math.random() * (errors.length - 1))]; - if (!message.channel.nsfw) { - message.react('💢'); - return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(errMessage)).then(msg => { - msg.delete({ timeout: 5000 }) - }) - } - - var lo = new Discord.MessageEmbed() - .setDescription(`Por favor, espere...`) - .setTimestamp() - - message.channel.send(lo).then(m => { - - superagent.get('https://nekobot.xyz/api/image').query({ type: 'pussy'}).end((err, response) => { - - var embed_nsfw = new Discord.MessageEmbed() - .setTitle('Aqui está sua imagem...👀') - .setDescription(`**[A imagem não está carregando? Clique aqui](${response.body.message})**`) - .setTimestamp() - .setColor('#FF1493') - .setImage(response.body.message) - - m.edit(embed_nsfw); - }); - }); -} -} \ No newline at end of file diff --git a/commands/NSFW/rule34.js b/commands/NSFW/rule34.js deleted file mode 100644 index e94db8b..0000000 --- a/commands/NSFW/rule34.js +++ /dev/null @@ -1,50 +0,0 @@ -const request = require('node-fetch'); -const errors = require('../../assets/json/errors'); -const fs = require("fs"); -const Discord = require('discord.js'); -const booru = require('booru'); - -module.exports = { - name: "rule34", - aliases:["r34"], - category: "NSFW", - run: async (bot, message, args) => { - //command - message.delete({timeout: 5000}) - //Checks channel for nsfw - var errMessage = errors[Math.round(Math.random() * (errors.length - 1))]; - if (!message.channel.nsfw) { - message.react('💢'); - return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(errMessage)).then(msg => { - msg.delete({ timeout: 5000 }) - }) - } - - if (message.content.toUpperCase().includes('LOLI') || message.content.toUpperCase().includes('GORE')) return message.channel.send('Esse tipo de coisa não é permitido! Nem mesmo em canais NSFW!'); - - var query = message.content.split(/\s+/g).slice(1).join(" "); - booru.search('rule34', [query], {nsfw: true, limit: 1, random: true }) - .then(booru.commonfy) - .then(images => { - for (let image of images) { - const embed = new Discord.MessageEmbed() - .setTitle("A imagem não está carregando? Clique aqui") - .setDescription('**Aqui está sua imagem...👀**') - .setImage(image.common.file_url) - .setColor('#FF1493') - .setFooter(`Tags: r34 ${query}`) - .setURL(image.common.file_url); - return message.channel.send({ embed }); - } - - }).catch(err => { - if (err.name === 'booruError') { - return message.channel.send(`Nenhum resultado encontrado para **${query}**!`); - } else { - return message.channel.send(`Nenhum resultado encontrado para **${query}**!`); - } -}) - } - }; \ No newline at end of file diff --git a/commands/NSFW/thigh.js b/commands/NSFW/thigh.js deleted file mode 100644 index 30b632d..0000000 --- a/commands/NSFW/thigh.js +++ /dev/null @@ -1,40 +0,0 @@ -const Discord = require("discord.js"); -const errors = require('../../assets/json/errors'); -module.exports = { - name: "thigh", - aliases:["coxa"], - category: "NSFW", - run:async (client, message, args) => { - - var superagent = require('superagent'); - message.delete({timeout: 5000}) - var errMessage = errors[Math.round(Math.random() * (errors.length - 1))]; - if (!message.channel.nsfw) { - message.react('💢'); - return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(errMessage)).then(msg => { - msg.delete({ timeout: 5000 }) - }) - } - - var lo = new Discord.MessageEmbed() - .setDescription(`Por favor, espere...`) - .setTimestamp() - - message.channel.send(lo).then(m => { - - superagent.get('https://nekobot.xyz/api/image').query({ type: 'thigh'}).end((err, response) => { - - var embed_nsfw = new Discord.MessageEmbed() - .setTitle('Aqui está sua imagem...👀') - .setDescription(`**[A imagem não está carregando? Clique aqui](${response.body.message})**`) - .setTimestamp() - .setColor('#FF1493') - .setImage(response.body.message) - - m.edit(embed_nsfw); - }); - }); -} -} \ No newline at end of file diff --git a/commands/Song/addend.js b/commands/Song/addend.js new file mode 100644 index 0000000..67a8733 --- /dev/null +++ b/commands/Song/addend.js @@ -0,0 +1,82 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "addend", //the command name for the Slash Command + category: "Song", + usage: "addend", + aliases: ["adde", "addfim"], + description: "Adiciona esta música de volta ao final da fila!", //the command description for Slash Command Overview + cooldown: 15, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor Junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de Voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no meu Canal de Voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + await client.distube.playVoiceChannel(channel, newQueue.songs[0].url) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Song/forward.js b/commands/Song/forward.js new file mode 100644 index 0000000..2bf3ffd --- /dev/null +++ b/commands/Song/forward.js @@ -0,0 +1,123 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "forward", //the command name for the Slash Command + category: "Song", + usage: "forward ", + aliases: ["fwd"], + description: "Avança por X segundos", //the command description for Slash Command Overview + cooldown: 10, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Please join ${guild.me.voice.channel ? "__my__" : "a"} VoiceChannel First!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Join __my__ Voice Channel!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **I am nothing Playing right now!**`) + ], + + }) + + if (!args[0]) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Please add a Forwarding Duration!**`) + .setDescription(`**Usage:**\n> \`${client.settings.get(guild.id, "prefix")}forward \``) + ], + }) + } + let seekNumber = Number(args[0]) + let seektime = newQueue.currentTime + seekNumber; + if (seektime >= newQueue.songs[0].duration) seektime = newQueue.songs[0].duration - 1; + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **You are not a DJ and not the Song Requester!**`) + .setDescription(`**DJ-ROLES:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + await newQueue.seek(seektime); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`⏩ **Forwarded the song for \`${seekNumber} Seconds\`!**`) + .setFooter(`💢 Action by: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} +/** + * @INFO + * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/Discord-Js-Handler-Template + * @INFO + * Work for Milrato Development | https://milrato.eu + * @INFO + * Please mention Him / Milrato Development, when using this Code! + * @INFO + */ diff --git a/commands/Song/grab.js b/commands/Song/grab.js new file mode 100644 index 0000000..8bdeec6 --- /dev/null +++ b/commands/Song/grab.js @@ -0,0 +1,110 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "grab", //the command name for the Slash Command + category: "Song", + usage: "grab", + aliases: ["take", "steal"], + description: "Salta para uma posição específica na música", //the command description for Slash Command Overview + cooldown: 10, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ canal de voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + let newTrack = newQueue.songs[0]; + member.send({ + content: `${client.settings.get(guild.id, "prefix")}play ${newTrack.url}`, + embeds: [ + new MessageEmbed().setColor(ee.color) + .setTitle(newTrack.name) + .setURL(newTrack.url) + .addField(`💡 Requerido por:`, `>>> ${newTrack.user}`, true) + .addField(`⏱ Duração:`, `>>> \`${newQueue.formattedCurrentTime} / ${newTrack.formattedDuration}\``, true) + .addField(`🌀 Fila:`, `>>> \`${newQueue.songs.length} música(s)\`\n\`${newQueue.formattedDuration}\``, true) + .addField(`🔊 Volume:`, `>>> \`${newQueue.volume} %\``, true) + .addField(`♾ Loop:`, `>>> ${newQueue.repeatMode ? newQueue.repeatMode === 2 ? `${client.allEmojis.check_mark} \`Fila\`` : `${client.allEmojis.check_mark} \`Música\`` : `${client.allEmojis.x}`}`, true) + .addField(`↪️ Reprodução automática:`, `>>> ${newQueue.autoplay ? `${client.allEmojis.check_mark}` : `${client.allEmojis.x}`}`, true) + .addField(`❔ Baixar Música:`, `>>> [\`Clique aqui\`](${newTrack.streamURL})`, true) + .addField(`❔ Filtro${newQueue.filters.length > 0 ? "s": ""}:`, `>>> ${newQueue.filters && newQueue.filters.length > 0 ? `${newQueue.filters.map(f=>`\`${f}\``).join(`, `)}` : `${client.allEmojis.x}`}`, newQueue.filters.length > 1 ? false : true) + .setThumbnail(`https://img.youtube.com/vi/${newTrack.id}/mqdefault.jpg`) + .setFooter(`Tocado em: ${guild.name}`, guild.iconURL({ + dynamic: true + })).setTimestamp() + ] + }).then(() => { + message.reply({ + content: `📪 **Pegou! Verifique seu Dm!**`, + }) + }).catch(() => { + message.reply({ + content: `${client.allEmojis.x} **Eu não posso enviar dm para você!**`, + }) + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} diff --git a/commands/Song/lyrics.js b/commands/Song/lyrics.js new file mode 100644 index 0000000..4ca7e18 --- /dev/null +++ b/commands/Song/lyrics.js @@ -0,0 +1,111 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const { + KSoftClient +} = require('@ksoft/api'); +const config = require(`../../botconfig/config.json`); +const ksoft = new KSoftClient(config.ksoftapi); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + lyricsEmbed, + check_if_dj +} = require("../../handlers/functions"); +module.exports = { + name: "lyrics", //the command name for the Slash Command + category: "Song", + usage: "lyrics", + aliases: ["ly", "songtext", "letra"], + description: "Envia a letra da música", //the command description for Slash Command Overview + cooldown: 25, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ canal de voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} As letras estão desabilitadas!`) + .setDescription(`**Devido a motivos legais, as letras estão desativadas e não funcionarão por um período de tempo indeterminado!** :cry:`) + ], + }); + let embeds = []; + await ksoft.lyrics.get(newQueue.songs[0].name).then( + async track => { + if (!track.lyrics) return message.reply({ + content: `${client.allEmojis.x} **Nenhuma letra encontrada!** :cry:`, + }); + lyrics = track.lyrics; + embeds = lyricsEmbed(lyrics, newQueue.songs[0]); + }).catch(e => { + console.log(e) + return message.reply({ + content: `${client.allEmojis.x} **Nenhuma letra encontrada!** :cry:\n${String(e).substr(0, 1800)}`, + }); + }) + message.reply({ + embeds: embeds, + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Song/nowplaying.js b/commands/Song/nowplaying.js new file mode 100644 index 0000000..994d261 --- /dev/null +++ b/commands/Song/nowplaying.js @@ -0,0 +1,107 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "nowplaying", //the command name for the Slash Command + category: "Song", + usage: "nowplaying", + aliases: ["np", "current", "agora", "now"], + description: "Mostra a música que está tocando no momento", //the command description for Slash Command Overview + cooldown: 5, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ canal de voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + let newTrack = newQueue.songs[0]; + message.reply({ + content: `${client.settings.get(guild.id, "prefix")}play ${newTrack.url}`, + embeds: [ + new MessageEmbed().setColor(ee.color) + .setTitle(newTrack.name) + .setURL(newTrack.url) + .addField(`💡 Requerido por:`, `>>> ${newTrack.user}`, true) + .addField(`⏱ Duração:`, `>>> \`${newQueue.formattedCurrentTime} / ${newTrack.formattedDuration}\``, true) + .addField(`🌀 Fila:`, `>>> \`${newQueue.songs.length} Músicas(s)\`\n\`${newQueue.formattedDuration}\``, true) + .addField(`🔊 Volume:`, `>>> \`${newQueue.volume} %\``, true) + .addField(`♾ Loop:`, `>>> ${newQueue.repeatMode ? newQueue.repeatMode === 2 ? `${client.allEmojis.check_mark} \`Queue\`` : `${client.allEmojis.check_mark} \`Song\`` : `${client.allEmojis.x}`}`, true) + .addField(`↪️ Reprodução automática:`, `>>> ${newQueue.autoplay ? `${client.allEmojis.check_mark}` : `${client.allEmojis.x}`}`, true) + .addField(`❔ Baixar Música:`, `>>> [\`Clique aqui\`](${newTrack.streamURL})`, true) + .addField(`❔ Filtro${newQueue.filters.length > 0 ? "s": ""}:`, `>>> ${newQueue.filters && newQueue.filters.length > 0 ? `${newQueue.filters.map(f=>`\`${f}\``).join(`, `)}` : `${client.allEmojis.x}`}`, newQueue.filters.length > 1 ? false : true) + .addField(`<:Youtube:840260133686870036> View${newTrack.views > 0 ? "s": ""}:`, `>>> \`${newTrack.views}\``, true) + .addField(`:thumbsup: Like${newTrack.likes > 0 ? "s": ""}:`, `>>> \`${newTrack.likes}\``, true) + .addField(`:thumbsdown: Dislike${newTrack.dislikes > 0 ? "s": ""}:`, `>>> \`${newTrack.dislikes}\``, true) + .setThumbnail(`https://img.youtube.com/vi/${newTrack.id}/mqdefault.jpg`) + .setFooter(`Tocando em: ${guild.name}`, guild.iconURL({ + dynamic: true + })).setTimestamp() + ] + }).catch((e) => { + onsole.log(e.stack ? e.stack : e) + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Song/replay.js b/commands/Song/replay.js new file mode 100644 index 0000000..2e16beb --- /dev/null +++ b/commands/Song/replay.js @@ -0,0 +1,100 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "replay", //the command name for the Slash Command + category: "Song", + usage: "replay", + aliases: ["restart", "repetir"], + description: "Repete a música atual!", //the command description for Slash Command Overview + cooldown: 10, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ canal de voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + let seekNumber = 0 + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + await newQueue.seek(seekNumber); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`🔃 **Repetindo a música atual!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Song/rewind.js b/commands/Song/rewind.js new file mode 100644 index 0000000..671ff5f --- /dev/null +++ b/commands/Song/rewind.js @@ -0,0 +1,114 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "rewind", //the command name for the Slash Command + category: "Song", + usage: "rewind ", + aliases: ["rwd", "retroceder"], + description: "Retrocede por X segundos", //the command description for Slash Command Overview + cooldown: 10, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ canal de voz!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + if (!args[0]) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Adicione uma duração de retrocesso!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(guild.id, "prefix")}rewind \``) + ], + }) + } + let seekNumber = Number(args[0]) + let seektime = newQueue.currentTime - seekNumber; + if (seektime < 0) seektime = 0; + if (seektime >= newQueue.songs[0].duration - newQueue.currentTime) seektime = 0; + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + await newQueue.seek(seektime); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`⏩ **Rebobinou a música para \`${seekNumber} Segundos\`!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Song/seek.js b/commands/Song/seek.js new file mode 100644 index 0000000..e7a8cc5 --- /dev/null +++ b/commands/Song/seek.js @@ -0,0 +1,118 @@ +const { + MessageEmbed, + Message +} = require("discord.js"); +const config = require("../../botconfig/config.json"); +const ee = require("../../botconfig/embed.json"); +const settings = require("../../botconfig/settings.json"); +const { + check_if_dj +} = require("../../handlers/functions") +module.exports = { + name: "seek", //the command name for the Slash Command + category: "Song", + usage: "seek ", + aliases: ["sek"], + description: "Salta para uma posição específica na música", //the command description for Slash Command Overview + cooldown: 10, + requiredroles: [], //Only allow specific Users with a Role to execute a Command [OPTIONAL] + alloweduserids: [], //Only allow specific Users to execute a Command [OPTIONAL] + + run: async (client, message, args) => { + try { + //things u can directly access in an interaction! + const { + member, + channelId, + guildId, + applicationId, + commandName, + deferred, + replied, + ephemeral, + options, + id, + createdTimestamp + } = message; + const { + guild + } = member; + const { + channel + } = member.voice; + if (!channel) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Por favor junte-se ${guild.me.voice.channel ? "__ao meu__" : "a um"} Canal de voz primeiro!**`) + ], + + }) + if (channel.guild.me.voice.channel && channel.guild.me.voice.channel.id != channel.id) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Entre no __meu__ canal de voz primeiro!`) + .setDescription(`<#${guild.me.voice.channel.id}>`) + ], + }); + } + try { + let newQueue = client.distube.getQueue(guildId); + if (!newQueue || !newQueue.songs || newQueue.songs.length == 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **Eu não estou tocando nada agora!**`) + ], + + }) + if (!args[0]) { + return message.reply({ + embeds: [ + new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Adicione um numero para pular a posição na música!**`) + .setDescription(`**Use:**\n> \`${client.settings.get(guild.id, "prefix")}seek \``) + ], + }) + } + let seekNumber = Number(args[0]) + if (seekNumber > newQueue.songs[0].duration || seekNumber < 0) return message.reply({ + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor).setTitle(`${client.allEmojis.x} **A posição de busca deve estar entre \`0\` e \`${newQueue.songs[0].duration}\`!**`) + ], + + }) + if (check_if_dj(client, member, newQueue.songs[0])) { + return message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o Song Requester!**`) + .setDescription(`**CARGO-DJ:**\n> ${check_if_dj(client, member, newQueue.songs[0])}`) + ], + }); + } + await newQueue.seek(seekNumber); + message.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`⏺ **Avançou para \`${seekNumber} Segundos\`!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } catch (e) { + console.log(e.stack ? e.stack : e) + message.reply({ + content: `${client.allEmojis.x} | Error: `, + embeds: [ + new MessageEmbed().setColor(ee.wrongcolor) + .setDescription(`\`\`\`${e}\`\`\``) + ], + + }) + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } +} \ No newline at end of file diff --git a/commands/Utilidade/avatar.js b/commands/Utilidade/avatar.js new file mode 100644 index 0000000..8c0ea1b --- /dev/null +++ b/commands/Utilidade/avatar.js @@ -0,0 +1,22 @@ +const Discord = require('discord.js'); + +module.exports = { + name: 'avatar', + aliases: ['avatar', 'pfp'], + cooldown: 5, + guildOnly: false, + + run: async(client, message, args) => { + if (!message.guild.me.permissions.has('ATTACH_FILES')) return message.reply('Eu preciso da permissão `enviar arquvios` para fazer isso!'); + + const user = message.mentions.users.first() || client.users.cache.get(args[0]) || message.author; + + const avatar = user.displayAvatarURL({ dynamic: true, size: 1024 }); + const embed = new Discord.MessageEmbed() + .setColor('#00bfff') + .setTitle(`Avatar de ${user.username}`) + .setDescription(`Clique [aqui](${avatar}) para baixar o avatar`) + .setImage(avatar); + await message.reply({embeds: [embed]}); + }, +}; \ No newline at end of file diff --git a/commands/utilidade/covid.js b/commands/Utilidade/covid.js similarity index 69% rename from commands/utilidade/covid.js rename to commands/Utilidade/covid.js index 3955a04..222e273 100644 --- a/commands/utilidade/covid.js +++ b/commands/Utilidade/covid.js @@ -1,10 +1,11 @@ const axios = require('axios'); -const { MessageEmbed } = require('discord.js') +const { MessageEmbed } = require('discord.js'); +const ee = require(`../../botconfig/embed.json`); module.exports = { name: "covid", usage: "covid ", - aliases: ["co"], + aliases: ["co", "corona", "coronavirus"], description: "Receba atualizações de todo o mundo dos casos de covid 19", category: "utilidade", run: async (client, message, args) => { @@ -22,27 +23,27 @@ module.exports = { const embed = new MessageEmbed() .setTitle(args[0] ? `${args[0].toUpperCase()} Estatísticas` : 'Total de casos de Corvid em todo o mundo') - .setColor('#fb644c') + .setColor(ee.color) .setThumbnail(args[0] ? corona.countryInfo.flag : 'https://media1.giphy.com/media/SxKiUZFgroqSk3evB7/giphy.gif') .addFields( { name: 'Total de casos:', - value: corona.cases.toLocaleString(), + value: `\`${corona.cases.toLocaleString()}\``, inline: true }, { name: 'Total de mortes:', - value: corona.deaths.toLocaleString(), + value: `\`${corona.deaths.toLocaleString()}\``, inline: true }, { name: 'Total de recuperados:', - value: corona.recovered.toLocaleString(), + value: `\`${corona.recovered.toLocaleString()}\``, inline: true }, { name: 'Casos ativos:', - value: corona.active.toLocaleString(), + value: `\`${corona.active.toLocaleString()}\``, inline: true }, { @@ -52,20 +53,21 @@ module.exports = { }, { name: 'Casos críticos:', - value: corona.critical.toLocaleString(), + value: `\`${corona.critical.toLocaleString()}\``, inline: true }, { name: 'Recuperações de hoje:', - value: corona.todayRecovered.toLocaleString().replace("-", ""), + value: `\`${corona.todayRecovered.toLocaleString().replace("-", "")}\``, inline: true }, { - name: 'Mortes de hoje:', - value: corona.todayDeaths.toLocaleString(), + name: 'Total de mortes hoje:', + value: `\`${corona.todayDeaths.toLocaleString()}\``, inline: true }) + .setFooter(ee.footertext, ee.footericon) - await message.channel.send(embed) + await message.reply({embeds: [embed]}) } }; \ No newline at end of file diff --git a/commands/utilidade/moeda.js b/commands/Utilidade/moeda.js similarity index 69% rename from commands/utilidade/moeda.js rename to commands/Utilidade/moeda.js index 9d2efb9..ce8db82 100644 --- a/commands/utilidade/moeda.js +++ b/commands/Utilidade/moeda.js @@ -1,6 +1,6 @@ const Discord = require("discord.js"); const axios = require('axios') -const config = require('../../config.json'); +const ee = require('../../botconfig/embed.json'); module.exports = { name:"moeda", @@ -13,14 +13,15 @@ module.exports = { const embed = await new Discord.MessageEmbed() .setTitle("Cotação das pricipais Moedas:") - .setColor(config.color) - .setFooter(`${message.author.tag}`, message.author.displayAvatarURL({ dynamic: true, size: 2048 })) + .setColor(ee.color) + .setAuthor(`${message.author.tag}`, message.author.displayAvatarURL({ dynamic: true, size: 2048 })) .addFields( { name: "🇺🇸 Dolar", value: `R$ ${USD.bid}`, inline: true }, + { name: "🇨🇦 Dolar canadense", value: `R$ ${CAD.bid}`, inline: true }, { name: "🇪🇺 Euro", value: `R$ ${EUR.bid}`, inline: true }, { name: "₿ Bitcoin", value: `R$ ${BTC.bid}`, inline: true }, - { name: "🇨🇦 Dolar canadense", value: `R$ ${CAD.bid}`, inline: true } - ); - message.channel.send(embed); + ) + .setFooter(ee.footertext, ee.footericon) + message.channel.send({ embeds: [embed]}); } } \ No newline at end of file diff --git "a/commands/a\303\247\303\243o/abra\303\247ar.js" "b/commands/a\303\247\303\243o/abra\303\247ar.js" deleted file mode 100644 index d7f2d16..0000000 --- "a/commands/a\303\247\303\243o/abra\303\247ar.js" +++ /dev/null @@ -1,36 +0,0 @@ -const Discord = require("discord.js"); - - module.exports = { - name: "abraçar", - usage: "abraçar <@user>", - aliases: ["hug", "abraço", "abraçar"], - description: "Dê um web abraço em um membro do servidor ", - category: "ação", - run: async (client, message, args) => { - var list = [ - 'https://i.pinimg.com/originals/08/de/7a/08de7ad3dcac4e10d27b2c203841a99f.gif', - 'https://i.pinimg.com/originals/32/89/d8/3289d80dcec9c95a0b895a479b90e88c.gif', - 'https://33.media.tumblr.com/680b69563aceba3df48b4483d007bce3/tumblr_mxre7hEX4h1sc1kfto1_500.gif', - 'https://i.gifer.com/27tM.gif', - 'https://i.imgur.com/IAxUnda.gif', - 'https://i.imgur.com/tuH4gqZ.gif', - 'https://i.imgur.com/mjuxfiY.gif' -]; - -var rand = list[Math.floor(Math.random() * list.length)]; -let user = message.mentions.users.first() || client.users.cache.get(args[0]); -if (!user) { -return message.reply('lembre-se de mencionar um usuário válido para executar essa ação!'); -} - - const embed = new Discord.MessageEmbed() - .setTitle('') - .setColor('#8A2BE2') - .setDescription(`🤗 ${message.author} abraçou ${user}`) - .setImage(rand) - .setTimestamp() - .setFooter('King') - await message.channel.send(embed); - - } -}; \ No newline at end of file diff --git "a/commands/a\303\247\303\243o/aplaudir.js" "b/commands/a\303\247\303\243o/aplaudir.js" deleted file mode 100644 index 1ca6cfa..0000000 --- "a/commands/a\303\247\303\243o/aplaudir.js" +++ /dev/null @@ -1,32 +0,0 @@ -const Discord = require('discord.js'); - -module.exports = { - name:"aplaudir", - category:"ação", - aliases:["clap", "aplauso", "palmas"], - run: async(client, message, args) => { - var list = [ - - 'https://i.gifer.com/7ddb.gif', - 'http://24.media.tumblr.com/tumblr_lxf91q2UG61r6xjb6o1_500.gif', - 'https://thumbs.gfycat.com/RareFantasticGrebe-small.gif', - 'https://i.pinimg.com/originals/d0/5b/2a/d05b2aad6a19944ba378d8e365851f00.gif', - 'https://data.whicdn.com/images/250554054/original.gif', - 'https://pa1.narvii.com/6443/dcb690267167192e538563430a6612a27d0f2388_hq.gif', - 'https://i.pinimg.com/originals/8b/f8/fe/8bf8feb807b3237c48ae65c5daa16042.gif', - 'http://cdn.lowgif.com/full/81f183176c22568c-.gif', - 'https://static.zerochan.net/Black.Goku.full.2664791.gif', - 'https://i.gifer.com/Iec9.gif', - 'https://thumbs.gfycat.com/BruisedTidyAsiaticmouflon-size_restricted.gif', - ]; - - var rand = list[Math.floor(Math.random() * list.length)]; - - const embed = new Discord.MessageEmbed() - .setDescription(`${message.author} aplaudiu`) - .setColor('#00bfff') - .setImage(rand) - .setFooter('King') - await message.channel.send(embed); - } -} \ No newline at end of file diff --git "a/commands/a\303\247\303\243o/ataque.js" "b/commands/a\303\247\303\243o/atacar.js" similarity index 56% rename from "commands/a\303\247\303\243o/ataque.js" rename to "commands/a\303\247\303\243o/atacar.js" index 9905295..e346227 100644 --- "a/commands/a\303\247\303\243o/ataque.js" +++ "b/commands/a\303\247\303\243o/atacar.js" @@ -1,11 +1,11 @@ const Discord = require('discord.js'); +const ee = require("../../botconfig/embed.json"); + module.exports = { - name: 'attack', - aliases: ['atacar', 'attack'], + name: 'atacar', + aliases: ['attack'], cooldown: 5, - guildOnly: true, - clientPerms: ['ATTACH_FILES', 'EMBED_LINKS', 'READ_MESSAGE_HISTORY'], run: async(client, message, args) => { const list = [ @@ -17,33 +17,31 @@ module.exports = { const rand = list[Math.floor(Math.random() * list.length)]; const user = message.mentions.users.first() || client.users.cache.get(args[0]); if (!user) { - return message.foxyReply('lembre-se de mencionar um usuário válido para atacar!'); + return message.reply('lembre-se de mencionar um usuário válido para atacar!'); } const avatar = message.author.displayAvatarURL({ format: 'png' }); const embed = new Discord.MessageEmbed() - .setColor('#00FFFF') + .setColor(ee.wrongcolor) .setDescription(`${message.author} atacou ${user}`) .setImage(rand) .setTimestamp() - .setFooter('Reaja com 🌟 para retribuir| Gifs by: ByteAlex#1644') - .setAuthor(message.author.tag, avatar); - await message.foxyReply(embed).then((msg) => { + .setFooter('Reaja com 🌟 para retribuir') + .setAuthor(message.author.tag, avatar) + await message.reply({embeds: [embed]}).then((msg) => { msg.react('🌟') - const filter = (reaction, usuario) => reaction.emoji.name === '🌟' && usuario.id === user.id; - - const collector = msg.createReactionCollector(filter, { max: 1, time: 60000 }); - collector.on('collect', () => { + const filter = (reaction, user) => reaction.emoji.name === '🌟' && user.id === message.author.id; + const collector = msg.createReactionCollector({filter, max: 1, time: 60000 }); + collector.on('collect', (reaction, user) => { const repeat = new Discord.MessageEmbed() - .setColor(client.colors.default) + .setColor(ee.wrongcolor) .setDescription(`${user} **Atacou** ${message.author}`) .setImage(rand) - message.foxyReply(repeat) + message.reply({embeds: [repeat]}) }) }) } - }; \ No newline at end of file diff --git "a/commands/a\303\247\303\243o/atirar.js" "b/commands/a\303\247\303\243o/atirar.js" deleted file mode 100644 index 723cd92..0000000 --- "a/commands/a\303\247\303\243o/atirar.js" +++ /dev/null @@ -1,44 +0,0 @@ -const Discord = require("discord.js"); - - module.exports = { - name: "atirar", - usage: "atirar <@user>", - aliases: ["shoot", "matar", "kill", "bang"], - description: "mostra um gif de tiro", - category: "encenação", - run: async (client, message, args) => { - - var list = [ - - 'https://i.imgur.com/qsgsxIM.gif', - 'https://i.imgur.com/1gN99rj.gif', - 'https://i.imgur.com/nKHZmiY.gif', - 'https://i.imgur.com/xGg931n.gif', - 'https://steamuserimages-a.akamaihd.net/ugc/861736836879917900/52F0CF4E0026EAAC456D316E82BB6EA33E255C3F/', - 'https://pa1.narvii.com/6190/dbeb9bd2e8c18b6410d49f63c457712f01ea0e20_hq.gif', - 'https://31.media.tumblr.com/f606b51075e8988dc93a12d6da4b6dd3/tumblr_nre44r9adS1qdvrdyo1_540.gif', - 'https://4.bp.blogspot.com/-AKya8G5ZuL0/XBbu51XdqdI/AAAAAAABZkc/7INRLssoxKIf7c_QGXNK45r4XzZ2-AUvACKgBGAs/s1600/Omake%2BGif%2BAnime%2B-%2BUlysses%2B-%2BJeanne%2Bd%2527Arc%2Bto%2BRenkin%2Bno%2BKishi%2B-%2BEpisode%2B10%2B-%2BLa%2BHire%2BShoots.gif', - 'https://steamuserimages-a.akamaihd.net/ugc/936055324466626637/CA796A76A32E658BD292E1127BAEF45E1C6E1BA1/', - 'https://cdn.lowgif.com/small/d8e477a108586443-said-it-before-girls-with-big-guns-are-hot-anime-manga-know.gif', - 'https://thumbs.gfycat.com/ObeseWideeyedArabianoryx-small.gif', - 'https://media1.tenor.com/images/83b11c0092eb8fc2d442686f31eaaa0e/tenor.gif?itemid=17106717', - 'https://cdn.lowgif.com/medium/7722a9a9703a9248-.gif' -]; - -var rand = list[Math.floor(Math.random() * list.length)]; -let user = message.mentions.users.first() || client.users.cache.get(args[0]); -if (!user) { -return message.reply('lembre-se de mencionar um usuário válido para executar essa ação!'); -} - - const embed = new Discord.MessageEmbed() - .setTitle('') - .setColor('#8B0000') - .setDescription(`${message.author} atirou em ${user}`) - .setImage(rand) - .setTimestamp() - .setFooter('king') - await message.channel.send(embed); - - } -}; \ No newline at end of file diff --git "a/commands/a\303\247\303\243o/beijar.js" "b/commands/a\303\247\303\243o/beijar.js" deleted file mode 100644 index 6257a1c..0000000 --- "a/commands/a\303\247\303\243o/beijar.js" +++ /dev/null @@ -1,42 +0,0 @@ -const Discord = require("discord.js"); - - module.exports = { - name: "beijar", - usage: "beijar <@user>", - aliases: ["kiss", "beijo"], - description: "Dê um web beijo em um membro do servidor", - category: "encenação", - run: async (client, message, args) => { - - var list = [ - 'https://i.imgur.com/So3TIVK.gif', - 'https://i.imgur.com/lmY5soG.gif', - 'https://i.imgur.com/YbNv10F.gif', - 'https://i.imgur.com/uobBW9K.gif', - 'https://66.media.tumblr.com/3a416d5c991dbef68b6eaf8a06682d3d/tumblr_inline_ol29wgtBjL1u0103a_500.gif', - 'https://i.imgur.com/ABwjzgD.gif', - 'https://pa1.narvii.com/5826/ad5c1b1fc9b5ebe938c815139813bc0e4c00b046_hq.gif', - 'https://i.imgur.com/XBmddwd.gif', - 'https://cutewallpaper.org/21/kissing-anime-pictures/Koi-To-Uso-Anime-GIF-KoiToUso-Anime-Kiss-Discover-and-Share-GIFs.gif', - 'https://i.imgur.com/ino4kbN.gif', - 'https://cutewallpaper.org/21/cute-anime-kiss/Anime-Cute-GIF-Anime-Cute-Kiss-Discover-and-Share-GIFs.gif' - -]; - -var rand = list[Math.floor(Math.random() * list.length)]; -let user = message.mentions.users.first() || client.users.cache.get(args[0]); -if (!user) { -return message.reply('lembre-se de mencionar um usuário válido para executar essa ação!'); -} - - const embed = new Discord.MessageEmbed() - .setTitle('') - .setColor('#8A2BE2') - .setDescription(`🥰 ${message.author} beijou ${user}`) - .setImage(rand) - .setTimestamp() - .setFooter('king') - await message.channel.send(embed); - - } -}; \ No newline at end of file diff --git "a/commands/a\303\247\303\243o/bye.js" "b/commands/a\303\247\303\243o/bye.js" deleted file mode 100644 index f2aa16f..0000000 --- "a/commands/a\303\247\303\243o/bye.js" +++ /dev/null @@ -1,34 +0,0 @@ -const Discord = require('discord.js'); - -module.exports = { - name:"bye", - category:"encenação", - aliases:["tchau", "adeus", "acenar"], - - run: async(client, message, args) => { - var list = [ - - 'https://i.imgur.com/IMb9rAx.gif', - 'https://i.imgur.com/DKT4tjt.gif?noredirect', - 'https://data.whicdn.com/images/245075010/original.gif', - 'https://i.pinimg.com/originals/3c/de/3e/3cde3e1fe79e02abdc287395f57d8578.gif', - 'https://i.imgur.com/14inA9e.gif', - 'https://i.imgur.com/2tk9rzw.gif', - 'https://pa1.narvii.com/6211/90ef8c4ce7e0bd8737177fbdcc8114f440702c86_hq.gif', - 'https://pa1.narvii.com/7008/31adf590be3c64a4bcb7866406464839e74458ecr1-500-248_hq.gif', - 'https://i.makeagif.com/media/7-19-2018/AHVvti.gif', - 'https://i.pinimg.com/originals/73/5a/ae/735aae6168d430d11af5b0bc3e724134.gif', - ]; - - var rand = list[Math.floor(Math.random() * list.length)]; - - const embed = new Discord.MessageEmbed() - .setTitle('') - .setColor('#00bfff') - .setDescription(`${message.author} acenou`) - .setImage(rand) - .setTimestamp() - .setFooter('king') - await message.channel.send(embed); - } -} \ No newline at end of file diff --git "a/commands/a\303\247\303\243o/cafune.js" "b/commands/a\303\247\303\243o/cafune.js" deleted file mode 100644 index 80f537e..0000000 --- "a/commands/a\303\247\303\243o/cafune.js" +++ /dev/null @@ -1,42 +0,0 @@ -const Discord = require("discord.js"); - - module.exports = { - name: "cafune", - usage: "cafune <@user>", - aliases: ["pat"], - description: "Faça um cafuné em alguém do servidor", - category: "encenação", - run: async (client, message, args) => { - - var list = [ - 'https://i.imgur.com/LUypjw3.gif', - 'https://i.imgur.com/4ssddEQ.gif', - 'https://i.imgur.com/UWbKpx8.gif', - 'https://i.imgur.com/2lacG7l.gif', - 'https://i.imgur.com/TPqMPka.gif', - 'https://i.imgur.com/yRcbAsP.gif?noredirect', - 'https://i.imgur.com/XjsEMiK.gif', - 'https://i.imgur.com/bDMMk0L.gif', - 'https://i.imgur.com/pb0ODYa.gif', - 'https://i.imgur.com/rpClwiH.gif?noredirect', - 'https://i.imgur.com/NNOz81F.gif', - 'https://i.imgur.com/d9CH89Q.gif' -]; - -var rand = list[Math.floor(Math.random() * list.length)]; -let user = message.mentions.users.first() || client.users.cache.get(args[0]); -if (!user) { -return message.reply('lembre-se de mencionar um usuário válido para executar essa ação!'); -} - - const embed = new Discord.MessageEmbed() - .setTitle('') - .setColor('#00bfff') - .setDescription(` ${message.author} fez um cafuné em ${user}`) - .setImage(rand) - .setTimestamp() - .setFooter('king') - await message.channel.send(embed); - - } -}; \ No newline at end of file diff --git "a/commands/a\303\247\303\243o/chorar.js" "b/commands/a\303\247\303\243o/chorar.js" deleted file mode 100644 index 2c7bf5c..0000000 --- "a/commands/a\303\247\303\243o/chorar.js" +++ /dev/null @@ -1,39 +0,0 @@ -const Discord = require("discord.js"); - - module.exports = { - name: "chorar", - usage: "chorar", - aliases: ["cry"], - description: " ", - category: "encenação", - run: async (client, message, args) => { - - var list = [ - 'https://i.pinimg.com/originals/3c/69/16/3c691659f01aba24f6a6deed24305989.gif', - 'https://68.media.tumblr.com/0e42f221a783ae10e79fd8c710b59898/tumblr_o1usx7DyI91s7fey2o1_500.gif', - 'https://data.whicdn.com/images/320214384/original.gif', - 'https://i.gifer.com/Qsop.gif', - 'https://data.whicdn.com/images/286544836/original.gif', - 'https://mrwgifs.com/wp-content/uploads/2013/05/Dramatic-Crying-In-Anime-Gif.gif', - 'https://i.imgur.com/CwUSjuy.gif', - 'https://i.imgur.com/XbxsKOw.gif', - 'https://i.imgur.com/OLSFcu5.gif', - 'https://i.imgur.com/PLuOu89.gif', - 'https://i.imgur.com/Ok2GXkV.gif', - 'https://i.imgur.com/5qw84ue.gif', - 'https://gifimage.net/wp-content/uploads/2017/09/anime-happy-cry-gif-3.gif' -]; - - var rand = list[Math.floor(Math.random() * list.length)]; - - const embed = new Discord.MessageEmbed() - .setTitle('') - .setColor('#8A2BE2') - .setDescription(`${message.author} está se sentido triste `) - .setImage(rand) - .setTimestamp() - .setFooter('king') - await message.channel.send(embed); - - } -}; \ No newline at end of file diff --git "a/commands/a\303\247\303\243o/dance.js" "b/commands/a\303\247\303\243o/dance.js" deleted file mode 100644 index 191fb13..0000000 --- "a/commands/a\303\247\303\243o/dance.js" +++ /dev/null @@ -1,44 +0,0 @@ -const Discord = require("discord.js"); - - module.exports = { - name: "dance", - usage: "dance", - aliases: ["dançar", "dancar"], - description: "", - category: "encenação", - run: async (client, message, args) => { - - var list = [ - 'https://i.imgur.com/iHBQB6X.gif', - 'https://i.imgur.com/EcZibMp.gif', - 'https://steamuserimages-a.akamaihd.net/ugc/398926042169055222/1954C0622BA4CFF255769F3DD3840C9D01D19BEC/', - 'https://i.imgur.com/Crlf6Rq.gif', - 'https://i.pinimg.com/originals/79/78/4b/79784b3ff65b7dd598678f62af8e4825.gif', - 'https://i.imgur.com/ZmjRmjw.gif', - 'https://i.imgur.com/vZIfKDs.gif', - 'https://i.imgur.com/pBm2v7f.gif?noredirect', - 'https://i.imgur.com/tIW2E33.gif', - 'https://media.tenor.com/images/a2ea424348ec7fc22f1a8e4f3108dfcf/tenor.gif', - 'https://i.pinimg.com/originals/6a/0a/e0/6a0ae09d4b593283ab17538900173c6a.gif', - 'https://i.imgur.com/BbIar.gif', - 'https://i.imgur.com/iykYjNL.gif', - 'https://i.imgur.com/LZ38e38.gif', - 'https://i.imgur.com/ib52i1D.gif', - 'https://i.pinimg.com/originals/50/36/33/5036339e01ecebe508a720c28805a7a2.gif', - 'https://i.imgur.com/Ox39WkA.gif' - -]; - -var rand = list[Math.floor(Math.random() * list.length)]; - - const embed = new Discord.MessageEmbed() - .setTitle('') - .setColor('#8A2BE2') - .setDescription(` ${message.author} `) - .setImage(rand) - .setTimestamp() - .setFooter('king') - await message.channel.send(embed); - - } -}; \ No newline at end of file diff --git "a/commands/a\303\247\303\243o/morder.js" "b/commands/a\303\247\303\243o/morder.js" deleted file mode 100644 index ef9e087..0000000 --- "a/commands/a\303\247\303\243o/morder.js" +++ /dev/null @@ -1,42 +0,0 @@ -const Discord = require("discord.js"); - - module.exports = { - name: "morder", - usage: "morder <@user>", - aliases: ["bite"], - description: "", - category: "encenação", - run: async (client, message, args) => { - - var list = [ - - 'https://i.imgur.com/xKJw3mX.gif', - 'https://i.imgur.com/wb14mqC.gif', - 'https://pa1.narvii.com/6045/a9bb6d864ebe7e01ed647b78fc652f15116716c4_hq.gif', - 'https://media1.tenor.com/images/6b42070f19e228d7a4ed76d4b35672cd/tenor.gif?itemid=9051585', - 'https://data.whicdn.com/images/151203966/original.gif', - 'https://lh6.googleusercontent.com/proxy/41VecVMfZHB_JyaMkL0bo4R7YPlgh2RRBxTBe7OYoni5zD6yhFf3K2rCoMoPWDO_rGBDV60BHQpXeN9tUOler9Oea6wazAmaWB75JunHJxxBoetTlDyubDrZ8NIQKg=s0-d', - 'https://i.gifer.com/TuLu.gif', - 'https://i.chzbgr.com/full/8241190656/h70C45E69/shes-not-a-vampire', - 'https://anigifs.files.wordpress.com/2011/05/nchij_e22_p5.gif', - 'https://i.imgur.com/fWSIugu.gif', - 'https://i.pinimg.com/originals/f8/4a/57/f84a575892b9b55841498f6acc8d7ee5.gif' -]; - -var rand = list[Math.floor(Math.random() * list.length)]; -let user = message.mentions.users.first() || client.users.cache.get(args[0]); -if (!user) { -return message.reply('lembre-se de mencionar um usuário válido para executar essa ação!'); -} - - const embed = new Discord.MessageEmbed() - .setTitle('') - .setColor(' #8B0000') - .setDescription(`${message.author} mordeu ${user}`) - .setImage(rand) - .setTimestamp() - .setFooter('king') - await message.channel.send(embed); - - } -}; \ No newline at end of file diff --git "a/commands/a\303\247\303\243o/morrer.js" "b/commands/a\303\247\303\243o/morrer.js" deleted file mode 100644 index de1d12d..0000000 --- "a/commands/a\303\247\303\243o/morrer.js" +++ /dev/null @@ -1,39 +0,0 @@ -const Discord = require('discord.js'); - -module.exports = { - name:"morrer", - category:"ação", - aliases:["die"], - - run: async(client, message, args) => { - var list = [ - - 'https://i.pinimg.com/originals/60/73/8a/60738afd01ff17db156ceab784244fd1.gif', - 'https://data.whicdn.com/images/300095706/original.gif', - 'https://cdn.zerotwo.dev/WASTED/04f8f44f-b367-4717-b85d-07d7cb00258e.gif', - 'https://cdn.zerotwo.dev/WASTED/f57a03fd-9eb3-49e0-979d-627d76f39eb7.gif', - 'https://i.pinimg.com/originals/11/bb/5e/11bb5e84bcc76e190c23ead6db8ec2d8.gif', - 'https://i.pinimg.com/originals/fc/c7/2f/fcc72ff4660a0a7b4ed1088e3d153ce9.gif', - 'https://cdn.zerotwo.dev/WASTED/b6426ebd-6e54-48f3-839c-a0ffa46a6e53.gif', - 'https://pa1.narvii.com/6010/27c954c9b7051ec75e75b7fc14896b077b7eb0be_hq.gif', - 'https://media1.tenor.com/images/5dee3f831518bb6e8072a0baedc9811a/tenor.gif?itemid=18511957', - 'https://i.makeagif.com/media/5-22-2015/1-XKhU.gif', - 'https://media.tenor.com/images/dc6e7f7f9ecb8276569a80acc1e7c9f7/tenor.gif', - 'https://pa1.narvii.com/6686/573793853a30766bf2b4283ad0ee5673498de63c_hq.gif', - 'http://static.tumblr.com/qwclk8l/ZAlm41aaf/kubodera.gif', - 'https://vidaanimesempre.files.wordpress.com/2014/07/tumblr_m3lepsvq4j1r9x610.gif', - 'http://cdn.lowgif.com/small/a0ec4d4788ee6ecc-chelsea-pior-morte-de-akame-ga-kill-japon-s-para-animes.gif', - 'https://31.media.tumblr.com/1dd8c4f979fb9090eb192d65233a62cf/tumblr_myjwy43BMc1soxa4vo1_500.gif', - ]; - - var rand = list[Math.floor(Math.random() * list.length)]; - - const embed = new Discord.MessageEmbed() - .setTitle() - .setDescription(`${message.author} está morto 😔`) - .setColor('#ff0000') - .setImage(rand) - .setFooter('King') - await message.channel.send(embed); - } -} \ No newline at end of file diff --git "a/commands/a\303\247\303\243o/sad.js" "b/commands/a\303\247\303\243o/sad.js" deleted file mode 100644 index ac2a58d..0000000 --- "a/commands/a\303\247\303\243o/sad.js" +++ /dev/null @@ -1,32 +0,0 @@ -const Discord = require('discord.js'); - -module.exports = { - name:"sad", - category:"encenação", - aliases:["triste"], - - run: async(client, message, args) => { - var list = [ - - 'https://i.imgur.com/Bvc3jIl.gif', - 'https://i.imgur.com/AnU248m.gif', - 'https://pa1.narvii.com/6367/530d0b98259b37f4616a9276502a84eb3962cc1f_hq.gif', - 'https://thumbs.gfycat.com/EnlightenedDimBluegill-size_restricted.gif', - 'https://data.whicdn.com/images/303410944/original.gif', - 'https://uploads.spiritfanfiction.com/fanfics/historias/202006/mais-bonita-do-que-eu-19580928-100620202323.gif', - 'https://i.imgur.com/IOgBpS7.gif', - 'https://uploads.spiritfanfiction.com/fanfics/historias/201804/eu-nunca-acreditei-no-amor-12768509-200420181947.gif', - - ]; - - var rand = list[Math.floor(Math.random() * list.length)]; - - const embed = new Discord.MessageEmbed() - .setTitle() - .setDescription(`${message.author} está triste 😔`) - .setColor('GREY') - .setImage(rand) - .setFooter('King') - await message.channel.send(embed); - } -} \ No newline at end of file diff --git "a/commands/a\303\247\303\243o/soco.js" "b/commands/a\303\247\303\243o/soco.js" deleted file mode 100644 index 45ebcd5..0000000 --- "a/commands/a\303\247\303\243o/soco.js" +++ /dev/null @@ -1,44 +0,0 @@ -const Discord = require("discord.js"); - - module.exports = { - name: "soco", - usage: "soco <@user>", - aliases: ["socar", "punch"], - description: "Dê um belo soco em algum membro do servidor", - category: "encenação", - run: async (client, message, args) => { - - var list = [ - 'https://i.gifer.com/61i9.gif', - 'https://i.gifer.com/XTAA.gif', - 'https://i.gifer.com/f4.gif', - 'https://i.gifer.com/87hO.gif', - 'https://i.gifer.com/4msN.gif', - 'https://i.gifer.com/C32F.gif', - 'https://i.gifer.com/AgVM.gif', - 'https://i.gifer.com/3fOI.gif', - 'https://i.gifer.com/FHxQ.gif', - 'https://i.kym-cdn.com/photos/images/original/001/891/647/e2c.gif', - 'https://i.pinimg.com/originals/8d/50/60/8d50607e59db86b5afcc21304194ba57.gif', - 'https://i.imgur.com/g91XPGA.gif' - -]; - -var rand = list[Math.floor(Math.random() * list.length)]; -let user = message.mentions.users.first() || client.users.cache.get(args[0]); -if (message.mentions.users.first().id === "") return message.reply('Por que deseja me bater? O que eu te fiz?!'); -if (!user) { -return message.reply('lembre-se de mencionar um usuário válido para executar essa ação!'); -} - - const embed = new Discord.MessageEmbed() - .setTitle('') - .setColor('#8A2BE2') - .setDescription(`${message.author} ${user}`) - .setImage(rand) - .setTimestamp() - .setFooter('king') - await message.channel.send(embed); - - } -}; \ No newline at end of file diff --git "a/commands/a\303\247\303\243o/sorrir.js" "b/commands/a\303\247\303\243o/sorrir.js" deleted file mode 100644 index 7516c05..0000000 --- "a/commands/a\303\247\303\243o/sorrir.js" +++ /dev/null @@ -1,42 +0,0 @@ -const Discord = require('discord.js'); - -module.exports = { - name:"sorrir", - category:"ação", - aliases:["smile"], - - run: async(client, message, args) => { - var list = [ - - 'https://i.imgur.com/aEoayz7.gif?noredirect', - 'https://i.imgur.com/I5hSuVU.gif?noredirect', - 'https://i.imgur.com/LKdRwZf.gif', - 'https://i.imgur.com/TbPmbTt.gif', - 'https://i.imgur.com/ACZ83Ss.gif', - 'http://i.imgur.com/Y5o48VW.gif', - 'https://i.imgur.com/lUYJXjj.gif', - 'https://i.pinimg.com/originals/63/ca/58/63ca58fb23c0901176abf1787fa3bfce.gif', - 'https://i.imgur.com/DfSRL87.gif', - 'https://i.imgur.com/1DlgrAo.gif', - 'https://i.imgur.com/9uzmcJd.gif', - 'https://media1.tenor.com/images/cf8a83dbdf57ae8b6bd15353d1c2bb86/tenor.gif?itemid=17477956', - 'https://thumbs.gfycat.com/OblongAdoredGoshawk-small.gif', - 'https://i.imgur.com/adLtf5i.gif', - 'https://i.pinimg.com/originals/b6/d8/cd/b6d8cd4cfa75ef5f5fe093ecb880e624.gif', - 'https://i.imgur.com/BYeAoax.gif', - 'https://i.imgur.com/PMISWXv.gif', - 'https://i.imgur.com/LQ1i024.gif', - 'https://i.pinimg.com/originals/82/b3/9c/82b39c323ca376e9bb5844a54973fc42.gif', - ]; - - var rand = list[Math.floor(Math.random() * list.length)]; - - const embed = new Discord.MessageEmbed() - .setTitle() - .setDescription(`${message.author} 😁 `) - .setColor('#00bfff') - .setImage(rand) - .setFooter('King') - await message.channel.send(embed); - } -} \ No newline at end of file diff --git "a/commands/a\303\247\303\243o/tapa.js" "b/commands/a\303\247\303\243o/tapa.js" deleted file mode 100644 index 3692ff9..0000000 --- "a/commands/a\303\247\303\243o/tapa.js" +++ /dev/null @@ -1,36 +0,0 @@ -const Discord = require("discord.js"); - - module.exports = { - name: "tapa", - usage: "tapa <@user>", - aliases: ["slap"], - description: "", - category: "ação", - run: async (client, message, args) => { - - var list = [ - - 'https://media1.giphy.com/media/Gf3AUz3eBNbTW/giphy.gif', - 'https://i.imgur.com/fm49srQ.gif', - 'https://i.pinimg.com/originals/65/57/f6/6557f684d6ffcd3cd4558f695c6d8956.gif', - 'https://i.kym-cdn.com/photos/images/newsfeed/000/940/326/086.gif', - 'https://reallifeanime.files.wordpress.com/2014/06/akari-slap.gif' -]; - -var rand = list[Math.floor(Math.random() * list.length)]; -let user = message.mentions.users.first() || client.users.cache.get(args[0]); -if (!user) { -return message.reply('lembre-se de mencionar um usuário válido para executar essa ação!'); -} - - const embed = new Discord.MessageEmbed() - .setTitle('') - .setColor('#8A2BE2') - .setDescription(`${message.author} ${user}`) - .setImage(rand) - .setTimestamp() - .setFooter('king') - await message.channel.send(embed); - - } -}; \ No newline at end of file diff --git "a/commands/a\303\247\303\243o/timido.js" "b/commands/a\303\247\303\243o/timido.js" deleted file mode 100644 index 5d24c28..0000000 --- "a/commands/a\303\247\303\243o/timido.js" +++ /dev/null @@ -1,50 +0,0 @@ -const Discord = require('discord.js'); - -module.exports = { - name:"timido", - category:"ação", - aliases:["shy"], - - run: async(client, message, args) => { - var list = [ - - 'https://i.imgur.com/LcraCIp.gif', - 'https://i.imgur.com/vST8kqa.gif?noredirect', - 'https://i.imgur.com/ammlfLn.gif', - 'https://i.imgur.com/CQit82w.gif', - 'https://i.imgur.com/V8wldlb.gif', - 'https://i.imgur.com/jsXDra1.gif', - 'https://i.pinimg.com/originals/f0/ef/6f/f0ef6feafada1ee18e2ad46a2563ab75.gif', - 'https://i.imgur.com/oGXojFA.gif', - 'https://i.imgur.com/f8627z3.gif', - 'https://i.imgur.com/CwPRegu.gif', - 'https://media.tenor.com/images/925ab58ca7860bfdbea7e8be3c288949/tenor.gif', - 'https://thumbs.gfycat.com/SatisfiedYearlyGonolek-size_restricted.gif', - 'http://cdn.lowgif.com/full/1eba3151cfac3814-shy-anime-gif-3-gif-images-download.gif', - 'https://i.imgur.com/iXCGjAd.gif', - 'http://i.imgur.com/64tzPIh.gif', - 'https://thumbs.gfycat.com/TameDecimalEasteuropeanshepherd-size_restricted.gif', - 'https://media0.giphy.com/media/6CBGoJnEBbEWs/giphy.gif', - 'https://media.tenor.com/images/f942d8d70848555f5914cc3474f7a63f/tenor.gif', - 'https://38.media.tumblr.com/fddb3c86cb6b8ebc3f97124ef685d8f8/tumblr_inline_nqmmpycARm1t8mj2f_500.gif', - 'https://media.tenor.com/images/5f737df63beee63857ce767a877547ff/tenor.gif', - 'https://media.tenor.com/images/fcfe35add598a6b7ef0a61c50735eac0/tenor.gif', - 'https://media.tenor.com/images/e46bdaf536ccc3b70b664a330fe02220/tenor.gif', - 'https://media.tenor.com/images/9fcedb196e6e058ee3aa9aae4772fe0f/tenor.gif', - 'https://media.tenor.com/images/4f04db0e8376d11f8bec17d8e786a07b/tenor.gif', - 'https://image.myanimelist.net/ui/Ik_Vp0LpzawyH5e_tQqsN_z_TfoOK00m4fmV6r3444Low7b-rPb0KElhCR02CkWicPHdhf4LqSppFX2AHEcn_zGvPXo5OhStwJ5JWrY-2holndH8xN9fvv4WwQIq9pzk', - 'https://i0.wp.com/novocom.top/image/bWVkabm9yLWExLnRlbm9yLmNvbQ==/images/8f400c91a5f9ae9fc77045fd001c4cd4/tenor.gif', - 'https://media1.tenor.com/images/f01cd6c8036da9263eac06977f2dfbcb/tenor.gif?itemid=3478340', - ]; - - var rand = list[Math.floor(Math.random() * list.length)]; - - const embed = new Discord.MessageEmbed() - .setTitle() - .setDescription(`${message.author} está envergonhado <:baka:786244388136157214>`) - .setColor('#00bfff') - .setImage(rand) - .setFooter('King') - await message.channel.send(embed); - } -} \ No newline at end of file diff --git "a/commands/divers\303\243o/8ball.js" "b/commands/divers\303\243o/8ball.js" deleted file mode 100644 index a7823ea..0000000 --- "a/commands/divers\303\243o/8ball.js" +++ /dev/null @@ -1,46 +0,0 @@ -const {MessageEmbed} = require("discord.js"); - - module.exports = { - name: "8ball", - usage: "8ball ", - aliases: ["guru"], - description: "Faça uma pergunta para o bot e ele irá responder você da Melhor forma possível.", - category: "diversão", - run: async (client, message, args) => { - - let respostas = [ - 'Sim.', - 'Não.', - 'Talvez.', - 'Não sei', - 'Quem sabe?', - 'Provavelmente sim', - 'Provavelmente não', - 'Melhor você não saber.', - 'Um dia eu te conto', - 'Vai pertubar outra pessoa, por favor -_-', - 'Eu não sei, tente de novo', - 'Isso é um mistério', - 'Não posso te contar', - 'Meu informante disse que não', - 'Me pergunte mais tarde!', - 'Claro que não!', - 'Não conte comigo para isso', - 'Dúvido muito', - 'Eu acho que sim', - 'Eu acho que não' -] - -const BallNum = Math.floor(Math.random() * respostas.length); -const delay = (msec) => new Promise((resolve) => setTimeout(resolve, msec)); - -if(!args[0])return message.channel.send(new MessageEmbed() -.setColor("#ff0000") -.setTitle("Você deve me faxer uma pergunta ao executar o comando") -) -msg = await message.channel.send('Pergunta difícil, vamos ver...'); -await delay(1000); -msg.edit(respostas[BallNum]); - - } -}; \ No newline at end of file diff --git "a/commands/divers\303\243o/ascii.js" "b/commands/divers\303\243o/ascii.js" deleted file mode 100644 index 7155333..0000000 --- "a/commands/divers\303\243o/ascii.js" +++ /dev/null @@ -1,25 +0,0 @@ -const Discord = require('discord.js'); -const figlet = require('figlet'); - -module.exports = { - name: "ascii", - category:"diversão", - description:"Retorna um texto em formato ascii", - usage:"ascii ", - - run: async(clent, message, args) => { - let text = args.join(" "); - if(!text) { - return message.channel.send(`Por favor forneça um texto para fazer a conversão em ascii`) - } - let maxlen = 20 - if(text.length > 20){ - return message.channel.send(`Por favor forneça um texto com 20 caracteres ou menos`); - } - figlet(text, function(err, data){ - message.channel.send(data, { - code: 'AsciiArt' - }) - }) - } -} \ No newline at end of file diff --git "a/commands/divers\303\243o/binario.js" "b/commands/divers\303\243o/binario.js" deleted file mode 100644 index 5fdfd8e..0000000 --- "a/commands/divers\303\243o/binario.js" +++ /dev/null @@ -1,25 +0,0 @@ -const { MessageEmbed } = require('discord.js'); -const axios = require('axios'); - -module.exports = { - name: "binario", - category: "diversão", - run: async (client, message, args) => { - const url = `http://some-random-api.ml/binary?text=${args}`; - if(!args.join(""))return message.channel.send('um') - let response, data; - try { - response = await axios.get(url); - data = response.data; - } catch (e) { - return message.channel.send(`Ocorreu um erro, tente novamente!`) - } - - const embed = new MessageEmbed() - .setTitle('Texto para binário') - .setDescription(data.binary) - .setColor('#00bfff') - - await message.channel.send(embed) - } -} \ No newline at end of file diff --git "a/commands/divers\303\243o/chatbot.js" "b/commands/divers\303\243o/chatbot.js" deleted file mode 100644 index 6a5def1..0000000 --- "a/commands/divers\303\243o/chatbot.js" +++ /dev/null @@ -1,17 +0,0 @@ -const alexa = require('alexa-bot-api'); -var chatbot = new alexa('aw2plm'); - -module.exports = { - name : "chatbot", - aliases: ["chat", "bot", "king"], - description: "Converse comigo ^-^", - category:"diversão", - run : async(client, message, args) => { - if (message.author.bot) return; - let content = message.content; - if(!content)return; - if(!args.join(" ")) return message.channel.send("Inicie uma conversa, que tal começar com um, Oi?") - - chatbot.getReply(content).then(r => message.channel.send(r)); - } -} diff --git "a/commands/divers\303\243o/coinflip.js" "b/commands/divers\303\243o/coinflip.js" deleted file mode 100644 index f8b55a8..0000000 --- "a/commands/divers\303\243o/coinflip.js" +++ /dev/null @@ -1,26 +0,0 @@ -const Discord = require("discord.js"); - - module.exports = { - name: "coinflip", - usage: "coinflip ", - aliases: ["coin", "flip", "jogarmoeda", "moeda", "jogar"], - description: "Gire uma moeda e veja se irá cair cara ou coroa!", - category: "diversão", - run: async (client, message, args) => { - var array1 = ["cara", "coroa"]; - - var rand = Math.floor(Math.random() * array1.length); - - if (!args[0] || (args[0].toLowerCase() !== "cara" && args[0].toLowerCase() !== "coroa")) { - message.reply("insira **cara** ou **coroa** na frente do comando."); - } -else if (args[0].toLowerCase() == array1[rand]) { - message.channel.send("Deu **" + array1[rand] + "**, você ganhou dessa vez!"); - } -else if (args[0].toLowerCase() != array1[rand]) { - message.channel.send("Deu **" + array1[rand] + "**, você perdeu dessa vez!" - ); - } - - } -}; \ No newline at end of file diff --git "a/commands/divers\303\243o/decode.js" "b/commands/divers\303\243o/decode.js" deleted file mode 100644 index 3c04a82..0000000 --- "a/commands/divers\303\243o/decode.js" +++ /dev/null @@ -1,25 +0,0 @@ -const { MessageEmbed } = require('discord.js'); -const axios = require('axios'); - -module.exports = { - name: "decode", - category: "extra", - run: async (client, message, args) => { - const url = `http://some-random-api.ml/binary?decode=${args}`; - - let response, data; - try { - response = await axios.get(url); - data = response.data; - } catch (e) { - return message.channel.send(`Ocorreu um erro, tente novamente!`) - } - - const embed = new MessageEmbed() - .setTitle('Decodificar binário') - .setDescription(data.text) - .setColor('#00bfff') - - await message.channel.send(embed) - } -} \ No newline at end of file diff --git "a/commands/divers\303\243o/ejetar.js" "b/commands/divers\303\243o/ejetar.js" deleted file mode 100644 index 4f2af84..0000000 --- "a/commands/divers\303\243o/ejetar.js" +++ /dev/null @@ -1,32 +0,0 @@ -const {MessageEmbed} = require("discord.js") -const fetch = require('node-fetch') - -module.exports = { - name: "ejetar", - description: "ejete alguém da nave - Among Us", - usage: "ejetar <@user>", - category: "diversão", - run: async (client, message, args) => { - const user = message.mentions.users.first() - const imp = [true, false]; - const imposter = imp[Math.floor(Math.random() * imp.length)]; - const crew = ["black", "blue", "brown", "cyan", "darkgreen", "lime", "orange", "pink", "purple", "red", "white", "yellow"] - const crewmate = crew[Math.floor(Math.random() * crew.length)]; - - if(!user) { - return message.channel.send(`${message.author} lembre-se de mencionar um usuário válido para ejetar!`) - } - - const data = await fetch(`https://vacefron.nl/api//ejected?name=${user.username}&impostor=${imposter}&crewmate=${crewmate}`) - - const embed = new MessageEmbed() - .setAuthor(message.author.username + "#" + message.author.discriminator, message.author.displayAvatarURL()) - .setTitle(`${message.author.username} Ejetou ${user.username}`) - .setColor('#000000') - .setDescription(`[Clique aqui se a imagem não carregar!](${data.url})`) - .setImage(`${data.url}`) - .setFooter('King'); - - message.channel.send(embed); - } -} \ No newline at end of file diff --git "a/commands/divers\303\243o/emoji.js" "b/commands/divers\303\243o/emoji.js" deleted file mode 100644 index 8248cf0..0000000 --- "a/commands/divers\303\243o/emoji.js" +++ /dev/null @@ -1,24 +0,0 @@ -const { RichEmbed } = require("discord.js"); - -module.exports = { - name: "emoji", - category: "info", - description: "INVITE BOT", - run: async (client, message, args) => { - - try { - let notAnimated = []; - let animated = []; - message.guild.emojis.cache.forEach(async emoji => { - if (emoji.animated) animated.push(emoji.toString()); - else notAnimated.push(emoji.toString()); - }); - if (!animated[0]) animated = ['None']; - if (!notAnimated[0]) notAnimated = ['None']; - message.channel.send('**__ANIMADO :__**\n' + animated.join(' ') + '\n**__NORMAL:__**\n' + notAnimated.join(' '), {split:true}); - } catch (err) { - message.channel.send('Foi um erro deles!\n' + err).catch(); - } - -} -}; \ No newline at end of file diff --git "a/commands/divers\303\243o/emojify.js" "b/commands/divers\303\243o/emojify.js" deleted file mode 100644 index c227f4e..0000000 --- "a/commands/divers\303\243o/emojify.js" +++ /dev/null @@ -1,37 +0,0 @@ -const Discord = require("discord.js"); -const mapping = { - ' ': ':zero:', - '0': ':one:', - '1': ':two:', - '2': ':two:', - '3': ':three:', - '4': ':four:', - '5': ':five:', - '6': ':six:', - '7': ':seven:', - '8': ':eight:', - '9': ':nine:', - '!': ':grey_exclamation:', - '?': ':grey_question:', - '#': ':hash:', - '*': ':asterisk:' -}; - -'abcdefghijklmnopqrstuvwxyz'.split('').forEach(c =>{ -mapping[c] = mapping[c.toUpperCase()] = `:regional_indicator_${c}:`; -}); - -module.exports = { - name: "emojify", - category: "diversão", - usage: "emojify ", - description: "Retorna um texto em forma de emoji", - - run: async(client, message, args) =>{ - if(args.length < 1){ - message.channel.send('Por favor forneça um texto para fazer a conversão!'); - } - await message.delete(); - message.channel.send(args.join(' ').split('').map(c => mapping[c] || c).join('')); - } -} \ No newline at end of file diff --git "a/commands/divers\303\243o/morse.js" "b/commands/divers\303\243o/morse.js" deleted file mode 100644 index 6a8b5e7..0000000 --- "a/commands/divers\303\243o/morse.js" +++ /dev/null @@ -1,39 +0,0 @@ - -const Discord = require("discord.js"); - -module.exports = { - name: "morse", - run:async (client, message, args) => { - - - let alpha = " ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".split(""), - morse = "/,.-,-...,-.-.,-..,.,..-.,--.,....,..,.---,-.-,.-..,--,-.,---,.--.,--.-,.-.,...,-,..-,...-,.--,-..-,-.--,--..,.----,..---,...--,....-,.....,-....,--...,---..,----.,-----".split(","), - text = args.join(" ").toUpperCase(); - if (!text) return message.channel.send('Insira um texto ou um código para ser decodificado ou codificado') - - while (text.includes("Ä") || text.includes("Ö") || text.includes("Ü")) { - text = text.replace("Ä","AE").replace("Ö","OE").replace("Ü","UE"); - } - if (text.startsWith(".") || text.startsWith("-")) { - text = text.split(" "); - let length = text.length; - for (i = 0; i < length; i++) { - text[i] = alpha[morse.indexOf(text[i])]; - } - text = text.join(""); - } else { - text = text.split(""); - let length = text.length; - for (i = 0; i < length; i++) { - text [i] = morse[alpha.indexOf(text[i])]; - } - text = text.join(" "); - } - let morsereader = new Discord.MessageEmbed() - .setColor('BLUE') - .setTitle('Tradutor de Código Morse') - .setDescription(":radio: O resultado foi: \n ```"+text+"```") - await message.channel.send(morsereader) - } - - } \ No newline at end of file diff --git "a/commands/divers\303\243o/muteone.js" "b/commands/divers\303\243o/muteone.js" deleted file mode 100644 index 0ba780e..0000000 --- "a/commands/divers\303\243o/muteone.js" +++ /dev/null @@ -1,33 +0,0 @@ -const discord = require("discord.js"); -/*** -* @param {Discord.client} bot the discord bot client. -* @param {Discord.messsage} message the initial message sent by the user. -* @param {array} args an array of arguments - */ -module.exports = { - name:"muteone", - run : async (bot, message, args) => { - var a = message.id; - if (!message.member.hasPermission('MUTE_MEMBERS')) return message.reply("Você não tem permissão para fazer isso!"); - if (!message.member.voice.channel) return message.reply("Você não está em um canal de voz!"); - var user = message.mentions.members.first(); - - if (!user) return message.reply("Quem você quer silenciar?"); - let channel = message.member.voice.channel; - var found = 0; - for (let memberi of channel.members) { - if (memberi[1] == user) { - found++; - } - } - if (found == 1) { - await user.voice.setMute(true); - message.channel.send(`${user} muted by ${message.author}`); - message.channel.messages.fetch(a).then(msg => msg.delete({ timeout: 1000 })); - } - else { - message.channel.send("You are not in the same channel!!"); - message.channel.messages.fetch(a).then(msg => msg.delete({ timeout: 1000 })); - } -} -} \ No newline at end of file diff --git "a/commands/divers\303\243o/ppt.js" "b/commands/divers\303\243o/ppt.js" deleted file mode 100644 index 716f9c1..0000000 --- "a/commands/divers\303\243o/ppt.js" +++ /dev/null @@ -1,25 +0,0 @@ -const Discord = require('discord.js'); -const { MessageEmbed } = require("discord.js"); - -module.exports = { - name: "ppt", - usage: "ppt ", - description: "Pedra papel tesoura", - category: "diversão", - run: async (client, message, args) => { - const replies = ["pedra", "papel", "tesoura"]; - - const reply = replies[Math.floor(Math.random() * replies.length)]; - if(!args.join("")) - return message.channel.send("**pedra , papel ou tesoura? Escolha um -_-**") - - const embed = new MessageEmbed() - .setTitle("Pedra Papel Tesoura") - .setColor("GREEN") - .addField(`Minha escolha`, `${reply}`) - .addField(`Sua escolha`,`${args.join("")}`) - .setFooter(message.author.username); - - message.channel.send(embed); - }, -}; \ No newline at end of file diff --git "a/commands/divers\303\243o/ratewaifu.js" "b/commands/divers\303\243o/ratewaifu.js" deleted file mode 100644 index 3df8c85..0000000 --- "a/commands/divers\303\243o/ratewaifu.js" +++ /dev/null @@ -1,40 +0,0 @@ -module.exports = { - name: "ratewaifu", - aliases: ['waifu', 'avaliarwaifu'], - category:"diversão", - run:async(client, message, args) => { - - let user = message.mentions.users.first() || client.users.cache.get(args[0]); - - if (!user) { - return message.reply('lembre-se de mencionar um usuário válido para avaliar!'); - } - - if (user == 794291443454836766) return message.channel.send('Eu dou nota **∞** para <@794291443454836766> sim eu sou muito lindo 😘') - - if(user == 718669518452293713) return message.channel.send(`Sobre ${user}... Eu dou nota **1000** para essa waifu. Se vc procurar definição de perfeição no dicionário aparece ${user}! <:cut:808443704028823574>`) - - if(user == 772855488756580404) return message.channel.send(`Sobre ${user}... Eu dou nota **1000** para essa waifu. Se vc procurar definição de perfeição no dicionário aparece ${user}! <:cut:808443704028823574>`) - - if(user == 532413362940936213) return message.channel.send(`Sobre ${user}... Eu dou nota **1000** para essa waifu. Se vc procurar definição de perfeição no dicionário aparece ${user}! <:cut1:808444488086847538>`) - - if(user == 757434569011232879) return message.channel.send(`Sobre ${user}... Eu dou nota **1000** para essa waifu. Se vc procurar definição de perfeição no dicionário aparece ${user}! <:cut1:808444488086847538>`) - - if(user == 765113381094817812) return message.channel.send(`Sobre ${user}... Eu dou nota **1000** para essa waifu. Se vc procurar definição de perfeição no dicionário aparece ${user}! <:cut1:808444488086847538>`) - -var list = [ - '**1** para essa waifu. Eu não gostei <:hm:808446536533934100> ', - '**5** para essa waifu. <:hmmm:779010951420051457> ', - '**7** para essa waifu. Achei ela bonitinha <:cut1:808444488086847538> ', - '**4** para essa waifu. Bonitinha <:hm:808446536533934100>', - '**3** para essa waifu. Bonitinha, mas acho que pode melhorar *na minha opinião* <:hm:808446536533934100>', - '**5** para essa waifu.', - '**8** para essa waifu.', - '**10** para essa waifu. Essa waifu é perfeita! Eu não trocaria ela por nada se fosse você! <:cut:808443704028823574>' -]; - -var rand = list[Math.floor(Math.random() * list.length)]; - - await message.channel.send(`Sobre ${user}... Eu dou nota ${rand}`); -} -} \ No newline at end of file diff --git "a/commands/divers\303\243o/reverso.js" "b/commands/divers\303\243o/reverso.js" deleted file mode 100644 index 0be1901..0000000 --- "a/commands/divers\303\243o/reverso.js" +++ /dev/null @@ -1,9 +0,0 @@ -const Discord = require('discord.js') - -module.exports = { - name:"reverso", - run:async (client, message, args, prefix) => { - if(!args.join(" ")) return message.channel.send(`${message.author}, eu preciso que você escreva algo após o comando`) - message.channel.send(`${args.join(" ").split('').reverse().join('')}`) -} -} \ No newline at end of file diff --git "a/commands/divers\303\243o/reverter.js" "b/commands/divers\303\243o/reverter.js" deleted file mode 100644 index 8f10b12..0000000 --- "a/commands/divers\303\243o/reverter.js" +++ /dev/null @@ -1,15 +0,0 @@ -module.exports = { - name: "reverter", - usage: "reverso ", - description: "Inverta as palavras desejadas", - category: "diversão", - timeout: 5, - alises: ["reverso"], - run: async(bot, message, args) => { - const text = args.join(); - if(!text) return message.channel.send("Por favor forneça uma palavra.") - if(text.length < 1) return message.channel.send("IDIOTA, COMO POSSO REVERTER 1 PALAVRA? -_-") - const converted = text.split('').reverse().join(''); - message.channel.send(`\u180E${converted}`); - }, -}; \ No newline at end of file diff --git "a/commands/divers\303\243o/ship.js" "b/commands/divers\303\243o/ship.js" deleted file mode 100644 index e652f9f..0000000 --- "a/commands/divers\303\243o/ship.js" +++ /dev/null @@ -1,86 +0,0 @@ -const Canvas = require('canvas'); -const Discord = require('discord.js') -const canvas = Canvas.createCanvas(384, 128); -const ctx = canvas.getContext('2d'); -const { createCanvas, loadImage } = require('canvas') - -module.exports = { - name: "ship", - aliases: ['shippar', 'shipar'], -run:async (client, message, args) => { - message.channel.startTyping(); - - let membro1 = message.mentions.members.first() - - let membro2 = message.mentions.members.last() - - if(!membro1 || !membro2) return message.channel.send('Lembre-se de mencionar dois usuários para shippar') - if(membro1 === membro2) return message.channel.send('Mencione duas pessoas diferentes') - - const amor = Math.floor(Math.random() * 100); - const loveIndex = Math.floor(amor / 10); - const loveLevel = "█".repeat(loveIndex) + ".".repeat(10 - loveIndex); - - let nomeFim1 = membro1.user.username.length; - let nomeFim2 = membro2.user.username.length; - - let calc1 = nomeFim1 - 4 - let calc2 = nomeFim2 - 4 - - let nomeship; - if(amor > 60) { - nomeship = membro1.user.username.slice(0, 3) + membro2.user.username.slice(0, 3); - } else if(amor >= 40) { - nomeship = membro1.user.username.slice(0, calc1) + membro2.user.username.slice(0, calc2) - } else { - nomeship = membro1.user.username.slice(calc1, nomeFim1) + membro2.user.username.slice(calc2, nomeFim2) - } - - let emoticon; - if(amor > 60) { - emoticon = ("https://cdn.glitch.com/00963c7e-8e86-4a55-8d85-36add9e330d7%2Femoji_2.png?v=1593651528429"); //imagem de coração - } else if(amor >= 40) { - emoticon = ("https://cdn.glitch.com/00963c7e-8e86-4a55-8d85-36add9e330d7%2Femoji_3-1.png?v=1593652255529"); //imagem de sei lá - } else { - emoticon = ("https://cdn.glitch.com/00963c7e-8e86-4a55-8d85-36add9e330d7%2Femoji_1.png?v=1593651511900"); //imagem chorando - } - - let desc; - if(amor > 90) { - desc = (":sparkling_heart: Será que vai rolar ou não? :sparkling_heart:\n`"+membro1.user.username+"`\n`"+membro2.user.username+"`\n:heart: `"+nomeship+"` Esse é o casal perfeito! :heart:"); - } else if(amor >= 70) { - desc = (":sparkling_heart: Será que vai rolar ou não? :sparkling_heart:\n`"+membro1.user.username+"`\n`"+membro2.user.username+"`\n:neutral_face: `"+nomeship+"` Esses aqui já estão se pegando e não contaram para ninguém! :neutral_face:"); - } else if(amor >= 45) { - desc = (":sparkling_heart: Será que vai rolar ou não? :sparkling_heart:\n`"+membro1.user.username+"`\n`"+membro2.user.username+"`\n:no_mouth: `"+nomeship+"` Talvez só precise "+membro2.user.username+" querer... :no_mouth:"); - } else if(amor >= 30) { - desc = (":sparkling_heart: Será que vai rolar ou não? :sparkling_heart:\n`"+membro1.user.username+"`\n`"+membro2.user.username+"`\n :rolling_eyes: `"+nomeship+"` Talvez desse certo se "+membro2.user.username+" não ficasse na friendzone :rolling_eyes:"); - } else if(amor >=15){ - desc = (":sparkling_heart: Será que vai rolar ou não :sparkling_heart:\n`"+membro1.user.username+"`\n`" +membro2.user.username+"`\n :pensive: `"+nomeship+"`Sinto muito mas esse já é um caso perdido"); - }else { - desc = (":sparkling_heart: Será que vai rolar ou não? :sparkling_heart:\n`"+membro1.user.username+"`\n`"+membro2.user.username+"`\n:cry: `"+nomeship+"`queria muito dizer que é possivel mas... :cry: "); - } - - const canvas = Canvas.createCanvas(384, 128); - const ctx = canvas.getContext('2d'); - - const emote = await Canvas.loadImage(emoticon); - const foto1 = await Canvas.loadImage(membro1.user.displayAvatarURL({format: "png"})) - const foto2 = await Canvas.loadImage(membro2.user.displayAvatarURL({format: "png"})) - - ctx.drawImage(emote, 125, 0, 128, 128) - ctx.drawImage(foto1, -10, 0, 128, 128) - ctx.drawImage(foto2, 260, 0, 128, 128) - - const amorat = new Discord.MessageAttachment(canvas.toBuffer(), 'chances-image.png') - -let amorEmbed = new Discord.MessageEmbed() - .setColor('#ff3333') - .setDescription("**"+amor+"%** [`"+loveLevel+"`]") - .attachFiles([amorat]).setImage('attachment://chances-image.png') - - message.channel.stopTyping(); - - message.channel.send('<@'+message.author.id+'> \n'+desc, amorEmbed) - -} -} \ No newline at end of file diff --git "a/commands/divers\303\243o/vaporwave.js" "b/commands/divers\303\243o/vaporwave.js" deleted file mode 100644 index 52a93df..0000000 --- "a/commands/divers\303\243o/vaporwave.js" +++ /dev/null @@ -1,14 +0,0 @@ -const Discord = require('discord.js') - -module.exports = { - name:"vaporwave", - run:async (client, message, args, default_prefix) => { - if(!args.join(" ")) return message.channel.send(`${emoji.nao} ${message.author}, eu preciso que você escreva algo após o comando \`${prefix}vaporonda \``) - const vaporwavefield = args.join(" ").split(" / ")[0].split('').map(char => { - const code = char.charCodeAt(0); - - return code >= 33 && code <= 126 ? String.fromCharCode((code - 33) + 65281) : char; - }).join(""); - message.channel.send(`${vaporwavefield}`) -} -} \ No newline at end of file diff --git a/commands/filtros/8d.js b/commands/filtros/8d.js deleted file mode 100644 index 93a76ca..0000000 --- a/commands/filtros/8d.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado" + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/bassboost.js b/commands/filtros/bassboost.js deleted file mode 100644 index 883ccb3..0000000 --- a/commands/filtros/bassboost.js +++ /dev/null @@ -1,153 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado" + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - let filter = message.content.slice(config.prefix.length).split(" ")[0]; - if (args[0]) { - let bassboostfilter = `bassboost${Math.floor(Number(args[0]))}`; - switch (Math.floor(Number(args[0]))) { - case 1: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 2: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 3: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 4: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 5: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 6: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 7: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 8: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 9: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 10: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 11: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 12: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 13: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 14: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 15: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 16: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 17: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 18: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 19: - await client.distube.setFilter(message, bassboostfilter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - break; - - case 20: - - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\``) - await client.distube.setFilter(message, bassboostfilter); - break; - - default: - await functions.embedbuilder(client, 3000, message, config.colors.no, "ERROR", `Bassboost com: \`${Math.floor(Number(args[0]))}db Gain\` DOES NOT WORK!`) - break; - } - } else if (message.content.slice(config.prefix.length).split(" ")[0] === queue.filter) filter = "clear"; - else { - filter = await client.distube.setFilter(message, filter); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/clear.js b/commands/filtros/clear.js deleted file mode 100644 index a5e7fe4..0000000 --- a/commands/filtros/clear.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/earrape.js b/commands/filtros/earrape.js deleted file mode 100644 index a5e7fe4..0000000 --- a/commands/filtros/earrape.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/echo.js b/commands/filtros/echo.js deleted file mode 100644 index ecc57d6..0000000 --- a/commands/filtros/echo.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/flanger.js b/commands/filtros/flanger.js deleted file mode 100644 index f12a3a1..0000000 --- a/commands/filtros/flanger.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm prmissão para usar este comando, você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no mesmo canal de voz que eu: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/gate.js b/commands/filtros/gate.js deleted file mode 100644 index dfe3c82..0000000 --- a/commands/filtros/gate.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm permissâo para usar este comando, você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/haas.js b/commands/filtros/haas.js deleted file mode 100644 index 46f1724..0000000 --- a/commands/filtros/haas.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm permissâo para usar esse comando, você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/heavybass.js b/commands/filtros/heavybass.js deleted file mode 100644 index 4eaf334..0000000 --- a/commands/filtros/heavybass.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm permissão para usar este comando! você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você têm que entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você têm que entrar no mesmo canal de voz que eu: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/karaoke.js b/commands/filtros/karaoke.js deleted file mode 100644 index dd1f432..0000000 --- a/commands/filtros/karaoke.js +++ /dev/null @@ -1,103 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têmpermissão para usar este comando! você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queueconst - functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm permissão para usar este comando! você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ - - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "There is nothing playing!"); - - //get the filter from the content - let filter = args[0]; - - //if its the same filter as the current one, use bassboost6 - if (args[0] === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adding filter!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/lightbass.js b/commands/filtros/lightbass.js deleted file mode 100644 index a906372..0000000 --- a/commands/filtros/lightbass.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm permissão para usar este comando! você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/mcompand.js b/commands/filtros/mcompand.js deleted file mode 100644 index ab29e64..0000000 --- a/commands/filtros/mcompand.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm permissão para usar esse comando! você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/nightcore.js b/commands/filtros/nightcore.js deleted file mode 100644 index ab29e64..0000000 --- a/commands/filtros/nightcore.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm permissão para usar esse comando! você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/phaser.js b/commands/filtros/phaser.js deleted file mode 100644 index 472829d..0000000 --- a/commands/filtros/phaser.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "MUSIC FILTERS", - useage: `<${path.parse(__filename).name}>`, - description: "*Adds a Filter named " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `<:declined:780403017160982538> Você não têm permissão para usar esse comando! você precisa têr: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/pulsator.js b/commands/filtros/pulsator.js deleted file mode 100644 index d864917..0000000 --- a/commands/filtros/pulsator.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro com o nome " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm permissão para usar esse comando! você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/purebass.js b/commands/filtros/purebass.js deleted file mode 100644 index ab29e64..0000000 --- a/commands/filtros/purebass.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm permissão para usar esse comando! você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/reverse.js b/commands/filtros/reverse.js deleted file mode 100644 index ab29e64..0000000 --- a/commands/filtros/reverse.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm permissão para usar esse comando! você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/subboost.js b/commands/filtros/subboost.js deleted file mode 100644 index 95d7c20..0000000 --- a/commands/filtros/subboost.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm permissão para usar esse comando! você precisa têr: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/surrounding.js b/commands/filtros/surrounding.js deleted file mode 100644 index ab29e64..0000000 --- a/commands/filtros/surrounding.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm permissão para usar esse comando! você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/treble.js b/commands/filtros/treble.js deleted file mode 100644 index ab29e64..0000000 --- a/commands/filtros/treble.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm permissão para usar esse comando! você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/tremolo.js b/commands/filtros/tremolo.js deleted file mode 100644 index ab29e64..0000000 --- a/commands/filtros/tremolo.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm permissão para usar esse comando! você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/vaporwave.js b/commands/filtros/vaporwave.js deleted file mode 100644 index ab29e64..0000000 --- a/commands/filtros/vaporwave.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm permissão para usar esse comando! você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/filtros/vibrato.js b/commands/filtros/vibrato.js deleted file mode 100644 index ab29e64..0000000 --- a/commands/filtros/vibrato.js +++ /dev/null @@ -1,51 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const path = require("path"); -module.exports = { - - name: path.parse(__filename).name, - category: "filtros", - useage: `<${path.parse(__filename).name}>`, - description: "*Adiciona um filtro chamado " + path.parse(__filename).name, - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", ` Você não têm permissão para usar esse comando! você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the filter from the content - let filter = path.parse(__filename).name; - - //if its the same filter as the current one, use bassboost6 - if (filter === queue.filter) filter = "bassboost6"; - - //set the new filter - filter = await client.distube.setFilter(message, filter); - - //send information message - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Adicionando filtro!", filter) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/games/aki.js b/commands/games/aki.js deleted file mode 100644 index 69be8d3..0000000 --- a/commands/games/aki.js +++ /dev/null @@ -1,85 +0,0 @@ -const config = require("../../config.json") -const { prefix } = require('../../config.json'); -const emojis = ["👍", "👎", "❔", "🤔", "🙄", "❌"]; -const isPlaying = new Set(); -const { Client, MessageEmbed } = require("discord.js"); -const { Aki } = require("aki-api"); - -module.exports = { - name: 'aki', - category: 'games', - - run: async (client, message, args) => { - if (message.author.bot || !message.guild) return; - - if (!message.content.startsWith(prefix + "aki")) return; - - if (isPlaying.has(message.author.id)) { - return message.channel.send(":x: | Um jogo já está em andamento.."); - } - - isPlaying.add(message.author.id); - - const aki = new Aki("pt"); // Lista completa de idiomas em: https://github.com/jgoralcz/aki-api - - await aki.start(); - - const msg = await message.channel.send(new MessageEmbed() - .setTitle(`${message.author.username}, Questão ${aki.currentStep + 1}`) - .setColor("#00bfff") - .setDescription(`**${aki.question}**\n${aki.answers.map((an, i) => `${an} | ${emojis[i]}`).join("\n")}`)); - - for (const emoji of emojis) await msg.react(emoji); - - const collector = msg.createReactionCollector((reaction, user) => emojis.includes(reaction.emoji.name) && user.id == message.author.id, { - time: 60000 * 6 - }); - - collector - .on("end", () => isPlaying.delete(message.author.id)) - .on("collect", async ({ - emoji, - users - }) => { - users.remove(message.author).catch(() => null); - - if (emoji.name == "❌") return collector.stop(); - - await aki.step(emojis.indexOf(emoji.name)); - - if (aki.progress >= 70 || aki.currentStep >= 78) { - - await aki.win(); - - collector.stop(); - - message.channel.send(new MessageEmbed() - .setTitle("Este é o seu personagem?") - .setDescription(`**${aki.answers[0].name}**\n${aki.answers[0].description}\nRanking**#${aki.answers[0].ranking}**\n\n[sim (**s**) / não (**n**)]`) - .setImage(aki.answers[0].absolute_picture_path) - .setColor("#00bfff")); - - const filter = m => /(sim|não|s|n)/i.test(m.content) && m.author.id == message.author.id; - - message.channel.awaitMessages(filter, { - max: 1, - time: 30000, - errors: ["time"] - }) - .then(collected => { - const isWinner = /sim|s/i.test(collected.first().content); - message.channel.send(new MessageEmbed() - .setTitle(isWinner ? "Excelente! Acertei mais uma vez" : "Uh. você é o vencedor!") - .setColor("#00bfff") - .setDescription("Eu amo brincar com você")); - }).catch(() => null); - - } else { - msg.edit(new MessageEmbed() - .setTitle(`${message.author.username}, Questão ${aki.currentStep + 1}`) - .setColor("#00bfff") - .setDescription(`**${aki.question}**\n${aki.answers.map((an, i) => `${an} | ${emojis[i]}`).join("\n")}`)); - } - }); - } - } \ No newline at end of file diff --git a/commands/games/amongus.js b/commands/games/amongus.js deleted file mode 100644 index 33e607a..0000000 --- a/commands/games/amongus.js +++ /dev/null @@ -1,44 +0,0 @@ -const discord = require("discord.js"); -/*** -* @param {Discord.client} bot the discord bot client. -* @param {Discord.messsage} message the initial message sent by the user. -* @param {array} args an array of arguments - */ -module.exports = { - name:"amongus", - aliases:["am", "au"], - category:"games", - run:async (bot, message, args) => { - var neb = args.join(' '); - const ayy = bot.emojis.cache.get("756082462677008394"); - const ayy1 = bot.emojis.cache.get("756083219337576481"); - const ayy2 = bot.emojis.cache.get("756082294930014229"); - const ayy3 = bot.emojis.cache.get("756082791019446365"); - const ayy4 = bot.emojis.cache.get("756082699969757264"); - const ayy5 = bot.emojis.cache.get("756143535555870841"); - - // eslint-disable-next-line no-useless-escape - if (!neb) return message.channel.send("Insira algo para pesquisar, por exemplo **mapa / informação**"); - if (neb.toLowerCase() == "maps" || neb.toLowerCase() == "map" || neb.toLowerCase() == "mapa") { - var embs = new discord.MessageEmbed() - .setColor('#FF0000') - .setTitle(`${ayy} AMONG US MAPS`) - .addField(`${ayy1} Polus: `, "[Clique aqui](https://cdn.discordapp.com/attachments/754031126149988453/754033354852270190/POLUS_MAP_GUIDE.png)", true) - .addField(`${ayy2} Mira HQ: `, "[Clique aqui](https://i.redd.it/8i1kd1mp9ij51.png)", true) - .addField(`${ayy3} The Skeld: `, "[Clique aqui](https://cdn.discordapp.com/attachments/756025344993263658/758574260724695080/skeldmapguidev2.png)", true) - .setFooter(`Estes são os mapas completos e detalhados de Between Us! Clique em qualquer um dos links para ver mapas detalhados e HD completos`); - message.channel.send(embs); - } - else if (neb.toLowerCase() == "info" || neb.toLowerCase() == "among us info" || neb.toLowerCase() == "information" || neb == "among us information" || neb.toLowerCase() == "among us informação" || neb.toLowerCase() == "informação") { - var embs1 = new discord.MessageEmbed() - .setColor('RANDOM') - .setTitle(`${ayy3} INFORMAÇÕES AMONG US`) - .addField(`${ayy4} Guia Completo / Dicas: `, "[Clique aqui](https://www.reddit.com/r/AmongUs/comments/gfulqt/effort_post_complete_guide_to_playing_as_impostor/)", true) - .addField(`${ayy5} Impostor: `, "[Clique aqui](https://www.bluestacks.com/blog/game-guides/among-us/amongus-smooth-criminal-guide-en.html)", true) - .addField(`${ayy1} Companheiro de tripulação: `, "[Clique aqui](https://www.bluestacks.com/blog/game-guides/among-us/amongus-crewmate-guide-en.html)", true) - .setFooter("Estas são as instruções completas e detalhadas para Entre Nós com algumas dicas no guia que você pode não conhecer"); - message.channel.send(embs1); - } - -} -} \ No newline at end of file diff --git a/commands/games/fight.js b/commands/games/fight.js deleted file mode 100644 index 4349df1..0000000 --- a/commands/games/fight.js +++ /dev/null @@ -1,256 +0,0 @@ -const Discord = require('discord.js'); -const config = require('../../config.json'); - -const randomItem = arr => arr[Math.floor(Math.random() * arr.length)]; - -const attacks = { - soco: { - damage: { - min: 5.0, - max: 7.0 - }, - attackChance: 0.75, - messages: [ - 'levou um soco na barriga de', - 'levou um soco na cara de', - 'levou um soco nas costas de' - ] - }, - chute: { - damage: { - min: 6.0, - max: 10.0 - }, - attackChance: 0.60, - messages: [ - 'levou um chute na bunda de', - 'foi chutado e caiu no chão por', - 'levou um chute na cabeça de' - ] - }, - empurrão: { - damage: { - min: 9.0, - max: 20.0 - }, - attackChance: 0.35, - messages: [ - 'levou um empurrão de', - 'saiu voando com a força do empurrão de', - 'quebrou uma parede ao ser empurrado com força por' - ] - } -}; - -const validActions = Object.keys(attacks).concat('sair'); -const validActionRegex = new RegExp(validActions.join('|'), 'i'); -const validActionString = validActions.map(action => `**${action}**`).join('\n '); - -class Player { - constructor(user) { - if (Player.cache[user.id]) { - return Player.cache[user.id]; - } - - Player.cache[user.id] = this; - - this.user = user; - - this.reset(); - } - - reset() { - this.hp = 100; - this.isFighting = false; - this.miss = 0; - } - - debug() { - console.log(`${this.user.username}'s HP: ${this.hp}`); - } -} - -Player.cache = {}; - -const generateMessage = () => Object.keys(attacks).map(name => { - const attack = attacks[name]; - return `**${name}**\nDano: \`${attack.damage.min}-${attack.damage.max}\`\nPrecisão: \`${Math.floor(attack.attackChance * 100)}%\``; -}).join('\n\n'); - -module.exports = { - name:"fight", - aliases:["batalhar", "lutar"], - category:"games", - - run: async (client, message, args) => { - - if (args[0] === 'info') { - message.author.send(generateMessage()); - const embed = new Discord.MessageEmbed() - .setDescription(`:crossed_swords: As informações sobre ataque foram enviadas via DM!`) - .setColor(config.color) - message.channel.send({embed}) - return; - } - - const mention = message.mentions.users.first(); - - if (!mention) return message.channel.send(new Discord.MessageEmbed() - .setTitle('Mencione um usuário para iniciar o jogo') - .setColor('#ff0000') - ).then(msg => { - msg.delete({ timeout: 3000 }) - }) - - if(message.mentions.users.first().bot) return message.channel.send(new Discord.MessageEmbed() - .setTitle('Você não pode lutar contra um bot') - .setColor('#ff0000') - ).then(msg => { - msg.delete({ timeout: 3000 }) - }) - - if(mention.id === message.author.id) return message.channel.send (new Discord.MessageEmbed() - .setTitle('Você não pode lutar contra si mesmo!') - .setColor('#ff0000') - ).then(msg => { - msg.delete({ timeout: 3000 }) - }) - - if (mention.presence.status === "offline") return message.channel.send (new Discord.MessageEmbed() - .setTitle('Seu oponente deve estar online para duelar com você!') - .setColor('#ff0000') - ).then(msg => { - msg.delete({ timeout: 3000 }) - }) - - const you = new Player(message.author); - if (you.isFighting) { - const embed = new Discord.MessageEmbed() - .setDescription('Você já está em uma luta!') - .setColor(config.color); - message.channel.send({ embed }) - } - - const opponent = new Player(mention); - if (opponent.isFighting) { - const embed = new Discord.MessageEmbed() - .setDescription('Seu adversario já está em uma luta!') - .setColor(config.color); - message.channel.send({ embed }); - } - - you.isFighting = true; - opponent.isFighting = true; - - fight(message, you, opponent, true); -} -}; - -const fight = (message, player1, player2, turn) => { - if (!player1.isFighting || !player2.isFighting) { - // Se nenhum dos dois estiver jogado reseta o status. - player1.reset(); - player2.reset(); - - return; - } - - const currentPlayer = turn ? player1 : player2; - const targetPlayer = turn ? player2 : player1; - - - const embed = new Discord.MessageEmbed() - .setTitle(`**${currentPlayer.user.username}**, é seu turno.`) - .setDescription(`Escolha uma das opções abaixo e digite no chat: \n ${validActionString} `) - .setThumbnail('https://i.imgur.com/TwTKFPn.png') - .setColor(config.color); - message.channel.send({ embed }); - message.channel.awaitMessages(response => response.author.id === currentPlayer.user.id && validActionRegex.test(response.content), { - max: 1, - time: 30000, - errors: ['time'], - }).then(collected => { - const msg = collected.first(); - const input = msg.content.toLowerCase(); - - if (input === 'sair') { - const embed = new Discord.MessageEmbed() - .setDescription(`**${currentPlayer.user.username}** desistiu do jogo para **${targetPlayer.user.username}**!`) - .addField('**Vencedor**', targetPlayer.user.username, true) - .addField('**Desistencia**', currentPlayer.user.username, true) - .setThumbnail('https://i.imgur.com/3QzRsxB.png') - .setColor(config.color); - msg.channel.send({ embed }); - - currentPlayer.reset(); - targetPlayer.reset(); - - return; - } - - currentPlayer.miss = 0; - - const attack = attacks[input]; - - if (Math.random() > attack.attackChance) { - const embed = new Discord.MessageEmbed() - .setDescription('Você falhou durante o ataque!') - .setThumbnail('https://i.imgur.com/buJdoWo.png') - .setColor(config.color); - message.channel.send({ embed }); - } else { - // variation = max - min - // rand * variation + min - const damage = Math.round(Math.random() * (attack.damage.max - attack.damage.min) + attack.damage.min); - - targetPlayer.hp -= damage; - const embed = new Discord.MessageEmbed() - .setDescription(`**${targetPlayer.user.username}** ${randomItem(attack.messages)} **${currentPlayer.user.username}**`) - .addField(`HP de **${targetPlayer.user.username}**`, `${targetPlayer.hp} (-${damage} HP)`, true) - .setThumbnail('https://i.imgur.com/CitIGQy.png') - .setColor(config.color); - msg.channel.send({ embed }); - - if (targetPlayer.hp <= 0) { - const embed = new Discord.MessageEmbed() - .setDescription(`**${currentPlayer.user.username}** foi derrotado por **${targetPlayer.user.username}**!`) - .addField('**Vencedor**', currentPlayer.user.username, true) - .addField('**Perdedor**', targetPlayer.user.username, true) - .setThumbnail('https://i.imgur.com/Je4z4D1.png') - .setColor(config.color); - msg.channel.send({ embed }); - targetPlayer.reset(); - currentPlayer.reset(); - return; - } - } - - fight(message, player1, player2, !turn); - }).catch(() => { - const embed = new Discord.MessageEmbed() - .setDescription(`**${currentPlayer.user.username}** não atacou, pulando o turno...`) - .addField('**Ganhou a vez**', targetPlayer.user.username, true) - .addField('**Ausente (?)**', currentPlayer.user.username, true) - .setThumbnail('https://i.imgur.com/zA854nF.png') - .setColor(config.color); - message.channel.send({ embed }); - currentPlayer.miss++; - - if (currentPlayer.miss >= 2) { - message.channel.send(':x: Parece que ninguém responde, terminando jogo.'); - const embed = new Discord.MessageEmbed() - .setDescription(`**${currentPlayer.user.username}** foi derrotado por **${targetPlayer.user.username}**!`) - .addField('**Vencedor**', targetPlayer.user.username, true) - .addField('**Perdedor**', currentPlayer.user.username, true) - .setThumbnail('https://i.imgur.com/3QzRsxB.png') - .setColor(config.color); - message.channel.send({ embed }); - currentPlayer.reset(); - targetPlayer.reset(); - - return; - } - - fight(message, player1, player2, !turn); - }); -} \ No newline at end of file diff --git a/commands/games/hangman.js b/commands/games/hangman.js deleted file mode 100644 index a7fc531..0000000 --- a/commands/games/hangman.js +++ /dev/null @@ -1,94 +0,0 @@ -const Discord = require("discord.js"); -const config = require("../../config.json"); -const { stripIndents } = require("common-tags"); -const words = require('../../assets/json/words.json'); -let serversmap = new Map(); - -module.exports = { - name:"hangman", - aliases:["forca"], - description:"Jogue uma partida de jogo da forca", -run: async(client, msg, args) => { - if (serversmap.has(msg.guild.id)) { - return msg.channel.send( - new MessageEmbed() - .setTitle("Erro") - .setDescription( - "Já existe uma instância do jogo rodando neste servidor." - ) - .setColor("RED") - ); - } - - try { - const word = words[Math.floor(Math.random() * words.length)].toLowerCase(); - //console.log(`Forca: ${word}`) - let points = 0; - let displayText = null; - let guessed = false; - const confirmation = []; - const incorrect = []; - const display = new Array(word.length).fill("_"); - while (word.length !== confirmation.length && points < 6) { - await msg.reply(stripIndents` - ${ - displayText === null - ? "Lá vamos nós!" - : displayText - ? "Bom trabalho!" - : "Nope! :(" - } - \`${display.join(" ")}\`. Qual letra você escolhe? - Letras incorretas: ${incorrect.join(", ") || "Nenhuma"} - \`\`\` - ___________ - | | - | ${points > 0 ? "O" : ""} - | ${points > 2 ? "—" : " "}${points > 1 ? "|" : ""}${points > 3 ? "—" : ""} - | ${points > 4 ? "/" : ""} ${points > 5 ? "\\" : ""} - =========== - \`\`\` - `); - const filter = res => { - const choice = res.content.toLowerCase(); - return ( - res.author.id === msg.author.id && - !confirmation.includes(choice) && - !incorrect.includes(choice) - ); - }; - const guess = await msg.channel.awaitMessages(filter, { - max: 1, - time: 30000 - }); - if (!guess.size) { - await msg.reply("Ish, o tempo acabou!"); - break; - } - const choice = guess.first().content.toLowerCase(); - if (choice === "cancelar") break; - if (choice.length > 1 && choice === word) { - guessed = true; - break; - } else if (word.includes(choice)) { - displayText = true; - for (let i = 0; i < word.length; i++) { - if (word.charAt(i) !== choice) continue; // eslint-disable-line max-depth - confirmation.push(word.charAt(i)); - display[i] = word.charAt(i); - } - } else { - displayText = false; - if (choice.length === 1) incorrect.push(choice); - points++; - } - } - - if (word.length === confirmation.length || guessed) - return msg.reply(`Você acertou a palavra ${word}!`); - return msg.reply(`Você perdeu, a palavra era ${word}...`); - } catch (err) { - return msg.reply(`Erro: \`${err.message}\``); - } -} -} \ No newline at end of file diff --git a/commands/games/ppt.js b/commands/games/ppt.js deleted file mode 100644 index 1992c55..0000000 --- a/commands/games/ppt.js +++ /dev/null @@ -1,35 +0,0 @@ -const Discord = require('discord.js'); -const prefix = require('../../config.json'); -module.exports = { - name:"ppt", - category:"games", - aliases:["jokenpo", "jokenpô"], - run:async (client, message, args, defaut_prefix) => { - const sp = args.join(" ") - const rand = Math.floor(Math.random() * 6) - if(!args.join(" ")) return message.channel.send(`${message.author}, eu preciso que você escreva algo após o comando \`${prefix}ppt \``) - if(rand === 0 || rand === 1) { - chs = `pedra` - } - - if(rand === 2 || rand === 3) { - chs = `tesoura` - } - - if(rand === 4 || rand === 5 ) { - chs = `papel` - } - - if(sp == `papel` && chs == `papel` || sp == `pedra` && chs == `pedra` || sp == 'tesoura' && chs == 'tesoura') { - message.channel.send(`Você escolheu **${sp}** e eu escolhi **${chs}**`) - } - - if(sp == `papel` && chs == `pedra` || sp == `pedra` && chs == `tesoura` || sp == `tesoura` && chs == `papel`){ - message.channel.send(`${message.author}, Você escolheu **${sp}** e eu escolhi **${chs}**`) - } - - if(sp == `papel` && chs == `tesoura` || sp == `pedra` && chs == `papel` || sp == `tesoura` && chs == `pedra`){ - message.channel.send(`${message.author}, Você escolheu **${sp}** e eu escolhi **${chs}**`) - } -} -} \ No newline at end of file diff --git a/commands/games/snack.js b/commands/games/snack.js deleted file mode 100644 index f2a0a6f..0000000 --- a/commands/games/snack.js +++ /dev/null @@ -1,21 +0,0 @@ -const SnakeGame = require('snakecord'); -const Discord = require("discord.js"); - -const snakeGame = new SnakeGame({ - title: 'Jogo da Cobra', - color: "GREEN", - timestamp: true, - gameOverTitle: "Game Over " -}); - - -module.exports = { - name: 'snake', - description: 'none', - category: "Fun", - aliases: ["cobra"], - usage: "snake", -run: async(bot, message, args) => { - snakeGame.newGame(message); - }, -};{} \ No newline at end of file diff --git a/commands/games/tictactoe.js b/commands/games/tictactoe.js deleted file mode 100644 index 706c9ff..0000000 --- a/commands/games/tictactoe.js +++ /dev/null @@ -1,982 +0,0 @@ -const Discord = require('discord.js'); -const {MessageEmbed} = require("discord.js"); - -module.exports = { - name: "tictactoe", - category:"", - aliases:["jogodavelha", "velha"], - description:"Jogue uma partida de jogo da velha", - run: async (client, message, args) => { - const mention = message.mentions.members.first(); - const validation = [0, 0, 0, 0, 0, 0, 0, 0, 0]; - - if (!mention) - return message.channel.send( - "Você deve mencionar um usuário para jogar o Jogo da Velha!" - ); - if (mention.presence.status === "offline") - return message.reply( - "O usuário mencionado deve estar online para jogar Jogo da Velha contra você!" - ); - if (mention.user.bot) - return message.channel.send( - "Você não pode mencionar um bot para jogar o Jogo da Velha!" - ); - if (message.author.id === mention.id) - return message.channel.send( - "Você não pode brincar consigo mesmo. Você precisa mencionar um usuário contra quem deseja jogar." - ); - - let wantToPlayMessage; - let wantToPlay; - try { - const wannaplay = "%mention, você quer jogar Jogo da Velha contra %author? Se sim, digite '**sim**' no chat!" - .replace("%mention", mention) - .replace("%author", message.author); - wantToPlayMessage = await message.channel.send(wannaplay); - wantToPlay = await message.channel.awaitMessages( - message2 => message2.author.id === mention.id, - { - max: 1, - time: 12000, - errors: ["time"] - } - ); - } catch (error) { - return wantToPlayMessage.delete(); - } - - if (wantToPlay.first().content.toLowerCase() !== "sim") { - const gamecanceled = "Jogo cancelado porque %mention não respondeu ou não quer jogar!".replace( - "%mention", - mention.user.username - ); - return message.reply(gamecanceled); - } - - await wantToPlayMessage.delete(); - await wantToPlay.first().delete(); - - await message.channel.send(`Novo Jogo da Velha criado!`); - let gameEmbed = new MessageEmbed() - .setTitle("Jogo da Velha game") - .setDescription( - "``` 1 | 2 | 3 \n---|---|-- \n 4 | 5 | 6 \n---|---|-- \n 7 | 8 | 9```" - ) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('#00BFFF'); - const game = await message.channel.send({ - embed: gameEmbed - }); - - try { - const yourTurnMessage = await message.channel.send( - `${message.author}, É sua vez ‼` - ); - const response1 = await message.channel.awaitMessages( - message2 => - message.author.id === message2.author.id && - message2.content > 0 && - message2.content < 10 && - validation[message2.content - 1] === 0, - { - max: 1, - time: 30000, - errors: ["time"] - } - ); - - await yourTurnMessage.delete(); - await response1.first().delete(); - - const editedDescription = gameEmbed.description.replace( - response1.first().content, - response1.first().author.id === message.author.id ? "X" : "O" - ); - gameEmbed = new MessageEmbed() - .setTitle("Jogo da Velha game") - .setDescription(editedDescription) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('#00BFFF'); - - await game.edit({ - embed: gameEmbed - }); - validation[response1.first().content - 1] = 1; - } catch (error) { - const noanswer = "%author não respondeu por 30 segundos e %user ganhou a rodada." - .replace("%user", mention) - .replace("%author", message.author); - const noAnswerEmbed = new MessageEmbed() - .setTitle( - "Tempo esgotado!" - ) - .setDescription(noanswer) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('#FFFF00'); - return message.channel.send({ - embed: noAnswerEmbed - }); - } - - try { - const yourTurnMessage = await message.channel.send(`${mention}, É a sua vez ‼`); - const response1 = await message.channel.awaitMessages( - message2 => - message2.author.id === mention.id && - message2.content > 0 && - message2.content < 10 && - validation[message2.content - 1] === 0, - { - max: 1, - time: 30000, - errors: ["time"] - } - ); - - await yourTurnMessage.delete(); - await response1.first().delete(); - - const editedDescription = gameEmbed.description.replace( - response1.first().content, - response1.first().author.id === message.author.id ? "X" : "O" - ); - gameEmbed = new MessageEmbed() - .setTitle("Jogo da Velha game") - .setDescription(editedDescription) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('#00BFFF'); - - await game.edit({ - embed: gameEmbed - }); - validation[response1.first().content - 1] = 2; - } catch (error) { - const noanswer = "%author não respondeu por 30 segundos e %user ganhou a rodada." - .replace("%user", message.author) - .replace("%author", mention); - const noAnswerEmbed = new MessageEmbed() - .setTitle( - "Tempo esgotado!" - ) - .setDescription(noanswer) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('RED'); - return message.channel.send({ - embed: noAnswerEmbed - }); - } - - try { - const yourTurnMessage = await message.channel.send( - `${message.author}, É a sua vez ‼` - ); - const response1 = await message.channel.awaitMessages( - message2 => - message.author.id === message2.author.id && - message2.content > 0 && - message2.content < 10 && - validation[message2.content - 1] === 0, - { - max: 1, - time: 30000, - errors: ["time"] - } - ); - - await yourTurnMessage.delete(); - await response1.first().delete(); - - const editedDescription = gameEmbed.description.replace( - response1.first().content, - response1.first().author.id === message.author.id ? "X" : "O" - ); - gameEmbed = new MessageEmbed() - .setTitle("Jogo da Velha game") - .setDescription(editedDescription) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('#00BFFF'); - - await game.edit({ - embed: gameEmbed - }); - validation[response1.first().content - 1] = 1; - } catch (error) { - const noanswer = "%author não respondeu por 30 segundos e %user ganhou a rodada." - .replace("%user", mention) - .replace("%author", message.author); - const noAnswerEmbed = new MessageEmbed() - .setTitle( - "Tempo esgotado!" - ) - .setDescription(noanswer) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('RED'); - return message.channel.send({ - embed: noAnswerEmbed - }); - } - - try { - const yourTurnMessage = await message.channel.send(`${mention}, É a sua vez ‼`); - const response1 = await message.channel.awaitMessages( - message2 => - message2.author.id === mention.id && - message2.content > 0 && - message2.content < 10 && - validation[message2.content - 1] === 0, - { - max: 1, - time: 30000, - errors: ["time"] - } - ); - - await yourTurnMessage.delete(); - await response1.first().delete(); - - const editedDescription = gameEmbed.description.replace( - response1.first().content, - response1.first().author.id === message.author.id ? "X" : "O" - ); - gameEmbed = new MessageEmbed() - .setTitle("Jogo da Velha game") - .setDescription(editedDescription) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('#00BFFF'); - - await game.edit({ - embed: gameEmbed - }); - validation[response1.first().content - 1] = 2; - } catch (error) { - const noanswer = "%author não respondeu por 30 segundos e %user ganhou a rodada." - .replace("%user", message.author) - .replace("%author", mention); - const noAnswerEmbed = new MessageEmbed() - .setTitle( - "Tempo esgotado!" - ) - .setDescription(noanswer) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('RED'); - return message.channel.send({ - embed: noAnswerEmbed - }); - } - - try { - const yourTurnMessage = await message.channel.send( - `${message.author}, É a sua vez ‼` - ); - const response1 = await message.channel.awaitMessages( - message2 => - message.author.id === message2.author.id && - message2.content > 0 && - message2.content < 10 && - validation[message2.content - 1] === 0, - { - max: 1, - time: 30000, - errors: ["time"] - } - ); - - await yourTurnMessage.delete(); - await response1.first().delete(); - - const editedDescription = gameEmbed.description.replace( - response1.first().content, - response1.first().author.id === message.author.id ? "X" : "O" - ); - gameEmbed = new MessageEmbed() - .setTitle("Jogo da Velha game") - .setDescription(editedDescription) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('#00BFFF'); - - await game.edit({ - embed: gameEmbed - }); - validation[response1.first().content - 1] = 1; - } catch (error) { - const noanswer = "%author não respondeu por 30 segundos e %user ganhou a rodada." - .replace("%user", mention) - .replace("%author", message.author); - const noAnswerEmbed = new MessageEmbed() - .setTitle( - "Tempo esgotado!" - ) - .setDescription(noanswer) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('RED'); - return message.channel.send({ - embed: noAnswerEmbed - }); - } - - try { - const yourTurnMessage = await message.channel.send(`${mention}, É a sua vez ‼`); - const response1 = await message.channel.awaitMessages( - message2 => - message2.author.id === mention.id && - message2.content > 0 && - message2.content < 10 && - validation[message2.content - 1] === 0, - { - max: 1, - time: 30000, - errors: ["time"] - } - ); - - await yourTurnMessage.delete(); - await response1.first().delete(); - - const editedDescription = gameEmbed.description.replace( - response1.first().content, - response1.first().author.id === message.author.id ? "X" : "O" - ); - gameEmbed = new MessageEmbed() - .setTitle("Jogo da Velha game") - .setDescription(editedDescription) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('#00BFFF'); - - await game.edit({ - embed: gameEmbed - }); - validation[response1.first().content - 1] = 2; - } catch (error) { - const noanswer = "%author não respondeu por 30 segundos e %user ganhou a rodada." - .replace("%user", message.author) - .replace("%author", mention); - const noAnswerEmbed = new MessageEmbed() - .setTitle( - "Tempo esgotado!" - ) - .setDescription(noanswer) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('#00BFFF'); - return message.channel.send({ - embed: noAnswerEmbed - }); - } - - const winnerEmbed = new MessageEmbed() - .setTitle("Game over!") - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('#00BFFF'); - - if (validation[0] === 1 && validation[1] === 1 && validation[2] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[2] === 1 && validation[5] === 1 && validation[8] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[6] === 1 && validation[7] === 1 && validation[8] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 1 && validation[3] === 1 && validation[6] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 1 && validation[4] === 1 && validation[8] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[2] === 1 && validation[4] === 1 && validation[6] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[1] === 1 && validation[4] === 1 && validation[7] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[3] === 1 && validation[4] === 1 && validation[6] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 2 && validation[1] === 2 && validation[2] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[2] === 2 && validation[5] === 2 && validation[8] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[6] === 2 && validation[7] === 2 && validation[8] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 2 && validation[3] === 2 && validation[6] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 2 && validation[4] === 2 && validation[8] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[2] === 2 && validation[4] === 2 && validation[6] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[1] === 2 && validation[4] === 2 && validation[7] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[3] === 2 && validation[4] === 2 && validation[6] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - - try { - const yourTurnMessage = await message.channel.send( - `${message.author}, É a sua vez ‼` - ); - const response1 = await message.channel.awaitMessages( - message2 => - message.author.id === message2.author.id && - message2.content > 0 && - message2.content < 10 && - validation[message2.content - 1] === 0, - { - max: 1, - time: 30000, - errors: ["time"] - } - ); - - await yourTurnMessage.delete(); - await response1.first().delete(); - - const editedDescription = gameEmbed.description.replace( - response1.first().content, - response1.first().author.id === message.author.id ? "X" : "O" - ); - gameEmbed = new MessageEmbed() - .setTitle("Jogo da Velha game") - .setDescription(editedDescription) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('#00BFFF'); - - await game.edit({ - embed: gameEmbed - }); - validation[response1.first().content - 1] = 1; - } catch (error) { - const noanswer = "%author não respondeu por 30 segundos e %user ganhou a rodada." - .replace("%user", mention) - .replace("%author", message.author); - const noAnswerEmbed = new MessageEmbed() - .setTitle( - "Tempo esgotado!" - ) - .setDescription(noanswer) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('#00BFFF'); - return message.channel.send({ - embed: noAnswerEmbed - }); - } - - if (validation[0] === 1 && validation[1] === 1 && validation[2] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[2] === 1 && validation[5] === 1 && validation[8] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[6] === 1 && validation[7] === 1 && validation[8] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 1 && validation[3] === 1 && validation[6] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 1 && validation[4] === 1 && validation[8] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[2] === 1 && validation[4] === 1 && validation[6] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[1] === 1 && validation[4] === 1 && validation[7] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[3] === 1 && validation[4] === 1 && validation[6] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 2 && validation[1] === 2 && validation[2] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[2] === 2 && validation[5] === 2 && validation[8] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[6] === 2 && validation[7] === 2 && validation[8] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 2 && validation[3] === 2 && validation[6] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 2 && validation[4] === 2 && validation[8] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[2] === 2 && validation[4] === 2 && validation[6] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[1] === 2 && validation[4] === 2 && validation[7] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[3] === 2 && validation[4] === 2 && validation[6] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - - try { - const yourTurnMessage = await message.channel.send(`${mention}, É a sua vez ‼`); - const response1 = await message.channel.awaitMessages( - message2 => - message2.author.id === mention.id && - message2.content > 0 && - message2.content < 10 && - validation[message2.content - 1] === 0, - { - max: 1, - time: 30000, - errors: ["time"] - } - ); - - await yourTurnMessage.delete(); - await response1.first().delete(); - - const editedDescription = gameEmbed.description.replace( - response1.first().content, - response1.first().author.id === message.author.id ? "X" : "O" - ); - gameEmbed = new MessageEmbed() - .setTitle("Jogo da Velha game") - .setDescription(editedDescription) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('#00BFFF'); - - await game.edit({ - embed: gameEmbed - }); - validation[response1.first().content - 1] = 2; - } catch (error) { - const noanswer = "%author não respondeu por 30 segundos e %user ganhou a rodada." - .replace("%user", message.author) - .replace("%author", mention); - const noAnswerEmbed = new MessageEmbed() - .setTitle( - "Tempo esgotado!" - ) - .setDescription(noanswer) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('RED'); - return message.channel.send({ - embed: noAnswerEmbed - }); - } - - if (validation[0] === 1 && validation[1] === 1 && validation[2] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[2] === 1 && validation[5] === 1 && validation[8] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[6] === 1 && validation[7] === 1 && validation[8] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 1 && validation[3] === 1 && validation[6] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 1 && validation[4] === 1 && validation[8] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[2] === 1 && validation[4] === 1 && validation[6] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[1] === 1 && validation[4] === 1 && validation[7] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[3] === 1 && validation[4] === 1 && validation[6] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 2 && validation[1] === 2 && validation[2] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[2] === 2 && validation[5] === 2 && validation[8] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[6] === 2 && validation[7] === 2 && validation[8] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 2 && validation[3] === 2 && validation[6] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 2 && validation[4] === 2 && validation[8] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[2] === 2 && validation[4] === 2 && validation[6] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[1] === 2 && validation[4] === 2 && validation[7] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[3] === 2 && validation[4] === 2 && validation[6] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - - try { - const yourTurnMessage = await message.channel.send( - `${message.author}, É a sua vez ‼` - ); - const response1 = await message.channel.awaitMessages( - message2 => - message.author.id === message2.author.id && - message2.content > 0 && - message2.content < 10 && - validation[message2.content - 1] === 0, - { - max: 1, - time: 30000, - errors: ["time"] - } - ); - - await yourTurnMessage.delete(); - await response1.first().delete(); - - const editedDescription = gameEmbed.description.replace( - response1.first().content, - response1.first().author.id === message.author.id ? "X" : "O" - ); - gameEmbed = new MessageEmbed() - .setTitle("Jogo da Velha game") - .setDescription(editedDescription) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('#00BFFF'); - - await game.edit({ - embed: gameEmbed - }); - validation[response1.first().content - 1] = 1; - } catch (error) { - const noanswer = "%author não respondeu por 30 segundos e %user ganhou a rodada." - .replace("%user", mention) - .replace("%author", message.author); - const noAnswerEmbed = new MessageEmbed() - .setTitle( - "Tempo esgotado!" - ) - .setDescription(noanswer) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('RED'); - return message.channel.send({ - embed: noAnswerEmbed - }); - } - - if (validation[0] === 1 && validation[1] === 1 && validation[2] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[2] === 1 && validation[5] === 1 && validation[8] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[6] === 1 && validation[7] === 1 && validation[8] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 1 && validation[3] === 1 && validation[6] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 1 && validation[4] === 1 && validation[8] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[2] === 1 && validation[4] === 1 && validation[6] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[1] === 1 && validation[4] === 1 && validation[7] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[3] === 1 && validation[4] === 1 && validation[6] === 1) { - const win = "%user ganhou essa rodada!".replace("%user", message.author); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 2 && validation[1] === 2 && validation[2] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[2] === 2 && validation[5] === 2 && validation[8] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[6] === 2 && validation[7] === 2 && validation[8] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 2 && validation[3] === 2 && validation[6] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[0] === 2 && validation[4] === 2 && validation[8] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[2] === 2 && validation[4] === 2 && validation[6] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[1] === 2 && validation[4] === 2 && validation[7] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - if (validation[3] === 2 && validation[4] === 2 && validation[6] === 2) { - const win = "%user ganhou essa rodada!".replace("%user", mention); - winnerEmbed.setDescription(win); - return message.channel.send({ - embed: winnerEmbed - }); - } - const drawEmbed = new MessageEmbed() - .setTitle("Game over!") - .setDescription( - "Ninguém ganhou, é empate! A próxima rodada pode ser melhor." - ) - .setFooter(`${message.author.username} vs ${mention.user.username}`) - .setColor('GREEN'); - - return message.channel.send({ - embed: drawEmbed - }); - } -}; diff --git a/commands/imagem/bob.js b/commands/imagem/bob.js deleted file mode 100644 index 99d33d6..0000000 --- a/commands/imagem/bob.js +++ /dev/null @@ -1,25 +0,0 @@ -const jimp = require("jimp") - -module.exports = { - name:"bob", - run:async (client, message, args, prefix) => { - let img = jimp.read("https://media.discordapp.net/attachments/804379222025961505/816493067359092796/download_1.png?width=462&height=406") - if (!args[0]) return message.channel.send("Você precisa escrever algo.") - if(args[0].length > 50) { - return message.reply('você ultrapassou o limite de 50 caracteres.') - } - message.channel.send(`📝 | editando...`).then(msg => { - img.then(image => { - jimp.loadFont(jimp.FONT_SANS_32_BLACK).then(font => { - image.resize(685, 500) - image.print(font, 20, 30, args.join(" "), 700) - image.getBuffer(jimp.MIME_PNG, (err, i) => { - message.channel.send({files: [{ attachment: i, name: "bob.png"}]}).then(m => { - msg.delete() - }) - }) - }) - }) - }) - } - } \ No newline at end of file diff --git a/commands/imagem/changemymind.js b/commands/imagem/changemymind.js deleted file mode 100644 index 72715c8..0000000 --- a/commands/imagem/changemymind.js +++ /dev/null @@ -1,33 +0,0 @@ -const { MessageEmbed } = require("discord.js"); -const fetch = require("node-fetch"); - -module.exports = { - name: "changemymind", - usage: "cmm ", - aliases: ["cmm", "ideia",], - description: "Coloque sua frase dentro de uma imagem Change my mind", - category: "imagem", - run: async(bot, message, args) => { - const text = args.join(" "); - - if (!text) return message.channel.send("Por favor, forneça um texto"); - - const sendMsg = await message.channel.send("⚙ Processando imagem.."); - - const data = await fetch( - `https://nekobot.xyz/api/imagegen?type=changemymind&text=${text}` - ).then((res) => res.json()); - - sendMsg.delete(); - const embed = new MessageEmbed() - .setFooter(message.author.username) - .setColor("BLUE") - .setDescription( - `[Clique aqui se a imagem não carregar.](${data.message})` - ) - .setImage(data.message) - .setTimestamp(); - - message.channel.send({ embed }); - }, -}; \ No newline at end of file diff --git a/commands/imagem/clyde.js b/commands/imagem/clyde.js deleted file mode 100644 index cc86ecf..0000000 --- a/commands/imagem/clyde.js +++ /dev/null @@ -1,19 +0,0 @@ - -const Discord = require('discord.js'); -const fetch = require('node-fetch'); - -module.exports = { - name:"clyde", - run:async (client, message, args, prefix) => { - - let text = args.join(" "); - - if (!text) { - return message.channel.send(`${message.author}, Eu preciso que você especifique o texto.`); - } - let res = await fetch(encodeURI(`https://nekobot.xyz/api/imagegen?type=clyde&text=${text}`)); - let json = await res.json(); - let attachment = new Discord.MessageAttachment(json.message, "clyde.png"); - message.channel.send(attachment); -} -} \ No newline at end of file diff --git a/commands/imagem/firstword.js b/commands/imagem/firstword.js deleted file mode 100644 index 69ab967..0000000 --- a/commands/imagem/firstword.js +++ /dev/null @@ -1,38 +0,0 @@ -const Discord = require('discord.js') -var Jimp = require("jimp") - -module.exports = { - name:"firstword", - aliases:["first", "word", "primeirapalavra"], - run:async (bot, message, args) => { - - if (message.content.split(' ').slice(1).join(' ').length < 1) { - message.channel.send(`📝 | Você não escreveu nada.`) - } else { - if (message.content.split(' ').slice(1).join(' ').length > 50) { - message.channel.send('📝 Você ultrapassou o limite de 50 caracteres.') - } else { - if (message.member.hasPermission('ATTACH_FILES')) { - var authorMessage = message - message.channel.send(`📝 | editando...`).then(msg => { - Jimp.read(`https://cdn.discordapp.com/attachments/538711394137407488/567123894956457984/tirinha_baby.png`, function (err, image) { - if (err) message.reply('ocorreu um erro ao criar a imagem.') - Jimp.loadFont(Jimp.FONT_SANS_32_BLACK).then(function (font) { - image.print(font, 11, 13, authorMessage.content.split(' ').slice(1).join(' ')[0] + '... ' + authorMessage.content.split(' ').slice(1).join(' ')[0] + '...', 400) - image.print(font, 19, 290, authorMessage.content.split(' ').slice(1).join(' '), 320) - image.getBuffer(Jimp.MIME_PNG, (err, buffer) => { - const attachment = new Discord.MessageAttachment(buffer, 'primeiraspalavras.png') - message.channel.send(attachment).then(message => { - msg.delete() - }) - }) - }) - }) - }) - } else { - message.channel.send('Eu não tenho a permissão necessária para fazer isso. `ATTACH_FILES`') - } - } - } -} -} \ No newline at end of file diff --git a/commands/imagem/laranjo.js b/commands/imagem/laranjo.js deleted file mode 100644 index da59acf..0000000 --- a/commands/imagem/laranjo.js +++ /dev/null @@ -1,29 +0,0 @@ -// Adapte para seu bot, isso é a base! By: Rafa -const jimp = require("jimp") -const Discord = require('discord.js') - -module.exports = { - name:"laranjo", - run:async (client, message, args, prefix) => { - let img = jimp.read("https://media.discordapp.net/attachments/510871777728135201/777618213331796029/laranjo-meme-star.jpg?width=627&height=452") - if (!args[0]) return message.send("indique que o laranjo deve falar.") - if(args[0].length > 50) { - return message.channel.send(`${message.author}, você ultrapassou o limite de 50 caracteres.`) - } - let m = await message.channel.send(`${message.author}, espere um pouco...`); - img.then(image => { - jimp.loadFont(jimp.FONT_SANS_32_BLACK).then(font => { - image.resize(685, 494) - image.print(font, 20, 30, args.join(" "), 600) - image.getBuffer(jimp.MIME_PNG, (err, i) => { - const efe = new Discord.MessageEmbed() - .setTitle('<:stonks:782669448846639125> | Stonks') - .setImage({files: [{ attachment: i, name: "laranjo.png"}]}) - .setColor('ff0000') - message.channel.send({files: [{ attachment: i, name: "laranjo.png"}]}) - m.delete({ timeout: 3000 }); - }) - }) - }) - } -} \ No newline at end of file diff --git a/commands/imagem/meme.js b/commands/imagem/meme.js deleted file mode 100644 index f89b7f8..0000000 --- a/commands/imagem/meme.js +++ /dev/null @@ -1,95 +0,0 @@ -const Discord = require("discord.js"); - - module.exports = { - name: "meme", - usage: "meme", - description: "Gera imagens com memes aleátorios", - category: "diversão", - run: async (client, message, args) => { - - var list = [ - "https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcTo7bKomp-1j5cRHPcoXejzhnS_GDsZVu1jkg&usqp=CAU", - "https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcR1LJMKjaa5RYPlJheNuZGnO5Hx4C1ZQlOoQg&usqp=CAU", - "https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcSikJtprG1gNxHz422-NxF5V6afNKJHkILRXg&usqp=CAU", - "https://media.discordapp.net/attachments/784840761069142016/804378878453874688/52ce6767e7f6051eeba42db04e35bf0f.jpg?width=406&height=406", - "https://media.discordapp.net/attachments/784840761069142016/804378878192779264/c6187228501015f23eee85341aca0df2.jpg?width=408&height=406", - "https://media.discordapp.net/attachments/784840761069142016/804378877748969502/IMG-20201222-WA0005-2-1.jpg?width=487&height=406", - "https://media.discordapp.net/attachments/784840761069142016/804378488411783178/2327474e7267cddd67e2f1197f1296e6.jpg?width=416&height=406", - "https://media.discordapp.net/attachments/784840761069142016/804378308900421702/56ebfe779cd5956d2a37618d63c08198.jpg?width=187&height=405", - "https://images7.memedroid.com/images/UPLOADED230/6012d1a881730.jpeg", - "https://images7.memedroid.com/images/UPLOADED940/6012b4a7c8506.jpeg", - "https://images3.memedroid.com/images/UPLOADED948/6012acb1bfdad.jpeg", - "https://images3.memedroid.com/images/UPLOADED1/60124c30eae5b.jpeg", - "https://images3.memedroid.com/images/UPLOADED409/60135505e49c3.jpeg", - "https://images7.memedroid.com/images/UPLOADED562/60131d2721aa5.jpeg", - "https://i.pinimg.com/564x/7f/f4/d4/7ff4d419b70274582940ee4816416f9b.jpg", - "https://i.pinimg.com/236x/f8/b8/75/f8b8751ca5c8a684c14a8fb74a40ce0c.jpg", - "https://i.pinimg.com/236x/9c/aa/40/9caa4010c40bd090130b8c97e6fe6b8e.jpg", - "https://i.pinimg.com/236x/a9/05/a1/a905a15356c1d6767ea5cb89f549db91.jpg", - "https://i.pinimg.com/236x/22/6d/c9/226dc9779ffa1df9d80933835576cc8a.jpg", - "https://i.pinimg.com/236x/d0/95/9f/d0959f91f7f7622c5beaf1f385a354e8.jpg", - "https://i.pinimg.com/236x/84/11/61/841161636c71f618810f131042414865.jpg", - "https://i.pinimg.com/236x/6e/01/ca/6e01ca4856ec609ac918166a32deee8c.jpg", - "https://i.pinimg.com/236x/44/41/80/44418069b811a670c87dd8e3381d0a62.jpg", - "https://i.pinimg.com/236x/51/59/e4/5159e4a60bff3acb758346cd21ccac1b.jpg", - "https://i.pinimg.com/236x/b2/3a/06/b23a0644a28b859856fa426a453c7695.jpg", - "https://i.pinimg.com/236x/0d/45/85/0d4585bfd3cc8a788c6be5ac3e7dafc7.jpg", - "https://i.pinimg.com/236x/40/ca/f9/40caf95deae83a3cf9f010a422fd838a.jpg", - "https://i.pinimg.com/236x/60/47/3b/60473b41615f03874d018f36a70c9b00.jpg", - "https://i.pinimg.com/236x/dc/27/5e/dc275ef8f49bfa40bc70e7ce4c97dacd.jpg", - "https://i.pinimg.com/236x/16/08/22/16082203f81f181b5e9894743fb6b3f1.jpg", - "https://i.pinimg.com/236x/e7/af/0b/e7af0be5009f2513a31e0e1ff8c9977d.jpg", - "https://i.pinimg.com/236x/bc/e3/49/bce349f74491fe2b45feb538adaf85b4.jpg", - "https://i.pinimg.com/236x/81/0c/cd/810ccd0f2d1709e041d52be113a05fc8.jpg", - "https://i.pinimg.com/236x/49/18/80/491880d4c255f69c34795e053780413a.jpg", - "https://i.pinimg.com/236x/e9/8a/15/e98a157e9e71b1dcd225aeaa1ea8bbb3.jpg", - "https://i.pinimg.com/236x/ad/85/be/ad85be487bd89ccfa8ad6c97eacf1d21.jpg", - "https://cdn.maioresemelhores.com/imagens/mm-meme-8-quarentena-busao.jpg", - "https://images3.memedroid.com/images/UPLOADED999/60204289e0383.jpeg", - "https://images7.memedroid.com/images/UPLOADED327/60202dcfe5ee5.jpeg", - "https://images7.memedroid.com/images/UPLOADED210/602002e974217.jpeg", - "https://images7.memedroid.com/images/UPLOADED501/6020021bf1179.jpeg", - "https://images7.memedroid.com/images/UPLOADED673/6020034f2da0c.jpeg", - "https://images3.memedroid.com/images/UPLOADED19/60200256930ab.jpeg", - "https://images3.memedroid.com/images/UPLOADED698/601ff2a29e58e.jpeg", - "https://images3.memedroid.com/images/UPLOADED975/601ff62362299.jpeg", - "https://images3.memedroid.com/images/UPLOADED351/601ff4d170dab.jpeg", - "https://images7.memedroid.com/images/UPLOADED346/601ff0ca4231f.jpeg", - "https://images3.memedroid.com/images/UPLOADED171/601fb5cf71676.jpeg", - "https://images3.memedroid.com/images/UPLOADED868/601f3ce303a63.jpeg", - "https://images3.memedroid.com/images/UPLOADED253/601f898dea5c1.jpeg", - "https://images7.memedroid.com/images/UPLOADED337/601f87b97a821.jpeg", - "https://images7.memedroid.com/images/UPLOADED678/601f801f2f587.jpeg", - "https://images3.memedroid.com/images/UPLOADED306/601f7accdf5aa.jpeg", - "https://images3.memedroid.com/images/UPLOADED734/601f72626dea1.jpeg", - "https://images7.memedroid.com/images/UPLOADED396/601f6793079f4.jpeg", - "https://images3.memedroid.com/images/UPLOADED427/601f55c19a05b.jpeg", - "https://images7.memedroid.com/images/UPLOADED596/601f220d14f00.jpeg", - "https://images3.memedroid.com/images/UPLOADED403/601f2023eab51.jpeg", - "https://images7.memedroid.com/images/UPLOADED573/601ef895691cb.jpeg", - "https://images7.memedroid.com/images/UPLOADED736/601f101d0279c.jpeg", - "https://images3.memedroid.com/images/UPLOADED332/601f1082b18ab.jpeg", - "https://images7.memedroid.com/images/UPLOADED361/601f0f23e7046.jpeg", - "https://images7.memedroid.com/images/UPLOADED698/601f0c88becf2.jpeg", - "https://images3.memedroid.com/images/UPLOADED999/601f0a385fa62.jpeg", - "https://images7.memedroid.com/images/UPLOADED541/601eff87122a0.jpeg", - "https://images7.memedroid.com/images/UPLOADED990/601ed78b0df7f.jpeg", - "https://images7.memedroid.com/images/UPLOADED268/601e9e40da38b.jpeg", - "https://images3.memedroid.com/images/UPLOADED292/601e9da82276d.jpeg", - "https://images3.memedroid.com/images/UPLOADED521/601e9d8fd41dc.jpeg", - "https://images7.memedroid.com/images/UPLOADED818/601e9caa75369.jpeg", - "https://images7.memedroid.com/images/UPLOADED969/601e547a569f4.jpeg", - "https://thumbs.gfycat.com/CalculatingGivingAnt-size_restricted.gif", -]; - - var rand = list[Math.floor(Math.random() * list.length)]; - - const embed = new Discord.MessageEmbed() - .setColor() - .setImage(rand) - .setTimestamp() - .setFooter('king') - await message.channel.send(embed); - - } -}; \ No newline at end of file diff --git a/commands/imagem/monkey.js b/commands/imagem/monkey.js deleted file mode 100644 index b9a6504..0000000 --- a/commands/imagem/monkey.js +++ /dev/null @@ -1,26 +0,0 @@ -const jimp = require("jimp") - -module.exports = { - name:"monkey", - aliases:["macaco"], - run:async (client, message, args, prefix) => { - let img = jimp.read("https://media.discordapp.net/attachments/804379222025961505/816492068578263040/download_2.png?width=487&height=406") - if (!args[0]) return message.channel.send("Você precisa escrever algo.") - if(args[0].length > 50) { - return message.reply('você ultrapassou o limite de 50 caracteres.') - } - message.channel.send(`📝 | editando...`).then(msg => { - img.then(image => { - jimp.loadFont(jimp.FONT_SANS_32_BLACK).then(font => { - image.resize(685, 500) - image.print(font, 20, 30, args.join(" "), 700) - image.getBuffer(jimp.MIME_PNG, (err, i) => { - message.channel.send({files: [{ attachment: i, name: "monkey.png"}]}).then(m => { - msg.delete() - }) - }) - }) - }) - }) - } - } \ No newline at end of file diff --git a/commands/imagem/pablo.js b/commands/imagem/pablo.js deleted file mode 100644 index 5db64f2..0000000 --- a/commands/imagem/pablo.js +++ /dev/null @@ -1,26 +0,0 @@ -const jimp = require("jimp") - -module.exports = { - name:"pablo", - aliases:["escobar"], - run:async (client, message, args, prefix) => { - let img = jimp.read("https://media.discordapp.net/attachments/804379222025961505/816489937867243540/download_3.png?width=330&height=406") - if (!args[0]) return message.channel.send("Você precisa escrever algo.") - if(args[0].length > 50) { - return message.reply('você ultrapassou o limite de 50 caracteres.') - } - message.channel.send(`📝 | editando...`).then(msg => { - img.then(image => { - jimp.loadFont(jimp.FONT_SANS_32_BLACK).then(font => { - image.resize(685, 500) - image.print(font, 20, 30, args.join(" "), 700) - image.getBuffer(jimp.MIME_PNG, (err, i) => { - message.channel.send({files: [{ attachment: i, name: "pablo.png"}]}).then(m => { - msg.delete() - }) - }) - }) - }) - }) - } - } \ No newline at end of file diff --git a/commands/imagem/stonks.js b/commands/imagem/stonks.js deleted file mode 100644 index 8ab6893..0000000 --- a/commands/imagem/stonks.js +++ /dev/null @@ -1,25 +0,0 @@ -const jimp = require("jimp") - -module.exports = { - name:"stonks", - run:async (client, message, args, prefix) => { - let img = jimp.read("https://media.discordapp.net/attachments/804379222025961505/812939008433979422/Stonks-meme-template.png?width=480&height=406") - if (!args[0]) return message.channel.send("Você precisa escrever algo pra fazer stonks.") - if(args[0].length > 50) { - return message.reply('você ultrapassou o limite de 50 caracteres.') - } - message.channel.send(`📝 | editando...`).then(msg => { - img.then(image => { - jimp.loadFont(jimp.FONT_SANS_32_BLACK).then(font => { - image.resize(685, 500) - image.print(font, 20, 30, args.join(" "), 700) - image.getBuffer(jimp.MIME_PNG, (err, i) => { - message.channel.send({files: [{ attachment: i, name: "stonks.png"}]}).then(m => { - msg.delete() - }) - }) - }) - }) - }) - } - } \ No newline at end of file diff --git a/commands/imagem/supreme.js b/commands/imagem/supreme.js deleted file mode 100644 index baf29bc..0000000 --- a/commands/imagem/supreme.js +++ /dev/null @@ -1,22 +0,0 @@ -const {MessageEmbed} = require('discord.js'); -const fetch = require('node-fetch'); - -module.exports = { - name:"supreme", - run:async (client, message, args) => { - - let say = message.content.split(" ").slice(1).join(" ") - if(!say) return message.channel.send("não posso repetir mensagens em branco") - const data = await fetch(`https://elevicky.sirv.com/supreme.jpg?w=425&h=130&scale.option=ignore&text.0.text=${say}&text.0.color=fefefe`) - - const embed = new MessageEmbed() - .setAuthor(message.author.username + "#" + message.author.discriminator,message.author.displayAvatarURL()) - .setFooter(message.author.username) - .setColor("RED") - .setDescription(`[A imagem não está carregando? clique aqui](${data.url})`) - .setImage(`${data.url}`) - .setTimestamp(); - - message.channel.send(embed); - } -} \ No newline at end of file diff --git a/commands/imagem/tgif.js b/commands/imagem/tgif.js deleted file mode 100644 index 40665fd..0000000 --- a/commands/imagem/tgif.js +++ /dev/null @@ -1,19 +0,0 @@ -const discord = require("discord.js"); -const fetch = require("node-fetch"); - -module.exports = { - name:"tgif", - category:"imagem", - - run:async (client, message, args) => { - var query = args.join(' '); - fetch(`https://api.tenor.com/v1/random?q=${query}&key=` + process.env.TENOR) //obter no site do Tenor - .then(res => res.json()) - .then(json => message.channel.send(json.results[0].url)) - .catch(e => { - message.channel.send('Falha ao encontrar um GIF que corresponda à sua consulta'); - // console.error(e); - return; - }); -} -}; \ No newline at end of file diff --git a/commands/imagem/trump.js b/commands/imagem/trump.js deleted file mode 100644 index c5a3087..0000000 --- a/commands/imagem/trump.js +++ /dev/null @@ -1,35 +0,0 @@ -const { MessageEmbed } = require("discord.js"); -const Discord = require('discord.js'); -const fetch = require('node-fetch'); -const config = require('../../config.json') - -module.exports = { - name:"trump", - run:async (client, message, args, default_prefix) => { - - let text = args.join(" "); - - if (!text) { - return message.channel.send("indique o tweet."); - } - - let m = await message.channel.send("espere um pouco..."); - try { - let res = await fetch(encodeURI(`https://nekobot.xyz/api/imagegen?type=trumptweet&text=${text}`)); - let json = await res.json(); - let attachment = new Discord.MessageAttachment(json.message, "clyde.png"); - - const trump = new Discord.MessageEmbed() - .setTitle('<:db_twitter:782665233114202182> | Trump Tweet') - .setColor('') - .setImage(json.message) - .setFooter(`${message.author.tag}`, message.author.displayAvatarURL({ dynamic: true, size: 2048 })) - - message.channel.send(trump); - m.delete({ timeout: 3000 }); - } catch (e) { - m.edit(e.message); - } - - } - } \ No newline at end of file diff --git a/commands/imagem/videomeme.js b/commands/imagem/videomeme.js deleted file mode 100644 index 7b6a576..0000000 --- a/commands/imagem/videomeme.js +++ /dev/null @@ -1,39 +0,0 @@ -const Discord = require("discord.js"); - - module.exports = { - name: "memevideo", - aliases: ["video", "videomeme"], - description: "Videos de memes aleátorios", - category: "imagem", - run: async (client, message, args) => { - - let respostas = [ - 'https://img-9gag-fun.9cache.com/photo/apNBz1D_460sv.mp4', - 'https://cdn.discordapp.com/attachments/458025259120197633/806302796567150642/Friezas_biker_gang-1.mp4', - 'https://img-9gag-fun.9cache.com/photo/aRXAYzQ_460sv.mp4', - 'https://img-9gag-fun.9cache.com/photo/aEpnw0O_460sv.mp4', - 'https://img-9gag-fun.9cache.com/photo/anQ1qOq_460svvp9.webm', - 'https://img-9gag-fun.9cache.com/photo/amPzL3X_460svvp9.webm', - 'https://img-9gag-fun.9cache.com/photo/aEpn1mM_460sv.mp4', - 'https://img-9gag-fun.9cache.com/photo/ad8XYZQ_460svvp9.webm', - 'https://img-9gag-fun.9cache.com/photo/aV7ePbM_460sv.mp4', - 'https://img-9gag-fun.9cache.com/photo/aGpDDM0_460svvp9.webm', - 'https://img-9gag-fun.9cache.com/photo/aDdGz6Z_460sv.mp4', - 'https://img-9gag-fun.9cache.com/photo/a7Edozx_460svvp9.webm', - 'https://img-9gag-fun.9cache.com/photo/anQ1Mr0_460svvp9.webm', - 'https://img-9gag-fun.9cache.com/photo/aEpn1mM_460svvp9.webm', - 'https://img-9gag-fun.9cache.com/photo/a8Epj4Y_460svvp9.webm', - 'https://img-9gag-fun.9cache.com/photo/a7Edozx_460svvp9.webm', - 'https://img-9gag-fun.9cache.com/photo/a5EZwMr_460svvp9.webm', - 'https://img-9gag-fun.9cache.com/photo/aMK897W_460svvp9.webm', -] - -const BallNum = Math.floor(Math.random() * respostas.length); -const delay = (msec) => new Promise((resolve) => setTimeout(resolve, msec)); - -msg = await message.channel.send(''); -await delay(3000); -msg.edit(respostas[BallNum]); - - } -}; \ No newline at end of file diff --git a/commands/imagem/wasted.js b/commands/imagem/wasted.js deleted file mode 100644 index c2a61b8..0000000 --- a/commands/imagem/wasted.js +++ /dev/null @@ -1,17 +0,0 @@ -const Random = require("srod-v2"); -const Discord = require("discord.js"); - -module.exports = { - name: "wasted", - aliases: ["wtd"], - category: "imagem", - description: "Retornna uma imagem wasted!", - usage: "Wasted | ", - run: async (client, message, args) => { - - const Member = message.mentions.members.first() || message.guild.members.cache.get(args[0]) || message.member; - const Data = await Random.Wasted({ Image: Member.user.displayAvatarURL({ format: "png" }), Color: "#dc143c" }); - - return message.channel.send(Data); - } -}; \ No newline at end of file diff --git "a/commands/informa\303\247\303\243o/ajuda.js" "b/commands/informa\303\247\303\243o/ajuda.js" deleted file mode 100644 index d90d094..0000000 --- "a/commands/informa\303\247\303\243o/ajuda.js" +++ /dev/null @@ -1,51 +0,0 @@ -const { - MessageEmbed -} = require("discord.js"); -const { - stripIndents -} = require("common-tags"); -const config = require("../../config.json") -module.exports = { - name: "ajuda", - aliases: ["aj"], - cooldown: 4, - category: "informação", - description: "Retorna a informação de um comando especifico", - useage: "help [Command]", - run: async (client, message, args) => { - //GET THE PREFIX - let prefix = client.settings.get(message.guild.id, `prefix`); - if (prefix === null) prefix = config.prefix; //if not prefix set it to standard prefix in the config.json file - if (!args.join(" ")){ - return message.channel.send(`Informe qual comando você quer obter ajuda! \nEx: \`${prefix}ajuda play\``) - } - if (args[0]) { - return getCMD(client, message, args[0]); - } else { - return getAll(client, message); - } - - - - function getCMD(client, message, input) { - const embed = new MessageEmbed() //creating a new Embed - - const cmd = client.commands.get(input.toLowerCase()) || client.commands.get(client.aliases.get(input.toLowerCase())) //getting the command by name/alias - if (!cmd) { //if no cmd found return info no infos! - return message.channel.send(embed.setColor(config.colors.no).setDescription(`Nenhuma informação encontrada para o comando **${input.toLowerCase()}**`)); - } - if (cmd.name) embed.addField("**Nome do comando**", `\`${cmd.name}\``) - if (cmd.name) embed.setTitle(`Informações detalhadas sobre: \`${cmd.name}\``) - if (cmd.description) embed.addField("**Descrição**", `\`${cmd.description}\``); - - if (cmd.aliases) embed.addField("**Aliases**", `\`${cmd.aliases.map(a => `${a}`).join("\`, \`")}\``) - if (cmd.cooldown) embed.addField("**Cooldown**", `\`${cmd.cooldown} Segundos\``) - else embed.addField("**Cooldown**", `\`2 Segundos\``) - if (cmd.useage) { - embed.addField("**Uso**", `\`${config.prefix}${cmd.useage}\``); - embed.setFooter("Sintaxe: <> = requeridos, [] = opcional"); - } - return message.channel.send(embed.setColor(config.colors.yes)); - } - } -} diff --git "a/commands/informa\303\247\303\243o/dj.js" "b/commands/informa\303\247\303\243o/dj.js" deleted file mode 100644 index 4739dd5..0000000 --- "a/commands/informa\303\247\303\243o/dj.js" +++ /dev/null @@ -1,15 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "dj", - aliases: ["dj"], - category: "informação", - description: "Qual é o DJ", - useage: "dj", - run: async (client, message, args) => { - if (!functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ Não há cargo de DJ`) - - return functions.embedbuilder(client, "null", message, config.colors.yes, "DJ-ROLE", `Estes são os DJs`, `${functions.check_if_dj(message)}`) - } -} \ No newline at end of file diff --git "a/commands/informa\303\247\303\243o/votar.js" "b/commands/informa\303\247\303\243o/votar.js" deleted file mode 100644 index 78ec651..0000000 --- "a/commands/informa\303\247\303\243o/votar.js" +++ /dev/null @@ -1,19 +0,0 @@ -const Discord = require("discord.js") -const config = require("../../config.json") -module.exports = { - name: "votar", - aliases: ["rate", "voto", "vote"], - category: "INFORMATION COMMANDS", - description: "Votos para King", - useage: "vote", - run: async (client, message, args) => { - return message.reply( - new Discord.MessageEmbed() - .setColor(config.colors.yes) - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setTitle("Voto para King") - .setURL("") - .setDescription(`[Todos os votos são apreciados, OBRIGADO! <3]()`) - ) - } -} diff --git "a/commands/modera\303\247\303\243o/adcmd.js" "b/commands/modera\303\247\303\243o/adcmd.js" deleted file mode 100644 index dbe60cc..0000000 --- "a/commands/modera\303\247\303\243o/adcmd.js" +++ /dev/null @@ -1,37 +0,0 @@ -const db = require("quick.db") - -module.exports = { - name: "adcmd", - usage: "adcmd ", - aliases:["novocomando", "newcommand", "adicionarcomando"], - description: "adicionar comandos personalizados de guilda", - category: "moderação", - run: (client, message, args) => { - - - if(!message.member.hasPermission("MANAGE_MESSAGES")) return message.channel.send("⚠️ Você precisa da permissão de `GERÊNCIAR_MENSSAGENS` para usar esse comando") - - let cmdname = args[0] - - if(!cmdname) return message.channel.send(`⚠️ Você tem que dar o nome do comando, \`adcmd \``) - - let cmdresponce = args.slice(1).join(" ") - - if(!cmdresponce) return message.channel.send(`⚠️ Você tem que dar uma resposta de comando cmd, \`adcmd \``) - - let database = db.get(`cmd_${message.guild.id}`) - - if(database && database.find(x => x.name === cmdname.toLowerCase())) return message.channel.send("⚠️ Este nome de comando já foi adicionado nos comandos personalizados da guilda.") - - let data = { - name: cmdname.toLowerCase(), - responce: cmdresponce - } - - db.push(`cmd_${message.guild.id}`, data) - - return message.channel.send("Adicionado **" + cmdname.toLowerCase() + "** como um comando personalizado na guilda.") - - - } -} \ No newline at end of file diff --git "a/commands/modera\303\247\303\243o/addcargo.js" "b/commands/modera\303\247\303\243o/addcargo.js" deleted file mode 100644 index 2548945..0000000 --- "a/commands/modera\303\247\303\243o/addcargo.js" +++ /dev/null @@ -1,43 +0,0 @@ -//Comando criado com a ajuda do codigo original do -// WinG4merBR (https://github.com/BotFoxy/Foxy.git) -const Discord = require('discord.js') - -module.exports = { - name : 'addcargo', - usage:"addcargo <@user> <@cargo>", - description:"Adicione um cargo para um membro do servidor", - aliases:["addrole", "adicionarcargo", "darcargo"], - run:async (client, message, args) =>{ - let username = message.mentions.members.first() || message.guild.members.cache.get(args[0]); - -if (!message.member.hasPermission("MANAGE_ROLES")) return message.reply(new Discord.MessageEmbed() -.setColor('#ff0000') -.setTitle("Você não tem permissão `Gerenciar Cargos`") -); - -if (!message.guild.me.hasPermission("MANAGE_ROLES")) return message.reply(new Discord.MessageEmbed() -.setColor('#ff0000') -.setTitle("Eu não tenho permissão `Gerenciar Cargos`") -); - - if(!username) return message.reply(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(`Forneça um usuário válido para que eu possa adicionar um cargo a ele.`) - ); - let cargo = message.mentions.roles.first() || message.guild.roles.cache.get(args[1]) || message.guild.roles.cache.find(x => x.name === args.join(" ")) - - if(!cargo) return message.reply(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(`Forneça um cargo válido para eu que eu possa adicionar ao usuário.`) - ); - - username.roles.add(cargo) - - const embed = new Discord.MessageEmbed() - .setDescription(`**O cargo ${cargo} foi adicionado ao usuário ${username}**`) - .setColor('GREEN') - - - message.channel.send(embed) - } -} \ No newline at end of file diff --git "a/commands/modera\303\247\303\243o/addchannel.js" "b/commands/modera\303\247\303\243o/addchannel.js" deleted file mode 100644 index 2e0c956..0000000 --- "a/commands/modera\303\247\303\243o/addchannel.js" +++ /dev/null @@ -1,37 +0,0 @@ -module.exports = { - name: 'addchannel', - description: 'Create a channel (text, voice, category)', - guildOnly: true, - aliases: ['channel'], - usage: '[channelName, channelType]', - example: 'pokemon-spawn text', - cooldown: 5, - run:async (client, message, args) => { - let mss=message.content.split(' '); - let nm=mss[1],ty=mss[2]; - // nm is for name - // ty is for type - - // all types of channels are :- voice, category and text - - let perms = message.member.permissions; - let prm = perms.has("MANAGE_CHANNELS"); - if(prm==true){ - try{ - function cl(mssg){ - let sv=message.guild; - let nn=nm,tu=ty; - if(tu.toLowerCase()=='voice'||tu.toLowerCase()=='text'||tu.toLowerCase()=='category'){ - sv.createChannel(nn,tu); - message.channel.send("Channel created"); - } - } - cl(message); - }catch(err){ - message.channel.send("Can\'t create the channel"); - } - }else{ - message.channel.send(`${message.author} you don\'t have the permission to create channels`); - } - }, -}; \ No newline at end of file diff --git "a/commands/modera\303\247\303\243o/ban.js" "b/commands/modera\303\247\303\243o/ban.js" deleted file mode 100644 index eb84c76..0000000 --- "a/commands/modera\303\247\303\243o/ban.js" +++ /dev/null @@ -1,67 +0,0 @@ -const Discord = require("discord.js"); - -module.exports = { - name: "ban", - category: "moderação", - aliases:["banir"], - description: "Banir qualquer pessoa do servidor", - usage: "ban <@user> ", - run: async (client, message, args) => { - - if(!message.member.hasPermission("BAN_MEMBERS")) return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle('Você não tem permissão para usar isto!') - ); - - if(!message.guild.me.hasPermission("BAN_MEMBERS")) return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle('Eu não tenho as permissões corretas') - ); - - const member = message.mentions.members.first() || message.guild.members.cache.get(args[0]); - - if(!args[0]) return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle('Por favor especifique um usuário') - ); - - if(!member) return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle('Eu não encontrei este usuário.') - ); - - if(!member.bannable) return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle('Eu não posso banir este usuário ele possui um cargo maior que o meu <:pepe_sad:796248285525704705>') - ); - - if(member.id === message.author.id) return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle('Seu idiota! Você não pode banir a si mesmo! -_-') - ); - - let banReason = args.slice(1).join(" "); - - if(!banReason) banReason = 'Motivo não especificado'; - - member.ban({ reason: banReason }) - .catch(err => { - if(err) return message.channel.send(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(`Algo deu errado ao expulsar este usuário ${err}`) - )}); - - - const banembed = new Discord.MessageEmbed() - .setTitle(' Alguém quebrou as regras...') - .setColor('#00bfff') - .setThumbnail(member.user.displayAvatarURL()) - .addField('Usuário banido', member) - .addField('Punido por', message.author) - .addField('Motivo', banReason) - .setFooter('Tempo de kick', client.user.displayAvatarURL()) - .setTimestamp() - - message.channel.send(banembed); - } -} \ No newline at end of file diff --git "a/commands/modera\303\247\303\243o/chutar.js" "b/commands/modera\303\247\303\243o/chutar.js" deleted file mode 100644 index 423c68b..0000000 --- "a/commands/modera\303\247\303\243o/chutar.js" +++ /dev/null @@ -1,47 +0,0 @@ -const discord = require("discord.js"); - -module.exports = { - name: "chutar", - category: "moderação", - description: "Expulse qualquer membro do servidor", - aliases: ["kick", "chute"], - usage: "chutar <@user> ", - run: (client, message, args) => { - - if(!message.member.hasPermission("KICK_MEMBERS")) { - return message.channel.send(`**${message.author.username}**, Você é fraco, lhe falta permissão de Expulsar_membros `) - } - - if(!message.guild.me.hasPermission("KICK_MEMBERS")) { - return message.channel.send(`**${message.author.username}**, Eu não tenho permissão o suficiente para usar este comando`) - } - - - let target = message.mentions.members.first(); - - if(!target) { - return message.channel.send(`**${message.author.username}**, Por favor, mencione a pessoa que você deseja chutar`) - } - - if(target.id === message.author.id) { - return message.channel.send(`**${message.author.username}**, Você não pode se chutar`) - } - - if(!args[1]) { - return message.channel.send(`**${message.author.username}**, Por favor, dê um motivo para expulsar`) - } - - let embed = new discord.MessageEmbed() - .setTitle("Ação: Expulsar") - .setDescription(`Expulso ${target} (${target.id})`) - .setColor("#ff2050") - .setFooter(`Expulso por ${message.author.username}`); - - message.channel.send(embed) - - target.kick(args[1]); - - - - } -} \ No newline at end of file diff --git "a/commands/modera\303\247\303\243o/delchannel.js" "b/commands/modera\303\247\303\243o/delchannel.js" deleted file mode 100644 index 13e8e8e..0000000 --- "a/commands/modera\303\247\303\243o/delchannel.js" +++ /dev/null @@ -1,35 +0,0 @@ -module.exports = { - name: 'delchannel', - description: 'Delete a channel', - guildOnly: true, - aliases: ["dchannel", "apagarcanal", "deletarcanal"], - usage: '[mentionChannel/channelId]', - example: '#pokemon-spawn', - cooldown: 5, - run:async (client, message, args) => { - let ch,chs=''; - let mss=message.content.split(' '); - if(mss[1]!=null||mss[1]!=undefined){ - for(var i=0;i", - aliases:["excluircomando", "delcommand", "deletecommand"], - description: "Exclua o comando personalizado", - category: "moderação", - run: (client, message, args) => { - - let cmdname = args[0] - - if(!cmdname) return message.channel.send("⚠️ Me dê o nome do comando, `delcmd `") - - let database = db.get(`cmd_${message.guild.id}`) - - if(database) { - let data = database.find(x => x.name === cmdname.toLowerCase()) - - if(!data) return message.channel.send("⚠️ Incapaz de encontrar este comando.") - - let value = database.indexOf(data) - delete database[value] - - var filter = database.filter(x => { - return x != null && x != '' - }) - - db.set(`cmd_${message.guild.id}`, filter) - return message.channel.send(`Excluiu o omando**${cmdname}**!`) - - - } else { - return message.channel.send("⚠️ Desculpe, mas não consigo encontrar esse comando!") - - - - } - } -} \ No newline at end of file diff --git "a/commands/modera\303\247\303\243o/limpar.js" "b/commands/modera\303\247\303\243o/limpar.js" deleted file mode 100644 index 7b6f415..0000000 --- "a/commands/modera\303\247\303\243o/limpar.js" +++ /dev/null @@ -1,33 +0,0 @@ -module.exports = { - name: "limpar", - usage: "limpar ", - aliases: ["apagar", "clean"], - description: "Apague até mensagens de um canal", - category: "moderação", - run: async (client, message, args) => { - - if (message.deletable) { - message.delete(); - } - - if (!message.member.hasPermission("MANAGE_MESSAGES")) { - return message.reply("Você é fraco, lhe falta permissão de `Gerenciar Mensagens` para usar esse comando!").then(m => m.delete(5000)); - } - - if (isNaN(args[0]) || parseInt(args[0]) <= 0) { - return message.reply("Forneça o número de mensagens a serem excluídas").then(m => m.delete(5000)); - } - - let deleteAmount; - if (parseInt(args[0]) > 100) { - deleteAmount = 100; - } else { - deleteAmount = parseInt(args[0]); - } - - message.channel.bulkDelete(deleteAmount, true) - message.channel.send(`**${args[0]} mensagens limpas nesse chat!**`).then(msg => msg.delete({timeout: 5000})) - .catch(err => message.reply(`Não foi possível deletar mensagens devido a: ${err}`)); - - } -}; \ No newline at end of file diff --git "a/commands/modera\303\247\303\243o/lock.js" "b/commands/modera\303\247\303\243o/lock.js" deleted file mode 100644 index 5d45056..0000000 --- "a/commands/modera\303\247\303\243o/lock.js" +++ /dev/null @@ -1,30 +0,0 @@ -const {MessageEmbed} = require('discord.js'); - -module.exports = { - name: "lock", - aliases: ['lock', 'trancar', 'bloquear'], - category:"moderação", - run: async (client, message, args) => { - if(!message.member.permissions.has("MANAGE_CHANNELS")) - - return message.reply(new MessageEmbed() - .setColor('#ff0000') - .setTitle('Você precisa da permissão `Gerenciar canais` para fazer isso!') - ); - const role = await message.guild.roles.cache.find(x => x.name === "@everyone"); - - await message.channel.updateOverwrite(role, { - 'SEND_MESSAGES': false, - 'EMBED_LINKS': false, - 'ATTACH_FILES': false, - 'ADD_REACTIONS': false - }); - message.channel.send(new MessageEmbed() - .setColor("#ff0000") - .setTitle(`:lock: **|** Canal bloqueado com sucesso!`) - ); - - - } - - } \ No newline at end of file diff --git "a/commands/modera\303\247\303\243o/lockinvite.js" "b/commands/modera\303\247\303\243o/lockinvite.js" deleted file mode 100644 index 027b2b3..0000000 --- "a/commands/modera\303\247\303\243o/lockinvite.js" +++ /dev/null @@ -1,64 +0,0 @@ -const db = require('quick.db'); -const { MessageEmbed } = require('discord.js') - -module.exports = { - name: "lockinvites", - aliases: ['bloquear', 'bloquearconvites', 'noinvites', 'lockinvites', 'lockinvite'], - guildOnly: true, - cooldown: 7, - clientPerms: ['SEND_MESSAGES', 'READ_MESSAGE_HISTORY'], - - run: async(client, message, args) =>{ - - if (!message.member.permissions.has('MANAGE_CHANNELS')) { - return message.reply( - `<:WindowsShield:777579023249178625> **|** ${message.author} Você não tem permissão para executar este comando! Você precisará da permissão \`Gerenciar Canais\``, - ); - } - - switch (args[0]) { - - case 'on': { - const channel = message.mentions.channels.first() - - if (!channel) return message.reply("Mencione um canal para divulgações!") - - var channelid = db.fetch(`guild_${message.guild.id}`) - - db.set(`guild_${message.guild.id}`, channel.id); - message.foxyReply(`Agora convites só poderão ser enviados em <#${channel.id}>`) - - } - break; - case 'off': { - if (channelid === null) return message.foxyReply("Não existe canal de divulgação definido!") - message.foxyReply(`${client.emotes.scared} **|** Você deseja desativar o bloqueio de convites em outros canais?`).then(msg => { - msg.react('✅') - - const filterYes = (reaction, usuario) => reaction.emoji.name === '✅' && usuario.id === message.author.id; - const yesCollector = msg.createReactionCollector(filterYes, { max: 1, time: 60000 }); - - yesCollector.on('collect', () => { - message.foxyReply(`Agora links de servidores serão permitidos em todos os canais do servidor!`); - - db.delete(`guild_${message.guild.id}`) - }) - }) - - break; - } - - default: { - const noargs = new MessageEmbed() - .setColor(client.colors.blurple) - .setTitle("Bloqueio de convites") - .setDescription("Bloqueie convites em todos os canais e coloque um canal específico para divulgação") - .addFields( - { name: "✔ Definindo canal", value: "f!lockinvite on <#Menção do canal>" }, - { name: "❌ Removendo canal", value: "f!lockinvite off" } - ) - message.foxyReply(noargs) - } - } - } -} \ No newline at end of file diff --git "a/commands/modera\303\247\303\243o/mute.js" "b/commands/modera\303\247\303\243o/mute.js" deleted file mode 100644 index 1a8cb74..0000000 --- "a/commands/modera\303\247\303\243o/mute.js" +++ /dev/null @@ -1,51 +0,0 @@ -const {Message, MessageEmbed}= require('discord.js') -const ms = require('ms') - -module.exports = { - name : "mute", - user: "mute <@user>", - category: "moderação", - description: "Silencie um membro do servidor ideal para aqueles que gostam de quebrar as regras", - aliases:["mutar", "silenciar"], - /** - * @param {Message} message - */ - run : async(client, message, args) => { - if(!message.member.hasPermission('MANAGE_MESSAGES')) return message.channel.send('Você não tem permissão para usar este comando') - if(!args[0]) return message.channel.send('Por favor marque um membro para que eu possa silenciar') - const Member = message.mentions.members.first() || message.guild.members.cache.get(args[0]) - if(!Member) return message.channel.send('Membro não encontrado.') - const role = message.guild.roles.cache.find(role => role.name.toLowerCase() === 'mutado') - if(!role) { - try { - message.channel.send('Cargo `mutado` não encontrada, tentativa de criar cargo `mutado`.') - - let muterole = await message.guild.roles.create({ - data : { - name : 'mutado', - permissions: [] - } - }); - message.guild.channels.cache.filter(c => c.type === 'text').forEach(async (channel, id) => { - await channel.createOverwrite(muterole, { - 'SEND_MESSAGES': false, - 'EMBED_LINKS': false, - 'ATTACH_FILES': false, - 'ADD_REACTIONS': false, - 'SPEAK': false - }) - }); - message.channel.send('O cargo `mutado` foi criada com sucesso.') - } catch (error) { - console.log(error) - } - }; - let role2 = message.guild.roles.cache.find(r => r.name.toLowerCase() === 'mutado') - if(Member.roles.cache.has(role2.id)) return message.channel.send(`${Member.displayName} já foi silenciado.`) - await Member.roles.add(role2) - message.channel.send(new MessageEmbed() - .setColor('GREEN') - .setTitle(`${Member.displayName} Está sem voz 🔇`) - ); - } -} \ No newline at end of file diff --git "a/commands/modera\303\247\303\243o/removecargo.js" "b/commands/modera\303\247\303\243o/removecargo.js" deleted file mode 100644 index b6d0cb2..0000000 --- "a/commands/modera\303\247\303\243o/removecargo.js" +++ /dev/null @@ -1,26 +0,0 @@ -const discord = require('discord.js') - -module.exports = { - name : "removecargo", - aliases:["removercargo", "removerole"], - usage:"removecargo <@user> <@cargo>", - category:"moderação", - description:"Retira um cargo do usuario mencionado", - run : async(client, message, args) => { - //permite usar parâmetros (opcional) - /** - * @param {Message} message - */ - //então, primeiro vamos verificar se o autor da mensagem tem permissões - //esta linha significa que se o autor não tiver permissão para gerenciar funções ele irá parar o processo e enviar o seguinte texto - if(!message.member.hasPermission("MANAGE_ROLES")) return message.channel.send('Você não tem permissões de gerênciar cargos!') - //em seguida, definimos algumas variáveis - const target = message.mentions.members.first() //membro = menções - if(!target) return message.channel.send('Nenhum membro especificado') //quando nenhum membro é pingado - const role = message.mentions.roles.first() // cargo = menções - if(!role) return message.channel.send('Nenhum membro especificado') //quando nenhuma função é especificada ou pingada - //agora o código! - await target.roles.remove(role) //removendo a função para o usuário - message.channel.send(`${target.user.username} cargo removido!`) //isso é opcional e editável - } -} \ No newline at end of file diff --git "a/commands/modera\303\247\303\243o/resetwarns.js" "b/commands/modera\303\247\303\243o/resetwarns.js" deleted file mode 100644 index 5730e50..0000000 --- "a/commands/modera\303\247\303\243o/resetwarns.js" +++ /dev/null @@ -1,45 +0,0 @@ -const db = require("quick.db") - -module.exports = { - name: "resetwarns", - category: "moderação", - aliases: ["rwarns", "apagaravisos"], - usage: "rwarns <@user>", - description: "Redefinir avisos da pessoa mencionada", - run: async (client, message, args) => { - - - if(!message.member.hasPermission("ADMINISTRATOR")) { - return message.channel.send("Você deve ter permissões de administrador para usar este comando") - } - - const user = message.mentions.members.first() - - if(!user) { - return message.channel.send("Mencione a pessoa cujo aviso você deseja redefinir") - } - - if(message.mentions.users.first().bot) { - return message.channel.send("Os bots não podem ter avisos") - } - - if(message.author.id === user.id) { - return message.channel.send("Você não tem permissão para redefinir seus avisos") - } - - let warnings = db.get(`warnings_${message.guild.id}_${user.id}`) - - if(warnings === null) { - return message.channel.send(`${message.mentions.users.first().username} não tem nenhum aviso`) - } - - db.delete(`warnings_${message.guild.id}_${user.id}`) - user.send(`Todos os seus avisos são redefinidos por - ${message.author.username} de ${message.guild.name}`) - await message.channel.send(`Todos os avisos de - ${message.mentions.users.first().username}`) - - - -} -} \ No newline at end of file diff --git "a/commands/modera\303\247\303\243o/slowmode.js" "b/commands/modera\303\247\303\243o/slowmode.js" deleted file mode 100644 index b169764..0000000 --- "a/commands/modera\303\247\303\243o/slowmode.js" +++ /dev/null @@ -1,42 +0,0 @@ -module.exports = { - name: "slowmode", - category: "moderação", - usage: "slowmode ", - aliases:["slow", "modolento"], - description: "Permite definir o modo lento no canal", - run: (client, message, args) => { - const amount = parseInt(args[0]) - if(message.member.hasPermission("MANAGE_CHANNEL")) - if(isNaN(amount)) return message.channel.send("Não parece ser um número válido") - if(args[0] === amount + "s") { - message.channel.setRateLimitPerUser(amount) - if(amount > 1) { - message.channel.send("slowmode definido para " + amount + " segundos") - return - } - else {message.channel.send("slowmode definido para " + amount + " segundos") - return } - } if(args[0] === amount + "min") { - message.channel.setRateLimitPerUser(amount * 60) - if(amount > 1) { - message.channel.send("slowmode definido para " + amount + " minutos") - return - } else { - message.channel.send("slowmode definido para " + amount + " minuto(s)") - - - return } - } if(args[0] === amount + "h") { - message.channel.setRateLimitPerUser(amount * 60 * 60) - if(amount > 1) { - message.channel.send("slowmode definido para " + amount + " hora(s)") - return - } else { - message.channel.send("slowmode definido para " + amount + " hora(s)") - return} - } else { - message.channel.send("Você só pode definir segundos(s), minutos(min) e horas(h)") - } - - } -} diff --git "a/commands/modera\303\247\303\243o/tempmute.js" "b/commands/modera\303\247\303\243o/tempmute.js" deleted file mode 100644 index 14f2853..0000000 --- "a/commands/modera\303\247\303\243o/tempmute.js" +++ /dev/null @@ -1,61 +0,0 @@ -const {Message, MessageEmbed}= require('discord.js') -const ms = require('ms') - -module.exports = { - name : "tempmute", - usage: "tempmute <@user> ", - category: "moderação", - aliases:["timemute", "tempomutado"], - description: "Defina o tempo que um membro vai permanecer mutado", - /** - * @param {Message} message - */ - run : async(client, message, args) => { - if(!message.member.hasPermission('MANAGE_MESSAGES')) return message.channel.send('Você não tem permissão para usar este comando') - if(!args[0]) return message.channel.send('Por favor marque um membro para que eu possa silenciar') - const Member = message.mentions.members.first() || message.guild.members.cache.get(args[0]) - const time = args[1] - if(!Member) return message.channel.send('Membro não encontrado.') - if(!time) return message.channel.send('Por favor, especifique um horário.') - const role = message.guild.roles.cache.find(role => role.name.toLowerCase() === 'mutado') - if(!role) { - try { - message.channel.send('Cargo `mutado` não encontrada, tentando criar um cargo `mutado`.') - - let muterole = await message.guild.roles.create({ - data : { - name : 'mutado', - permissions: [] - } - }); - message.guild.channels.cache.filter(c => c.type === 'text').forEach(async (channel, id) => { - await channel.createOverwrite(muterole, { - 'SEND_MESSAGES': false, - 'EMBED_LINKS': false, - 'ATTACH_FILES': false, - 'ADD_REACTIONS': false, - 'SPEAK': false - }) - }); - message.channel.send('O cargo `mutado` foi criada com sucesso.') - } catch (error) { - console.log(error) - } - }; - let role2 = message.guild.roles.cache.find(r => r.name.toLowerCase() === 'mutado') - if(Member.roles.cache.has(role2.id)) return message.channel.send(`${Member.displayName} já foi silenciado.`) - await Member.roles.add(role2) - message.channel.send(new MessageEmbed() - .setColor("#ff0000") - .setTitle(`${Member.displayName} está sem voz 🔇`) - ); - - setTimeout(async () => { - await Member.roles.remove(role2) - message.channel.send(new MessageEmbed() - .setColor('GREEN') - .setTitle(`${Member.displayName} pode falar novamente 🔊`) - ); - }, ms(time)) - } -} \ No newline at end of file diff --git "a/commands/modera\303\247\303\243o/unban.js" "b/commands/modera\303\247\303\243o/unban.js" deleted file mode 100644 index 34d3b44..0000000 --- "a/commands/modera\303\247\303\243o/unban.js" +++ /dev/null @@ -1,31 +0,0 @@ -const Discord = require('discord.js'); - -module.exports = { - name:"unban", - aliases:["desbanir"], - - run: async(client, message, args) =>{ - if(!message.member.hasPermission("BAN_MEMBERS")) { - return message.channel.reply(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(`**${message.author.username}**, Você não tem permissão para fazer isto!`) - )} - - if(!message.guild.me.hasPermission("BAN_MEMBERS")) { - return message.channel.reply(new Discord.MessageEmbed() - .setColor('#ff0000') - .setTitle(`**${message.author.username}**, Eu não tenho permissão para dar ban nem unban nos usuários`) - )} - - let userID = args[0] - message.guild.fetchBans().then(bans=> { - if(bans.size == 0) return - let bUser = bans.find(b => b.user.id == userID) - if(!bUser) return - message.guild.members.unban(bUser.user) - message.channel.reply(new Discord.MessageEmbed() - .setColor('GREEN') - .setTitle('Usuário desbanido! Espero que leia as regras da próxima vez') - )}) - } -} \ No newline at end of file diff --git "a/commands/modera\303\247\303\243o/unlock.js" "b/commands/modera\303\247\303\243o/unlock.js" deleted file mode 100644 index 26cf83c..0000000 --- "a/commands/modera\303\247\303\243o/unlock.js" +++ /dev/null @@ -1,27 +0,0 @@ -const {MessageEmbed} = require('discord.js'); - -module.exports = { - name: "unlock", - aliases: ['desbloquear', "destravar"], - - run: async(client, message, args) => { - if(!message.member.permissions.has("MANAGE_CHANNELS")) - - return message.reply(new MessageEmbed() - .setColor('#ff0000') - .setTitle('Você precisa da permissão `Gerenciar canais` para fazer isso!') - ); - const role = await message.guild.roles.cache.find(x => x.name === "@everyone"); - await message.channel.updateOverwrite(role, { - 'SEND_MESSAGES': true, - 'EMBED_LINKS': true, - 'ATTACH_FILES': true, - 'ADD_REACTIONS': true - }); - message.channel.send(new MessageEmbed() - .setColor('GREEN') - .setTitle(':unlock: **|** Canal desbloqueado com sucesso!') - ); - - } - } diff --git "a/commands/modera\303\247\303\243o/unmute.js" "b/commands/modera\303\247\303\243o/unmute.js" deleted file mode 100644 index e3bffa7..0000000 --- "a/commands/modera\303\247\303\243o/unmute.js" +++ /dev/null @@ -1,28 +0,0 @@ -const { Message, MessageEmbed } = require('discord.js') - -module.exports= { - name : "unmute", - category: "moderação", - usage: "unmute <@user>", - aliases:["desmutar", "desilenciar"], - description: "Desmutar um membro do servidor", - /** - * @param {Message} message - */ - run : async(client, message, args) => { - const Member = message.mentions.members.first() || message.guild.members.cache.get(args[0]) - - if(!args[0]) return message.channel.send('Por favor marque um membro para que eu possa desilenciar') - - if(!Member) return message.channel.send('Membro não encontrado') - - const role = message.guild.roles.cache.find(r => r.name.toLowerCase() === 'mutado'); - - await Member.roles.remove(role) - - message.channel.send(new MessageEmbed() - .setColor('GREEN') - .setTitle(`${Member.displayName} Pode falar novamente 🔊`) - ); - } -} \ No newline at end of file diff --git "a/commands/modera\303\247\303\243o/warn.js" "b/commands/modera\303\247\303\243o/warn.js" deleted file mode 100644 index a7755b8..0000000 --- "a/commands/modera\303\247\303\243o/warn.js" +++ /dev/null @@ -1,58 +0,0 @@ -const { MessageEmbed } = require("discord.js") -const db = require("quick.db") - -module.exports = { - name: "warn", - category: "moderação", - aliases: ["advertir", "avisar", "aviso"], - usage: "warn <@menção> ", - description: "Advertir quem não obedece às regras", - run: async (client, message, args) => { - - if(!message.member.hasPermission("ADMINISTRATOR")) { - return message.channel.send("Você deve ter permissões de administrador para usar este comando!") - } - - const user = message.mentions.members.first() - - if(!user) { - return message.channel.send("Mencione a pessoa a quem deseja advertir `warn @user `") - } - - if(message.mentions.users.first().bot) { - return message.channel.send("Você não pode advertir os bots") - } - - if(message.author.id === user.id) { - return message.channel.send("Você não pode se advertir") - } - - if(user.id === message.guild.owner.id) { - return message.channel.send("Seu idiota, como você pode advertir o dono do servidor -_-") - } - - const reason = args.slice(1).join(" ") - - if(!reason) { - return message.channel.send("Forneça um motivo para avisar `warn @user `") - } - - let warnings = db.get(`warnings_${message.guild.id}_${user.id}`) - - if(warnings === 3) { - return message.channel.send(`${message.mentions.users.first().username} já atingiu seu limite com 3 avisos`) - } - - if(warnings === null) { - db.set(`warnings_${message.guild.id}_${user.id}`, 1) - user.send(`Você foi avertido em **${message.guild.name}** por ${reason}`) - await message.channel.send(`Você adverteu **${message.mentions.users.first().username}** por ${reason}`) - } else if(warnings !== null) { - db.add(`warnings_${message.guild.id}_${user.id}`, 1) - user.send(`Você foi advertido em **${message.guild.name}** por ${reason}`) - await message.channel.send(`Você adverteu **${message.mentions.users.first().username}** por ${reason}`) - } - - - } -} \ No newline at end of file diff --git "a/commands/modera\303\247\303\243o/warnings.js" "b/commands/modera\303\247\303\243o/warnings.js" deleted file mode 100644 index dcb06e1..0000000 --- "a/commands/modera\303\247\303\243o/warnings.js" +++ /dev/null @@ -1,23 +0,0 @@ -const db = require("quick.db") - -module.exports = { - name: "warnings", - usage:"warnings | warnings <@user>", - aliases: ["advertencias", "avisos"], - description: "Receba os avisos seus ou da pessoa mencionada", - category: "moderação", - run: (client, message, args) => { - const user = message.mentions.members.first() || message.author - - - let warnings = db.get(`warnings_${message.guild.id}_${user.id}`) - - - if(warnings === null) warnings = 0; - - - message.channel.send(`${user} tem **${warnings} ** aviso (s)`) - - - } -} \ No newline at end of file diff --git a/commands/musica/addrelated.js b/commands/musica/addrelated.js deleted file mode 100644 index 05042dd..0000000 --- a/commands/musica/addrelated.js +++ /dev/null @@ -1,39 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "addrelated", - category: "musica", - cooldown: 3, - aliases: ["addrelated", "related", "addsimilar", "similar", "igual", "relacionado"], - useage: "addrelated", - description: "Adiciona uma música semelhante da faixa atual", - run: async (client, message, args) => { - //if not a dj, return error - DISABLED cause not needed - //if (functions.check_if_dj(message)) - // return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ You don\'t have permission for this Command! You need to have: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //find related videos - let newsong = await client.distube.addRelatedVideo(message); - - //send information message - functions.embedbuilder(client, 10000, message, config.colors.yes, "🔎 Adicionando:", `[${newsong.songs[0].name}](${newsong.songs[0].url})`, newsong.songs[0].thumbnail) - - //play track - return client.distube.play(message, newsong.songs[0].url) - } -}; diff --git a/commands/musica/autoplay.js b/commands/musica/autoplay.js deleted file mode 100644 index 5f9a798..0000000 --- a/commands/musica/autoplay.js +++ /dev/null @@ -1,32 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "autoplay", - category: "MUSIC COMMANDS", - aliases: ["ap", "randomsong"], - useage: "autoplay", - description: "Enables autoplay - random similar songs", - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //send info message + toggle autoplay - await functions.embedbuilder(client, 3000, message, config.colors.yes, `A reprodução automática está agora**${client.distube.toggleAutoplay(message) ? "ativada" : "desativada"}**!`) - } -}; diff --git "a/commands/musica/avan\303\247ar.js" "b/commands/musica/avan\303\247ar.js" deleted file mode 100644 index 8fbbf43..0000000 --- "a/commands/musica/avan\303\247ar.js" +++ /dev/null @@ -1,39 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "avançar", - category: "MUSIC COMMANDS", - aliases: ["fwd", "for"], - useage: "forward ", - description: "Forwards the Song forward: seconds", - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //get the seektime - let seektime = queue.currentTime + Number(args[0]) * 1000; - if (seektime >= queue.songs[0].duration * 1000) seektime = queue.songs[0].duration * 1000 - 1; - - //seek - client.distube.seek(message, Number(seektime)); - - //Send info message - functions.embedbuilder(client, 3000, message, config.colors.yes, "AVANÇADO!", `Avançou a musica por \`${Number(args[0])} segundos\``) - } -}; diff --git a/commands/musica/botplaylist.js b/commands/musica/botplaylist.js deleted file mode 100644 index 58f329b..0000000 --- a/commands/musica/botplaylist.js +++ /dev/null @@ -1,111 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -//Gráficos -let { - playlist1, - playlist2, - playlist3, - playlist4, - playlist5, - playlist6 -} = require("../../playlists.json") -module.exports = { - name: "playlist", - category: "MUSIC COMMANDS", - aliases: ["botpl", "botplaylist", "pl"], - useage: "playlist ", - description: "Tocar algumas BOAS listas de reprodução pré-fabricadas!", - - run: async (client, message, args) => { - - if (args[0]) { - switch (args[0].toLowerCase()) { - case "1": - functions.embedbuilder(client, "null", message, config.colors.yes, "Carregando"); - return client.distube.playCustomPlaylist(message, playlist1, { - name: "Playlist de parada" - }); - break; - case "Gráficos": - functions.embedbuilder(client, "null", message, config.colors.yes, "Carregando"); - return client.distube.playCustomPlaylist(message, playlist1, { - name: "Playlist de parada" - }); - break; - - case "2": - functions.embedbuilder(client, "null", message, config.colors.yes, "Carregando"); - return client.distube.playCustomPlaylist(message, playlist2, { - name: "Playlist de natal" - }); - break; - case "Natal": - functions.embedbuilder(client, "null", message, config.colors.yes, "Carregando"); - return client.distube.playCustomPlaylist(message, playlist2, { - name: "Playlist de natal" - }); - break; - - case "3": - functions.embedbuilder(client, "null", message, config.colors.yes, "Carregando"); - return client.distube.playCustomPlaylist(message, playlist3, { - name: "Playlist de jazz" - }); - break; - case "jazz": - functions.embedbuilder(client, "null", message, config.colors.yes, "Carregando"); - return client.distube.playCustomPlaylist(message, playlist3, { - name: "Playlist de jazz" - }); - break; - - case "4": - functions.embedbuilder(client, "null", message, config.colors.yes, "Carregando"); - return client.distube.playCustomPlaylist(message, playlist4, { - name: "Playlist de Blues" - }); - break; - case "blues": - functions.embedbuilder(client, "null", message, config.colors.yes, "Carregando"); - return client.distube.playCustomPlaylist(message, playlist4, { - name: "Playlist de Blues" - }); - break; - - case "5": - functions.embedbuilder(client, "null", message, config.colors.yes, "Carregando"); - return client.distube.playCustomPlaylist(message, playlist5, { - name: "Playlist Countre" - }); - break; - case "country": - functions.embedbuilder(client, "null", message, config.colors.yes, "Carregando"); - return client.distube.playCustomPlaylist(message, playlist5, { - name: "Playlist Countre" - }); - break; - - case "6": - functions.embedbuilder(client, "null", message, config.colors.yes, "Carregando"); - return client.distube.playCustomPlaylist(message, playlist6, { - name: "Playlist rock" - }); - break; - case "rock": - functions.embedbuilder(client, "null", message, config.colors.yes, "Carregando"); - return client.distube.playCustomPlaylist(message, playlist6, { - name: "Playlist rock" - }); - break; - - default: - functions.embedbuilder(client, "null", message, config.colors.no, `Playlists disponíveis:`, "1. Gráficos\n2. Natal\n3. Jazz\n4. Blues\n5. Country\n6. Rock") - return functions.embedbuilder(client, "null", message, config.colors.no, `Sintaxe do comando: `," + botplaylist ") - break; - } - } else { - functions.embedbuilder(client, "null", message, config.colors.no, `Playlists disponíveis:`, "1. Gráficos\n2. Natal\n3. Jazz\n4. Blues\n5. Country\n6. Rock") - return functions.embedbuilder(client, "null", message, config.colors.no, `Sintaxe do comando: `," + botplaylist ") - } - } -}; diff --git a/commands/musica/clearqueue.js b/commands/musica/clearqueue.js deleted file mode 100644 index af14d67..0000000 --- a/commands/musica/clearqueue.js +++ /dev/null @@ -1,35 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "clearqueue", - category: "MUSIC COMMANDS", - aliases: ["clearqu", "apagarfila"], - useage: "clearqueue", - description: "Clears the Queue", - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não têm ada tocando!"); - - //clear the queue - queue.songs = [queue.songs[0]]; - - //Send info message - functions.embedbuilder(client, 3000, message, config.colors.yes, "Limpou a fila!") - } -}; diff --git a/commands/musica/custom.js b/commands/musica/custom.js deleted file mode 100644 index 712ecb7..0000000 --- a/commands/musica/custom.js +++ /dev/null @@ -1,111 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "custom", - category: "MUSIC COMMANDS", - aliases: [""], - useage: "custom [LINK]", - description: "Adicionar / Remover / Reproduzir uma lista de reprodução personalizada!", - - run: async (client, message, args) => { - - - let playlist = client.custom.get(message.guild.id, "playlists"); - if (args[0] === "add" || args[0] === "set" || args[0] === "use") { - if (!args[1].includes("http")) return message.reply("Ah não! Isso não é um link, por exemplo: https://www.youtube.com/watch?v=dQw4w9WgXcQ") - if (playlist.includes(args[1])) return message.reply("Ah não! A música já existe na lista de reprodução do servidor, SEM CANÇÕES DUPLAS!") - client.custom.push(message.guild.id, args[1], "playlists"); - return functions.embedbuilder(client, 5000, message, config.colors.yes, "ADICIONOU COM SUCESSO UMA CANÇÃO À PLAYLIST DO SERVIDOR" + ` - Há agora: \`${playlist.length}\` canções na lista de reprodução do servidor`) - } - if (args[0] === "reset" || args[0] === "res" || args[0] === "resetar") { - let themsg = await message.reply("Você realmente deseja redefinir a lista de reprodução do servidor? || (* Responder com:* **__`sim`__**)||") - const filter = m => m.author.id === message.author.id; - themsg.channel.awaitMessages(filter, { - max: 1, - time: 600000, - errors: ['time'] - }) - .then(async collected => { - if (collected === "sim") { - try { - await client.custom.delete(message.guild.id, "playlists"); - } catch { - /* */ } - client.custom.ensure(message.guild.id, { - playlists: [], - }); - await message.reply("REINICIADA COM SUCESSO A PLAYLIST PERSONALIZADA DO SERVIDOR") - } - }).catch(error => { - message.reply("CANCELADO CAUSA NÃO É A PALAVRA CERTA / O TEMPO ESGOTADO!") - }) - } - if (args[0] === "play" || args[0] === "p" || args[0] === "ouvir" || args[0] === "listen") { - client.distube.playCustomPlaylist(message, playlist, { - name: message.author.username + "'s Playlist" - }); - return functions.embedbuilder(client, 5000, message, config.colors.yes, "TOCANDO LISTA DE REPRODUÇÃO PERSONALIZADA") - } - if (args[0] === "remover" || args[0] === "deletar" || args[0] === "del" || args[0] === "rem" || args[0] == "apagar") { - if (!args[1]) return message.reply("Por favor, adicione um link de música que você deseja adicionar, obrigado!"); - if (!playlist.includes(args[1])) return message.reply("Ah não! A música não existe, na lista de reprodução do servidor, certifique-se de que é o mesmo link!") - - client.custom.remove(message.guild.id, args[1], "playlists"); - return functions.embedbuilder(client, 5000, message, config.colors.yes, "REMOVEU A CANÇÃO COM SUCESSO DA PLAYLIST DO SERVIDOR") - } else { - let string = playlist.join("\n"); - customplay(message, string, playlist[0]) - functions.embedbuilder(client, "null", message, config.colors.yes, `Existe ${playlist.length} Músicas na lista de reprodução do servidor!`, ) - return functions.embedbuilder(client, "null", message, config.colors.yes, `Sintaxe do comando: `," + custom [Link]") - } - } -}; -async function customplay(message, string, cursong) { - let currentPage = 0; - const embeds = functions.customplaylistembed(client, message, string, cursong); - - const queueEmbed = await message.channel.send( - `**Pagina atual - ${currentPage + 1}/${embeds.length}**`, - embeds[currentPage] - ); - - try { - await queueEmbed.react("⬅️"); - await queueEmbed.react("➡️"); - await queueEmbed.react("⏹"); - } catch (error) { - console.error(error); - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 1000)) - } - - const filter = (reaction, user) => ["⬅️", "⏹", "➡️"].includes(reaction.emoji.name) && message.author.id === user.id; - const collector = queueEmbed.createReactionCollector(filter, { - time: 60000 - }); - - collector.on("collect", async (reaction, user) => { - try { - if (reaction.emoji.name === "⬅️") { - if (currentPage < embeds.length - 1) { - currentPage++; - queueEmbed.edit(`**Pagina atual - ${currentPage + 1}/${embeds.length}**`, embeds[currentPage]); - } - } else if (reaction.emoji.name === "➡️") { - if (currentPage !== 0) { - --currentPage; - queueEmbed.edit(`**Pagina atual - ${currentPage + 1}/${embeds.length}**`, embeds[currentPage]); - } - } else { - collector.stop(); - reaction.message.reactions.removeAll(); - } - await reaction.users.remove(message.author.id); - } catch (error) { - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - }); - -} diff --git a/commands/musica/grab.js b/commands/musica/grab.js deleted file mode 100644 index b4885e6..0000000 --- a/commands/musica/grab.js +++ /dev/null @@ -1,58 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const Canvas = require('canvas'); -const Discord = require("discord.js"); -module.exports = { - name: "grab", - category: "MUSIC COMMANDS", - aliases: ["yoink", "save", "salvar"], - useage: "grab", - description: "Salva a música atual em seu DM", - run: async (client, message, args) => { - //if not a dj, return error - DISABLED BECAUSE NOT NEEDED - //if (functions.check_if_dj(message)) - // return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ You don\'t have permission for this Command! You need to have: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada jogando!"); - - //send info msg - return message.channel.send(new MessageEmbed() - .setAuthor(`Música atual tocando:`, message.author.displayAvatarURL({ - dynamic: true - })) - .setThumbnail(`https://img.youtube.com/vi/${queue.songs[0].id}/mqdefault.jpg`) - .setURL(queue.songs[0].url) - .setColor(config.colors.yes) - .setFooter(client.user.username + " | por Kig", client.user.displayAvatarURL()) - .setTitle(`**:notas: Canção salva**`) - .addField(`Duração: `, `\`${queue.songs[0].formattedDuration}\``, true) - .addField(`Tocar: `, `\`${prefix}play ${queue.songs[0].url}\``, true) - .addField(`Baixar: `, `[\`CLIQUE AQUI\`](${queue.songs[0].streamURL})`, true) - .setFooter(`Requerido por: ${queue.songs[0].user.tag}`, queue.songs[0].user.displayAvatarURL({ - dynamic: true - })) - ) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/join.js b/commands/musica/join.js deleted file mode 100644 index cd04879..0000000 --- a/commands/musica/join.js +++ /dev/null @@ -1,45 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -var { - getData, - getPreview -} = require("spotify-url-info"); -const DeezerPublicApi = require('deezer-public-api'); -let deezer = new DeezerPublicApi(); -module.exports = { - name: "join", - category: "MUSIC COMMANDS", - aliases: ["connect", "summon"], - cooldown: 5, - useage: "join", - description: "Joins the Voice Channel", - run: async (client, message, args) => { - //if user not connected return - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if bot is connected somewhere return - if(message.guild.me.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, " Já estou conectado em algum lugar") - - //if not allowed to CONNECT to the CHANNEL - if (!message.guild.me.permissionsIn(message.member.voice.channel).has("CONNECT")) - return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \`entrar \` seu canal") - - //try to join the channel - message.member.voice.channel.join().catch(e=>{ - return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \`entrar \` seu canal") - }) - - //send info msg - functions.embedbuilder(client, 5000, message, config.colors.yes, "Entrou no seu canal ",` Reproduza faixas com: \`${prefix}play\``) - - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/jump.js b/commands/musica/jump.js deleted file mode 100644 index 0580155..0000000 --- a/commands/musica/jump.js +++ /dev/null @@ -1,50 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "jump", - cooldown: 5, - category: "MUSIC COMMANDS", - aliases: ["skipto"], - useage: "jump ", - description: "Jump to a song in the Queue", - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //if no args return error - if (!args[0]) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Please add the Position to which you want to jump to") - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "There is nothing playing!"); - - if (0 <= Number(args[0]) && Number(args[0]) <= queue.songs.length) { - functions.embedbuilder(client, 3000, message, config.colors.yes, "SUCESSO", `pulou ${parseInt(args[0])} musicas!`) - return client.distube.jump(message, parseInt(args[0])) - .catch(err => message.channel.send("Número da música inválido.")); - } else { - return functions.embedbuilder(client, 3000, message, config.colors.no, "ERROR", `Use um número entre ** 0 ** e **${DisTube.getQueue(message).length}** | *(0: desativado, 1: Repete uma música, 2: Repete toda a fila)*`) - } - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/loop.js b/commands/musica/loop.js deleted file mode 100644 index 13335b2..0000000 --- a/commands/musica/loop.js +++ /dev/null @@ -1,55 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "loop", - cooldown: 5, - category: "MUSIC COMMANDS", - aliases: ["repeat"], - useage: "loop <0/1/2> |", - description: "Enables loop for off / song / queue*\n0 = off\n1 = song\n2 = queue", - run: async (client, message, args) => { - ///if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //if no arguments return error - if (!args[0]) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Por favor, adicione as opções de estilo de loop que deseja alterar", `Opções Válidas:\n\n\`0\` / \`1\` / \`2\`\n\`off\` / \`musica\` / \`fila\``) - - //set variable - let loopis = args[0]; - if (args[0].toString().toLowerCase() === "musica") loopis = "1"; - else if (args[0].toString().toLowerCase() === "fila") loopis = "2"; - else if (args[0].toString().toLowerCase() === "off") loopis = "0"; - else if (args[0].toString().toLowerCase() === "s") loopis = "1"; - else if (args[0].toString().toLowerCase() === "m") loopis = "2"; - else if (args[0].toString().toLowerCase() === "disable") loopis = "0"; - loopis = Number(loopis); - - //change loop state - if (0 <= loopis && loopis <= 2) { - await client.distube.setRepeatMode(message, parseInt(args[0])); - await functions.embedbuilder(client, 3000, message, config.colors.yes, "Modo de repetição definido para:", `${args[0].replace("0", "OFF").replace("1", "Repetir música").replace("2", "Repetir fila")}`) - return; - } else { - return functions.embedbuilder(client, 3000, message, config.colors.no, "ERROR", `Use um número entre ** 0 ** e ** 2 ** | * (0: desabilitado, 1: Repete uma música, 2: Repete toda a fila)*`) - } - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/lyrics.js b/commands/musica/lyrics.js deleted file mode 100644 index 2023fe5..0000000 --- a/commands/musica/lyrics.js +++ /dev/null @@ -1,101 +0,0 @@ -const { - KSoftClient -} = require('@ksoft/api'); -const config = require("../../config.json") -const ksoft = new KSoftClient(config.ksoftapi); -const functions = require("../../functions") -module.exports = { - name: "lyrics", - cooldown: 5, - category: "MUSIC COMMANDS", - aliases: ["ly", "songtext", "letra"], - useage: "lyrics", - description: "Shows you the Lyrics for the CURRENT playing song, ..", - run: async (client, message, args) => { - //if not a dj, return error - DISABLED CAUSE NOT NEEDED - //if (functions.check_if_dj(message)) - // return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ You don\'t have permission for this Command! You need to have: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get the queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder("null", message, config.colors.no, "Não há nada jogando!"); - - let cursong = queue.songs[0]; - functions.embedbuilder(client, 3000, message, config.colors.yes, "Procurando!", cursong.name); - let lyrics; - - await ksoft.lyrics.get(cursong.name).then( - async track => { - if (!track.lyrics) return message.reply("NENHUMA LETRA ENCONTRADA!"); - lyrics = track.lyrics; - - - let currentPage = 0; - const embeds = functions.lyricsEmbed(client, message, lyrics, cursong); - - const queueEmbed = await message.channel.send( - `**Pagina atual - ${currentPage + 1}/${embeds.length}**`, - embeds[currentPage] - ); - - try { - await queueEmbed.react("⬅️"); - await queueEmbed.react("➡️"); - await queueEmbed.react("⏹"); - } catch (error) { - console.error(error); - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - - const filter = (reaction, user) => ["⬅️", "⏹", "➡️"].includes(reaction.emoji.id || reaction.emoji.name) && message.author.id === user.id; - const collector = queueEmbed.createReactionCollector(filter, { - time: 60000 - }); - - collector.on("collect", async (reaction, user) => { - try { - if (reaction.emoji.id === "➡️" || reaction.emoji.name === "➡️") { - if (currentPage < embeds.length - 1) { - currentPage++; - queueEmbed.edit(`**Pagina atual - ${currentPage + 1}/${embeds.length}**`, embeds[currentPage]); - } - } else if (reaction.emoji.id === "➡️" || reaction.emoji.name === "⬅️") { - if (currentPage !== 0) { - --currentPage; - queueEmbed.edit(`**Pagina atual - ${currentPage + 1}/${embeds.length}**`, embeds[currentPage]); - } - } else { - collector.stop(); - reaction.message.reactions.removeAll(); - } - await reaction.users.remove(message.author.id); - } catch (error) { - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - }); - - }); - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/moveme.js b/commands/musica/moveme.js deleted file mode 100644 index f08b628..0000000 --- a/commands/musica/moveme.js +++ /dev/null @@ -1,42 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: `moveme`, - category: "MUSIC COMMANDS", - aliases: [`mm`, "mvm", "my", "mvy", "moveyou"], - description: `Moves you to the BOT, if playing something`, - usage: `move`, - run: async (client, message, args, cmduser, text, prefix, player) => { - - //if not a dj, return error - DISABLED - NOT NEEDED - //if (functions.check_if_dj(message)) - //return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ You don\'t have permission for this Command! You need to have: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //If the Channel is full - if(botchannel.userLimit >= botchannel.members.length) return functions.embedbuilder(client, 3000, message, config.colors.no, "O canal está cheio, não consigo movê-lo!") - - //move the member - message.member.voice.setChannel(botchannel); - - //send success message - return functions.embedbuilder(client, 3000, message, config.colors.yes, `Moveu você para: \`${botchannel.name}\``) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/mycustom.js b/commands/musica/mycustom.js deleted file mode 100644 index 7982a63..0000000 --- a/commands/musica/mycustom.js +++ /dev/null @@ -1,122 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "mycustom", - category: "MUSIC COMMANDS", - aliases: [""], - useage: "mycustom [LINK]", - description: "Add / Remove / Play a Custom created playlist!", - - run: async (client, message, args) => { - - - let playlist = client.custom2.get(message.author.id, "myplaylists"); - if (args[0] === "add" || args[0] === "set" || args[0] === "use") { - if (!args[1].includes("http")) return message.reply("Ah não! Isso não é um link, por exemplo: https://www.youtube.com/watch?v=dQw4w9WgXcQ") - if (playlist.includes(args[1])) return message.reply("Ah não! A música já existe na lista de reprodução do servidor, SEM MÚSCAS DUPLICADAS!") - client.custom2.push(message.author.id, args[1], "myplaylists"); - return functions.embedbuilder(client, 5000, message, config.colors.yes, "ADICIONOU COM SUCESSO UMA CANÇÃO À PLAYLIST DO SERVIDOR" + ` - Há agora: \`${playlist.length+1}\` músicas na lista de reprodução do servidor`) - } - if (args[0] === "reset" || args[0] === "apagar") { - let themsg = await message.reply("ocê realmente deseja redefinir sua lista de reprodução personalizada? || (* Responder com: * ** __ `sim`__**)||") - const filter = m => m.author.id === message.author.id; - themsg.channel.awaitMessages(filter, { - max: 1, - time: 600000, - errors: ['time'] - }) - .then(async collected => { - if (collected === "sim") { - try { - await client.custom2.delete(message.author.id, "myplaylists"); - } catch { - /* */ - } - client.custom2.ensure(message.author.id, { - myplaylists: [], - }); - await message.reply("REINICIOU COM SUCESSO SUA PLAYLIST PERSONALIZADA") - } - }).catch(error => { - message.reply("CANCELADO CAUSA NÃO É A PALAVRA CERTA / O TEMPO ESGOTADO!") - }) - } - if (args[0] === "play" || args[0] === "p" || args[0] === "hear" || args[0] === "listen") { - client.distube.playCustomPlaylist(message, playlist, { - name: message.author.username + "'s Playlist" - }); - return functions.embedbuilder(client, 5000, message, config.colors.yes, "JOGANDO LISTA DE REPRODUÇÃO PERSONALIZADA") - } - if (args[0] === "remover" || args[0] === "deletar" || args[0] === "del" || args[0] === "rem") { - if (!args[1]) return message.reply("Por favor, adicione um link de música que você deseja adicionar, obrigado!"); - if (!playlist.includes(args[1])) return message.reply("Ah não! A música não existe, na lista de reprodução do servidor, certifique-se de que é o mesmo link!") - - client.custom2.remove(message.author.id, args[1], "myplaylists"); - return functions.embedbuilder(client, 5000, message, config.colors.yes, "REMOVEU A MÚSICA COM SUCESSO DA SUA PLAYLIST") - } else { - let string = playlist.join("\n"); - customplay(message, string, playlist) - functions.embedbuilder(client, "null", message, config.colors.yes, `Existe ${playlist.length} Músicas em sua lista de reprodução!`, ) - return functions.embedbuilder(client, "null", message, config.colors.yes, `Sintaxe do comando: `," + mycustom [Link]") - } - } -}; -async function customplay(message, string, cursong) { - let currentPage = 0; - const embeds = functions.customplaylistembed(client, message, string, cursong); - - const queueEmbed = await message.channel.send( - `**Página atual - ${currentPage + 1}/${embeds.length}**`, - embeds[currentPage] - ); - - try { - await queueEmbed.react("⬅️"); - await queueEmbed.react("⏹"); - await queueEmbed.react("➡️"); - } catch (error) { - console.error(error); - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 1000)) - } - - const filter = (reaction, user) => ["⬅️", "⏹", "➡️"].includes(reaction.emoji.name) && message.author.id === user.id; - const collector = queueEmbed.createReactionCollector(filter, { - time: 60000 - }); - - collector.on("collect", async (reaction, user) => { - try { - if (reaction.emoji.name === "⬅️") { - if (currentPage < embeds.length - 1) { - currentPage++; - queueEmbed.edit(`**Página atual - ${currentPage + 1}/${embeds.length}**`, embeds[currentPage]); - } - } else if (reaction.emoji.name === "➡️") { - if (currentPage !== 0) { - --currentPage; - queueEmbed.edit(`**Página atual - ${currentPage + 1}/${embeds.length}**`, embeds[currentPage]); - } - } else { - collector.stop(); - reaction.message.reactions.removeAll(); - } - await reaction.users.remove(message.author.id); - } catch (error) { - console.error(error); - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - }); - -} -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/nowplaying.js b/commands/musica/nowplaying.js deleted file mode 100644 index 13963c8..0000000 --- a/commands/musica/nowplaying.js +++ /dev/null @@ -1,122 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const Canvas = require('canvas'); -const Discord = require("discord.js"); -module.exports = { - name: "nowplaying", - category: "MUSIC COMMANDS", - aliases: ["np", "current", "currentsong", "cursong", "pn", "agora"], - useage: "nowplaying", - description: "Shows current song", - run: async (client, message, args) => { - //if not a dj, return error - DISABLED CAUSE NOT NEEDED - //if (functions.check_if_dj(message)) - // return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ You don\'t have permission for this Command! You need to have: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get the queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder("null", message, config.colors.no, "Não há nada tocando!"); - - let queuesong = queue.formattedCurrentTime; - let cursong = queue.songs[0]; - let cursongtimes = 0; - let cursongtimem = 0; - let cursongtimeh = 0; - let queuetimes = 0; - let queuetimem = 0; - let queuetimeh = 0; - if (cursong.formattedDuration.split(":").length === 3) { - cursongtimes = cursong.formattedDuration.split(":")[2] - cursongtimem = cursong.formattedDuration.split(":")[1] - cursongtimeh = cursong.formattedDuration.split(":")[0] - } - if (queuesong.split(":").length === 3) { - queuetimes = queuesong.split(":")[2] - queuetimem = queuesong.split(":")[1] - queuetimeh = queuesong.split(":")[0] - } - cursongtimes = cursong.formattedDuration.split(":")[1] - cursongtimem = cursong.formattedDuration.split(":")[0] - queuetimes = queuesong.split(":")[1] - queuetimem = queuesong.split(":")[0] - let maxduration = Number(cursongtimes) + Number(cursongtimem) * 60 + Number(cursongtimeh) * 60 * 60; - let minduration = Number(queuetimes) + Number(queuetimem) * 60 + Number(queuetimeh) * 60 * 60; - let percentduration = Math.floor((minduration / maxduration) * 100); - - let songtitle = cursong.name; - let curtime = cursong.formattedDuration; - let oftime = `${queue.formattedCurrentTime}/${cursong.formattedDuration}` - const canvas = Canvas.createCanvas(800, 200); - const ctx = canvas.getContext('2d'); - const background = await Canvas.loadImage('./bg.png'); - - ctx.drawImage(background, 0, 0, canvas.width, canvas.height); - const url = `https://img.youtube.com/vi/${cursong.id}/mqdefault.jpg` - const avatar = await Canvas.loadImage(url); - ctx.drawImage(avatar, 10, 10, 192, 108); - - - var textString = songtitle.substr(0, 35); - ctx.font = 'bold 35px Genta'; - ctx.fillStyle = '#00BFFF'; - ctx.fillText(textString, 10 + 192 + 10, 10 + 25); - let textStringt - if (songtitle.length > 40) textStringt = songtitle.substr(35, 32) + "..."; - else textStringt = ""; - ctx.font = 'b5px Genta'; - ctx.fillStyle = '#00BFFF'; - ctx.fillText(textStringt, 10 + 192 + 10, 10 + 25 + 40); - - ctx.font = 'bold 27px Genta'; - ctx.fillStyle = '#00BFFF'; - ctx.fillText(oftime, 10 + 192 + 10, 10 + 25 + 30 + 50); - - let percent = percentduration; - let index = Math.floor(percent) || 10; - let left = Number(".".repeat(index).length) * 7.9; - - if (left < 50) left = 50; - - let x = 14; - let y = 200 - 65; - let width = left; - let height = 50; - let radius = 25; - - if (width < 2 * radius) radius = width / 2; - if (height < 2 * radius) radius = height / 2; - ctx.beginPath(); - ctx.moveTo(x + radius, y); - ctx.arcTo(x + width, y, x + width, y + height, radius); - ctx.arcTo(x + width, y + height, x, y + height, radius); - ctx.arcTo(x, y + height, x, y, radius); - ctx.arcTo(x, y, x + width, y, radius); - ctx.closePath(); - - ctx.fillStyle = '#00BFFF'; - ctx.fill(); - - - const attachment = new Discord.MessageAttachment(canvas.toBuffer(), 'nowplaying.png'); - - let fastembed2 = new Discord.MessageEmbed() - .setColor(config.colors.yes) - .setTitle(cursong.name) - .setURL(cursong.url) - .setImage("attachment://nowplaying.png") - .attachFiles(attachment) - await message.channel.send(fastembed2); - return; - } -}; diff --git a/commands/musica/pause.js b/commands/musica/pause.js deleted file mode 100644 index 4fa8b95..0000000 --- a/commands/musica/pause.js +++ /dev/null @@ -1,41 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "pause", - category: "MUSIC COMMANDS", - aliases: ["break"], - useage: "pause", - description: "Pauses the song*", - run: async (client, message, args) => { - //if not a dj, return error - if(functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //if Bot is paused, return error - if (client.distube.isPaused(message)) return functions.embedbuilder(client, "null", message, config.colors.no, "Já pausado!") - - //send information message - functions.embedbuilder(client, 3000, message, config.colors.yes, "Pausado!") - - //pause - return client.distube.pause(message); - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/play.js b/commands/musica/play.js deleted file mode 100644 index b11a4e5..0000000 --- a/commands/musica/play.js +++ /dev/null @@ -1,110 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -var { - getData, - getPreview -} = require("spotify-url-info"); -const DeezerPublicApi = require('deezer-public-api'); -let deezer = new DeezerPublicApi(); -module.exports = { - name: "play", - category: "MUSIC COMMANDS", - aliases: ["p", "tocar"], - cooldown: 5, - useage: "play ", - description: "Toca uma música do youtube, soundcloud ou qualquer outra coisa, ou pesquisa ou toca uma lista de reprodução", - run: async (client, message, args) => { - //if not a dj, return error Disabled - Because not needed - //if(functions.check_if_dj(message)) - //return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ You don\'t have permission for this Command! You need to have: ${functions.check_if_dj(message)}`) - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error only check if connected - if (message.guild.me.voice.channel && message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //if no arguments return error - if (!args[0]) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Por favor, adicione algo que você queira pesquisar") - - //if not allowed to CONNECT to the CHANNEL - if (!message.guild.me.permissionsIn(message.member.voice.channel).has("CONNECT")) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \ `entrar \` no seu canal") - - //If bot not connected, join the channel - if(!message.guild.me.voice.channel) - message.member.voice.channel.join().catch(e=>{ - //send error if not possible - return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \ `entrar \` no seu canal") - }) - - //if not allowed to CONNECT to the CHANNEL - if (!message.guild.me.permissionsIn(message.member.voice.channel).has("SPEAK")) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \ `falar \` no seu canal") - - //send information message - functions.embedbuilder(client, 5000, message, config.colors.yes, "🎶 Procurando!", "```" + args.join(" ") + "```") - - //do things for deezer - if (args.join(" ").includes("deezer")) { - // list for the given artist id - let track = args.join(" ").split("/") - - track = track[track.length - 1] - deezer.playlist.tracks(track).then(async function (result) { - let items = result.data; - let songsarray = []; - let tracklength = items.length; - - functions.embedbuilder(client, 5000, message, config.colors.yes, "🎶 Buscando as músicas! "," Isso levará cerca de: " + tracklength / 2 + " segundos"); - - for (let i = 0; i < 25; i++) { - let result = await client.distube.play(items[i].title); - songsarray.push(result[0].url) - } - client.distube.playCustomPlaylist(message, songsarray, { - name: message.author.username + "'s Deezer Playlist" - }); - }); - } - - //do things for spotify track - else if (args.join(" ").includes("track") && args.join(" ").includes("open.spotify")) { - //get data - let info = await getPreview(args.join(" ")); - //play track - return client.distube.play(message, info.artist + " " + info.title); - } - - //do things for spotify playlist - else if (args.join(" ").includes("playlist") && args.join(" ").includes("open.spotify")) { - let items = await getTracks(args.join(" ")); - let songsarray = []; - let tracklength = items.length; - if (tracklength > 25) { - message.reply("o máximo atual de faixas para listas de reprodução do Spotify são 25 faixas, se você quiser usar listas de reprodução maiores, então dm `KingKiller®#1889` \n \nEu usarei as primeiras 25 músicas!"); - tracklength = 25; - } - functions.embedbuilder(client, 5000, message, config.colors.yes, "🎶 Buscando as músicas! "," Isso levará cerca de: " + tracklength / 2 + " segundos"); - for (let i = 0; i < 25; i++) { - let result = await client.distube.play(items[i].title); - songsarray.push(result[0].url) - } - client.distube.playCustomPlaylist(message, songsarray, { - name: message.author.username + "'s Spotify Playlist" - }); - } - - //just play it - else { - return client.distube.play(message, args.join(" ")); - } - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/playsc.js b/commands/musica/playsc.js deleted file mode 100644 index d0e5c1c..0000000 --- a/commands/musica/playsc.js +++ /dev/null @@ -1,61 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -const scdl = require("soundcloud-downloader").default; -module.exports = { - name: "playsc", - category: "MUSIC COMMANDS", - aliases: ["psc", "playsoundclound"], - cooldown: 5, - useage: "playsc ", - description: "Plays a song, from soundcloud, whatever, or search it, or play a playlist", - run: async (client, message, args) => { - //if not a dj, return error Disabled - Because not needed - //if(functions.check_if_dj(message)) - //return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ You don\'t have permission for this Command! You need to have: ${functions.check_if_dj(message)}`) - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error only check if connected - if (message.guild.me.voice.channel && message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrarno meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //if no arguments return error - if (!args[0]) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Por favor, adicione algo que você queira pesquisar") - - //if not allowed to CONNECT to the CHANNEL - if (!message.guild.me.permissionsIn(message.member.voice.channel).has("CONNECT")) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \`entrar\` seu canal") - - //If bot not connected, join the channel - if(!message.guild.me.voice.channel) - message.member.voice.channel.join().catch(e=>{ - //send error if not possible - return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \`entrar \` seu canal") - }) - - //if not allowed to CONNECT to the CHANNEL - if (!message.guild.me.permissionsIn(message.member.voice.channel).has("SPEAK")) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \`falar \` seu canal") - - //send information message - functions.embedbuilder(client, 5000, message, config.colors.yes, "🔎 Procurando!", "```" + args.join(" ") + "```") - - //Search in soundcloud - scdl.search('tracks', args.join(" ")) - .then(async results => { - //send information message - functions.embedbuilder(client, 10000, message, config.colors.yes, "🔎 Tocando!", `[${results.collection[0].permalink}](${results.collection[0].permalink_url})`, results.collection[0].artwork_url) - //play track - return client.distube.play(message, results.collection[0].permalink_url) - }) - .catch(err => console.log(err)) - - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/playskip.js b/commands/musica/playskip.js deleted file mode 100644 index 8adf256..0000000 --- a/commands/musica/playskip.js +++ /dev/null @@ -1,73 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -var { - getPreview -} = require("spotify-url-info"); -module.exports = { - name: "playskip", - category: "MUSIC COMMANDS", - aliases: ["ps"], - useage: "playskip ", - description: "Plays new song and skips current", - run: async (client, message, args) => { - //if not a dj, return error - if(functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error only check if connected - if (message.guild.me.voice.channel && message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //if no args return error - if (!args[0]) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Por favor, adicione algo que você queira pesquisar") - - //if not allowed to CONNECT to the CHANNEL - if (!message.guild.me.permissionsIn(message.member.voice.channel).has("CONNECT")) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \`entrar \` seu canal") - - //If bot not connected, join the channel - if(!message.guild.me.voice.channel) - message.member.voice.channel.join().catch(e=>{ - //send error if not possible - return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \`entrar \` seu canal") - }) - - //if not allowed to CONNECT to the CHANNEL - if (!message.guild.me.permissionsIn(message.member.voice.channel).has("SPEAK")) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \`falar \` seu canal") - - //if bot not connected use play - if (!message.guild.me.voice.channel) { - //send information msg - functions.embedbuilder(client, 5000, message, config.colors.yes, "Procurando!", "```" + args.join(" ") + "```") - //return + play the track - return client.distube.play(message, args.join(" ")); - } - - //send information message - functions.embedbuilder(client, 5000, message, config.colors.yes, "Pesquisando e pulando!", "```" + args.join(" ") + "```") - - //if its a spotify track then get preview data and use it - if (args.join(" ").includes("track") && args.join(" ").includes("open.spotify")) { - //get the song data - let info = await getPreview(args.join(" ")); - //return + playskip - return client.distube.playSkip(message, info.artist + " " + info.title); - } - //if its a playlist of some kind send error - else if (args.join(" ").includes("playlist") || args.join(" ").includes("deezer")) return message.reply("**:x: Playlists não são compatíveis com playskip -_-**") - //use the distube pkg to play and skip - else { - return client.distube.playSkip(message, args.join(" ")); - } - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/queue.js b/commands/musica/queue.js deleted file mode 100644 index 2d50f6e..0000000 --- a/commands/musica/queue.js +++ /dev/null @@ -1,86 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "queue", - category: "Music", - aliases: ["qu"], - cooldown: 4, - useage: "queue", - description: "Shows the current Queue of Track", - run: async (client, message, args, cmduser, text, prefix) => { - //if not a dj, return error - DISABLED CAUSE NOT NEEDED - //if (functions.check_if_dj(message)) - // return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ You don\'t have permission for this Command! You need to have: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get the queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - let currentPage = 0; - const embeds = functions.QueueEmbed(client, queue) - - const queueEmbed = await message.channel.send( - `**Pagina atual - ${currentPage + 1}/${embeds.length}**`, - embeds[currentPage] - ); - - try { - await queueEmbed.react("⬅️"); - await queueEmbed.react("➡️"); - await queueEmbed.react("⏹"); - } catch (error) { - console.error(error); - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - - const filter = (reaction, user) => ["⬅️", "⏹", "➡️"].includes(reaction.emoji.id || reaction.emoji.name) && message.author.id === user.id; - const collector = queueEmbed.createReactionCollector(filter, { - time: 60000 - }); - - collector.on("collect", async (reaction, user) => { - try { - if (reaction.emoji.id === "➡️" || reaction.emoji.name === "➡️") { - if (currentPage < embeds.length - 1) { - currentPage++; - queueEmbed.edit(`**Pagina atual - ${currentPage + 1}/${embeds.length}**`, embeds[currentPage]); - } - } else if (reaction.emoji.id === "➡️" || reaction.emoji.name === "⬅️") { - if (currentPage !== 0) { - --currentPage; - queueEmbed.edit(`**Pagina atual - ${currentPage + 1}/${embeds.length}**`, embeds[currentPage]); - } - } else { - collector.stop(); - reaction.message.reactions.removeAll(); - } - await reaction.users.remove(message.author.id); - } catch (error) { - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - }); - - } -} -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/Discord-Js-Handler-Template - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/radio.js b/commands/musica/radio.js deleted file mode 100644 index 2b24c39..0000000 --- a/commands/musica/radio.js +++ /dev/null @@ -1,61 +0,0 @@ -const radio = require("../../radio") -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "radio", - category: "MUSIC COMMANDS", - useage: "radio [radiostation] [volume]", - description: "Play one of the 200 Radio Station, or see them by just typing +radio in the chat!", - run: async (client, message, args) => { - //if not allowed to CONNECT to the CHANNEL - if (!message.guild.me.permissionsIn(message.member.voice.channel).has("CONNECT")) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \`entrar \` seu canal") - - //If bot not connected, join the channel - if (!message.guild.me.voice.channel) - message.member.voice.channel.join().catch(e => { - //send error if not possible - return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \`entrar \` seu canal") - }) - - //if not allowed to CONNECT to the CHANNEL - if (!message.guild.me.permissionsIn(message.member.voice.channel).has("SPEAK")) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \`falar \` seu canal") - - - if (message.guild.me.voice.channel && args[0]) { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `<:declined:780403017160982538> Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //stop the Distube - try{ - client.distube.stop(message); - }catch{ - console.log("APENAS TOQUE DE RÁDIO") - } - - //execute the radio module - return radio(client, message, args); //get the radio module - } else { - //execute the radio module - return radio(client, message, args); //get the radio module - } - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/removetrack.js b/commands/musica/removetrack.js deleted file mode 100644 index 8c36363..0000000 --- a/commands/musica/removetrack.js +++ /dev/null @@ -1,53 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "removetrack", - category: "MUSIC COMMANDS", - aliases: ["rt"], - useage: "removetrack ", - description: "Removes a Specific Track", - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //if no args return - if (!args[0]) return functions.embedbuilder(client, 3000, message, config.colors.no, "Por favor, adicione a posição da trilha que você deseja remover"); - - //if args too big - if (isNaN(args[0]) || Number(args[0]) >= queue.songs.length) return functions.embedbuilder(client, 3000, message, config.colors.no, "Sua posição de música está fora do intervalo! Máx.: " + queue.songs.length); - - //save the current track on a variable - var track = queue.songs[Number(args[0])] - - //clear the queue - queue.songs.splice(Number(args[0]), Number(args[0]) + 1); - - //Send info message - functions.embedbuilder(client, 3000, message, config.colors.yes, "Removeu totalmente sua trilha com sucesso", `[${track.name}](${track.url})`) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/replay.js b/commands/musica/replay.js deleted file mode 100644 index c04e27d..0000000 --- a/commands/musica/replay.js +++ /dev/null @@ -1,47 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "replay", - category: "MUSIC COMMANDS", - aliases: ["restart"], - useage: "replay", - description: "Replays the current song", - run: async (client, message, args) => { - //if not a dj, return error - if(functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get the Queue - let queue = client.distube.getQueue(message); - - //if no queue, return error - if (!queue) return embedbuilder("null", message, config.colors.no, "Não há nada jogando!"); - - //get current song - let cursong = queue.songs[0]; - - //send information message - functions.embedbuilder(client, 5000, message, config.colors.yes, "Repetindo a música atual:", `[${cursong.name}](${cursong.url})`, cursong.thumbnail) - - //seek to 0 - return client.distube.seek(message, 0); - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/resume.js b/commands/musica/resume.js deleted file mode 100644 index fbd0530..0000000 --- a/commands/musica/resume.js +++ /dev/null @@ -1,41 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "resume", - category: "MUSIC COMMANDS", - aliases: ["r", "retomar"], - useage: "resume", - description: "Resume the song", - run: async (client, message, args) => { - //if not a dj, return error - if(functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //if Bot is not paused, return error - if (!client.distube.isPaused(message)) return functions.embedbuilder(client, "null", message, config.colors.no, "Não pausado!") - - //send information embed - functions.embedbuilder(client, 3000, message, config.colors.yes, "Retomar!") - - //resume - client.distube.resume(message); - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/rewind.js b/commands/musica/rewind.js deleted file mode 100644 index db9907d..0000000 --- a/commands/musica/rewind.js +++ /dev/null @@ -1,53 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "rewind", - category: "MUSIC COMMANDS", - aliases: ["rew", "re", "retroceder"], - useage: "rewind ", - description: "Rewinds the Song back: seconds", - run: async (client, message, args) => { - //if not a dj, return error - if(functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get the Queue - let queue = client.distube.getQueue(message); - - //if no Queue return error message - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if no arguments, return error message - if (!args[0]) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Por favor, adicione a quantidade que você deseja retroceder") - - //get seektime - let seektime = queue.currentTime - Number(args[0]) * 1000; - if (seektime < 0) seektime = 0; - if (seektime >= queue.songs[0].duration - queue.currentTime) seektime = 0; - - - //seek - client.distube.seek(message, Number(seektime)); - - //send information message - functions.embedbuilder(client, 3000, message, config.colors.yes, "RETROCEDER!", `Retrocedeu a música para \`${args[0]} segundos\``) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/search.js b/commands/musica/search.js deleted file mode 100644 index 13480f2..0000000 --- a/commands/musica/search.js +++ /dev/null @@ -1,97 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "search", - category: "MUSIC COMMANDS", - aliases:["procurar"], - cooldown: 5, - useage: "search ", - description: "Searches for 10 results, in youtube", - run: async (client, message, args) => { - - //if not a dj, return error - Disabled because not needed - //if(functions.check_if_dj(message)) - //return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ You don\'t have permission for this Command! You need to have: ${functions.check_if_dj(message)}`) - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error but only check if bot is connected - if (message.guild.me.voice.channel && message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //if no arguments, return error - if (!args[0]) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Por favor, adicione algo que você queira pesquisar") - - //if not allowed to CONNECT to the CHANNEL - if (!message.guild.me.permissionsIn(message.member.voice.channel).has("CONNECT")) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \`entrar \` seu canal") - - //If bot not connected, join the channel - if(!message.guild.me.voice.channel) - message.member.voice.channel.join().catch(e=>{ - //send error if not possible - return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \`entrar \` seu canal") - }) - - //if not allowed to CONNECT to the CHANNEL - if (!message.guild.me.permissionsIn(message.member.voice.channel).has("SPEAK")) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Não tenho permissão para \`falar \` seu canal") - - - //send information message - functions.embedbuilder(client, 3000, message, config.colors.yes, "🔎 Procurando!", args.join(" ")) - - //search tracks and send first 10 results etc - let result = await client.distube.search(args.join(" ")); - - //create variable - let searchresult = ""; - - //create string information - for (let i = 0; i < 10; i++) { - try { - searchresult += await `**${i+1}**. [${result[i].name}](${result[i].url}) - \`${result[i].formattedDuration}\`\n`; - } catch { - searchresult += await " "; - } - } - - //send search result embed - await functions.embedbuilder(client, "null", message, config.colors.yes, "🔎 Procurar Resultados:", searchresult) - - //wait for userinput - let userinput; - await message.channel.awaitMessages(m => m.author.id == message.author.id, { - max: 1, - time: 60000, - errors: ["time"], - }).then(collected => { - //save userinput on var - userinput = collected.first().content; - //if input out of range, error - if (Number(userinput) <= 0 && Number(userinput) > 10) { - functions.embedbuilder(client, "null", message, config.colors.no, "Não é um número certo! "," Então eu uso o número 1!") - userinput = 1; - } - }).catch(() => { - console.error; - userinput = 404 - }); - - //if smt went wrong return error - if (userinput === 404) return functions.embedbuilder(client, "null", message, config.colors.no, "Algo deu errado! / O tempo acabou") - - //send info message - functions.embedbuilder(client, 10000, message, config.colors.yes, "🔎 Procurando!", `[${result[userinput - 1].name}](${result[userinput - 1].url})`, result[userinput - 1].thumbnail) - - //play track - client.distube.play(message, result[userinput - 1].url) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/searchrelated.js b/commands/musica/searchrelated.js deleted file mode 100644 index 9945106..0000000 --- a/commands/musica/searchrelated.js +++ /dev/null @@ -1,80 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "searchrelated", - category: "MUSIC COMMANDS", - cooldown: 5, - aliases: ["searchrelated", "searchsimilar", ], - useage: "searchrelated --> 'wait' --> Enter a number", - description: "Seraches similar songs of the current Track and let u choose which one you want", - run: async (client, message, args) => { - - //if not a dj, return error - Disabled because not needed - //if(functions.check_if_dj(message)) - //return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ You don\'t have permission for this Command! You need to have: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nothing playing!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " You must join a Voice Channel") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " You must join my Voice Channel: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get the newsong - let newsong = await client.distube.addRelatedVideo(message); - - //search for newsongs - let result = newsong.songs; - - //define variable - let searchresult = ""; - - for (let i = 0; i < result.length; i++) { - try { - searchresult += await `**${i+1}**. [${result[i].name}](${result[i].url}) - \`${result[i].formattedDuration}\`\n`; - } catch { - searchresult += await " "; - } - } - //send information message - await functions.embedbuilder(client, "null", message, config.colors.yes, "🔎 Search Results for Related Songs:", searchresult) - let userinput; - //wait for userinput - await message.channel.awaitMessages(m => m.author.id == message.author.id, { - max: 1, - time: 60000, - errors: ["time"], - }).then(collected => { - //save userinput - userinput = collected.first().content; - //if userinput out of range, error - if (Number(userinput) <= 0 && Number(userinput) > 10) { - functions.embedbuilder(client, "null", message, config.colors.no, "Not a right number!", "so i use number 1!") - userinput = 1; - } - }).catch(() => { - console.error; - userinput = 404 - }); - - //if something went wrong, return error - if (userinput === 404) return functions.embedbuilder(client, "null", message, config.colors.no, "Something went wrong! / Time ran out") - - //send information message - functions.embedbuilder(client, 10000, message, config.colors.yes, "🔎 Adding:", `[${result[userinput - 1].name}](${result[userinput - 1].url})`, result[userinput - 1].thumbnail) - - //play track - client.distube.play(message, result[userinput - 1].url) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/searchsc.js b/commands/musica/searchsc.js deleted file mode 100644 index 02c5a58..0000000 --- a/commands/musica/searchsc.js +++ /dev/null @@ -1,101 +0,0 @@ -const functions = require("../../functions") -const scdl = require("soundcloud-downloader").default; -const config = require("../../config.json") -module.exports = { - name: "searchsc", - category: "MUSIC COMMANDS", - useage: "searchsc ", - cooldown: 5, - description: "Searches for 15 results in SOUNDCLOUD", - run: async (client, message, args) => { - //if not a dj, return error - DISABLED BECAUSE NOT A DJ CMD - //if(functions.check_if_dj(message)) - //return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ You don\'t have permission for this Command! You need to have: ${functions.check_if_dj(message)}`) - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " You must join a Voice Channel") - - //if they are not in the same channel, return error, but check only if the bot is connected somewhere - if (message.guild.me.voice.channel && message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " You must join my Voice Channel: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //if no arguments added, return error - if (!args[0]) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Please add something you wanna search to") - - //if not allowed to CONNECT to the CHANNEL - if (!message.guild.me.permissionsIn(message.member.voice.channel).has("CONNECT")) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " I am not allowed to \`join\` your Channel") - - //If bot not connected, join the channel - if(!message.guild.me.voice.channel) - message.member.voice.channel.join().catch(e=>{ - //send error if not possible - return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " I am not allowed to \`join\` your Channel") - }) - - //if not allowed to CONNECT to the CHANNEL - if (!message.guild.me.permissionsIn(message.member.voice.channel).has("SPEAK")) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " I am not allowed to \`speak\` your Channel") - - - //send information message - functions.embedbuilder(client, 3000, message, config.colors.yes, "🔎 Searching!", args.join(" ")) - - //search in soundcloud - scdl.search('tracks', args.join(" ")) - .then(async results => { - //for each result do this - let searchresult = ""; - for (let i = 0; i < results.collection.length; i++) { - try { - let mins = Math.floor((results.collection[i].full_duration / 1000) / 60); - let secs = Math.floor((results.collection[i].full_duration / 1000) % 60); - if (mins < 10) mins = "0" + mins; - if (secs < 10) secs = "0" + secs; - let durr = mins + ":" + secs; - searchresult += await `**${i+1}**. [${results.collection[i].permalink}](${results.collection[i].permalink_url}) - \`${durr}\`\n`; - } catch { - searchresult += await " "; - } - } - - //send information message - await functions.embedbuilder(client, "null", message, config.colors.yes, "🔎 Search Results:", searchresult) - - //wait for userinput with 60 sec. delay - let userinput; - await message.channel.awaitMessages(m => m.author.id == message.author.id, { - max: 1, - time: 60000, - errors: ["time"], - }).then(collected => { - //collect his input and saved it on var - userinput = collected.first().content; - //return if wrong input - if (Number(userinput) <= 0 && Number(userinput) > 15) { - functions.embedbuilder(client, "null", message, config.colors.no, "Not a right number!", "so i use number 1!") - userinput = 1; - } - }).catch(() => { - console.error; - userinput = 404 - }); - - //if something went terrible, wrong send error - if (userinput === 404) return functions.embedbuilder(client, "null", message, config.colors.no, "Something went wrong!") - - //send information message - functions.embedbuilder(client, 10000, message, config.colors.yes, "🔎 Searching!", `[${results.collection[userinput - 1].permalink}](${results.collection[userinput - 1].permalink_url})`, results.collection[userinput - 1].artwork_url) - - //play the track - client.distube.play(message, results.collection[userinput - 1].permalink_url) - }) - .catch(err => console.log(err)) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/seek.js b/commands/musica/seek.js deleted file mode 100644 index 11aed46..0000000 --- a/commands/musica/seek.js +++ /dev/null @@ -1,40 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "seek", - category: "MUSIC COMMANDS", - useage: "seek ", - description: "Moves in the Song in: seconds", - run: async (client, message, args) => { - //if not a dj, return error - if(functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ You don\'t have permission for this Command! You need to have: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nothing playing!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " You must join a Voice Channel") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " You must join my Voice Channel: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //if no arguments, return error - if (!args[0]) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Please add the amount you wanna seek") - - //sned information message - functions.embedbuilder(client, 3000, message, config.colors.yes, "Seeked!", `seeked the song to \`${args[0]} seconds\``) - - //Seek - client.distube.seek(message, Number(args[0] * 1000)); - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/shuffle.js b/commands/musica/shuffle.js deleted file mode 100644 index c658dcb..0000000 --- a/commands/musica/shuffle.js +++ /dev/null @@ -1,38 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "shuffle", - category: "MUSIC COMMANDS", - aliases: ["mix"], - useage: "shuffle", - description: "Shuffles the queue", - run: async (client, message, args) => { - //if not a dj, return error - if(functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ You don\'t have permission for this Command! You need to have: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nothing playing!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " You must join a Voice Channel") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " You must join my Voice Channel: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //send information message - functions.embedbuilder(client, 3000, message, config.colors.yes, "Shuffled!") - - //shuffle the queue - client.distube.shuffle(message); - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/skip.js b/commands/musica/skip.js deleted file mode 100644 index 73eea0e..0000000 --- a/commands/musica/skip.js +++ /dev/null @@ -1,38 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "skip", - category: "MUSIC COMMANDS", - aliases: ["s", "pular"], - useage: "skip", - description: "Skips current song", - run: async (client, message, args) => { - //if not a dj, return error - if(functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //send information message - functions.embedbuilder(client, 3000, message, config.colors.yes, "PULADO!", `Pulou a música`) - - //skip track - client.distube.skip(message); - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/status.js b/commands/musica/status.js deleted file mode 100644 index 3a4237a..0000000 --- a/commands/musica/status.js +++ /dev/null @@ -1,41 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "status", - category: "MUSIC COMMANDS", - useage: "status", - aliases: ["settings", "configuração"], - description: "Mostra o status / configurações da fila", - run: async (client, message, args) => { - //if not a dj, return error - DISABLED BECAUSE NOT A DJ CMD - //if(functions.check_if_dj(message)) - //return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ You don\'t have permission for this Command! You need to have: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get the queue - let queue = client.distube.getQueue(message); - - //if no queue, return error - if (!queue) return functions.embedbuilder(client, "null", message, config.colors.no, "Não há nada tocando!"); - - //send the curembed from the function - return message.channel.send(functions.curembed(client, message)); - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/stop.js b/commands/musica/stop.js deleted file mode 100644 index 834e1ef..0000000 --- a/commands/musica/stop.js +++ /dev/null @@ -1,42 +0,0 @@ -const functions = require("../../functions"); -const config = require("../../config.json") -module.exports = { - name: "stop", - category: "MUSIC COMMANDS", - aliases: ["leave"], - useage: "stop", - description: "Stops playing and leaves the channel", - run: async (client, message, args) => { - //if not a dj, return error - if(functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ Você não tem permissão para este comando! Você precisa ter: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //send information message - functions.embedbuilder(client, "null", message, config.colors.no, "PAROU!", `saiu do canal`) - - //leave channel if bot joined via opus stream - message.member.voice.channel.leave().catch(e=> console.log("não consegui sair do canal")) - - //stop distube - client.distube.stop(message); - - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/musica/volume.js b/commands/musica/volume.js deleted file mode 100644 index 7a6d078..0000000 --- a/commands/musica/volume.js +++ /dev/null @@ -1,44 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "volume", - category: "MUSIC COMMANDS", - aliases: ["vol"], - useage: "volume ", - description: "Changes volume", - run: async (client, message, args) => { - //if not a dj, return error - if(functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ You don\'t have permission for this Command! You need to have: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nothing playing!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " You must join a Voice Channel") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " You must join my Voice Channel: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //if no arguments, return error - if (!args[0]) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Please add a valid Volume Number", "The Number must be between `0` and `500`") - - //get the Number count if too big return error - if (Number(args[0]) > 500 && Number(args[0]) < 0) return functions.embedbuilder(client, "null", message, config.colors.no, "Not valid Number", "Please use a volume Number between `0` and `500`") - - //send information message - functions.embedbuilder(client, 3000, message, config.colors.yes, "VOLUME!", `changed volume to \`${args[0]} %\``) - - //set the volume - await client.distube.setVolume(message, args[0]); - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/setup/addbotchat.js b/commands/setup/addbotchat.js deleted file mode 100644 index cb283b9..0000000 --- a/commands/setup/addbotchat.js +++ /dev/null @@ -1,39 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "addbotchat", - aliases: ["addbotchannel"], - category: "setup", - description: "Vamos habilitar um bate-papo apenas para bot, onde a comunidade tem permissão para usar comandos", - useage: "addbotchat <#chat>", - run: async (client, message, args) => { - //command - if (!message.member.hasPermission("ADMINISTRATOR")) return functions.embedbuilder(client, "null", message, config.colors.no, "BOT-CHAT-SETUP", `❌ Yocê não tem permissão para este comando!`) - - let channel = message.mentions.channels.first(); - if (!channel) return functions.embedbuilder(client, "null", message, config.colors.no, `ERROR`, `Adicione um canal via ping, por exemplo: #channel!`) - try { - message.guild.roles.cache.get(channel.id) - } catch { - return functions.embedbuilder(client, "null", message, config.colors.no, `ERROR`, `Parece que o canal não existe neste servidor!`) - } - if (client.settings.get(message.guild.id, `botchannel`).includes(channel.id)) return functions.embedbuilder(client, "null", message, config.colors.no, `ERROR`, `Este canal já está na lista!`) - - message.react("✅"); - - client.settings.push(message.guild.id, channel.id, `botchannel`); - let leftb = ""; - if (client.settings.get(message.guild.id, `botchannel`).join("") === "") leftb = "nenhum canal, também conhecido como todos os canais são canais bot" - else - for (let i = 0; i < client.settings.get(message.guild.id, `botchannel`).length; i++) { - leftb += "<#" + client.settings.get(message.guild.id, `botchannel`)[i] + "> | " - } - let botchatfromenmap = message.guild.channels.cache.get(client.settings.get(message.guild.id, `botchannel`)[client.settings.get(message.guild.id, `botchannel`).length]) - - return functions.embedbuilder(client, "null", message, config.colors.yes, "BOT-CHAT-SETUP ", `✅ O Bot-Chat foi adicionado com sucesso a ${botchatfromenmap} - Todos os bate-papos de bot: - > ${leftb}`) - - } -}; - diff --git a/commands/setup/adddj.js b/commands/setup/adddj.js deleted file mode 100644 index 3676829..0000000 --- a/commands/setup/adddj.js +++ /dev/null @@ -1,37 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "adddj", - aliases: ["adddjrole"], - category: "setup", - description: "Vamos definir um DJ ROLE (como um array, também conhecido como você pode ter vários)", - useage: "adddj @role", - run: async (client, message, args) => { - if (!message.member.hasPermission("ADMINISTRATOR")) return functions.embedbuilder(client, "null", message, config.colors.no, "DJ-ROLE", `❌ Você não tem permissão para este comando!`) - - let role = message.mentions.roles.first(); - - try { - message.guild.roles.cache.get(role.id) - } catch { - return functions.embedbuilder(client, "null", message, config.colors.no, `ERROR`, `Parece que a Função não existe neste Servidor!`) - } - - if (!role) return functions.embedbuilder(client, "null", message, config.colors.no, `ERROR`, `Adicione uma função via ping, @cargo!`) - if (client.settings.get(message.guild.id, `djroles`).includes(role.id)) return functions.embedbuilder(client, "null", message, config.colors.no, `ERROR`, `Este papel é um problema na lista!`) - - message.react("✅"); - - client.settings.push(message.guild.id, role.id, `djroles`); - let leftb = ""; - if (client.settings.get(message.guild.id, `djroles`).join("") === "") leftb = "nenhum papel de Dj, também conhecido como Todos os usuários são Djs" - else - for (let i = 0; i < client.settings.get(message.guild.id, `djroles`).length; i++) { - leftb += "<@&" + client.settings.get(message.guild.id, `djroles`)[i] + "> | " - } - - return functions.embedbuilder(client, "null", message, config.colors.yes, "DJ-ROLE", `✅ Defina com sucesso o DJ ROLE para ${role} - Todas as funções de DJ: - > ${leftb}`) - } -}; diff --git a/commands/setup/bug.js b/commands/setup/bug.js deleted file mode 100644 index d6949a7..0000000 --- a/commands/setup/bug.js +++ /dev/null @@ -1,25 +0,0 @@ -const { MessageEmbed } = require("discord.js"); -module.exports = { - name: "bug", -category: "setup", -run : async function(client, message, args) { - - if (!args[0]) return message.reply("Por favor especifique o bug."); - - args = args.join(" "); - message.reply("Obrigado por enviar o bug!"); - - - let embed = new MessageEmbed() - .setTitle(`Bugs relatados`) - .addDescription(`**Reportado por:** ${message.author.username}#${message.author.discriminator} - **UserID:** ${message.author.id} - **Bugs:** ${args} - **No servidor**: ${guild.name} ${guild.id}`) - .setColor("#00bfff"); - - - client.channels.cache.get('865255179788222485').send(embed) - - } -}; \ No newline at end of file diff --git a/commands/setup/disabledj.js b/commands/setup/disabledj.js deleted file mode 100644 index caf32fd..0000000 --- a/commands/setup/disabledj.js +++ /dev/null @@ -1,43 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "removedj", - aliases: ["deletedj"], - category: "setup", - description: "Vamos EXCLUIR um PAPEL DJ", - useage: "removedj @ROLE", - run: async (client, message, args) => { - if (!message.member.hasPermission("ADMINISTRATOR")) return functions.embedbuilder(client, "null", message, config.colors.no, "DISABLE-DJ-ROLES-SETUP ",` ❌ Você não tem permissão para este comando!`) - let role = message.mentions.roles.first(); - if (!role) return functions.embedbuilder(client, "null", message, config.colors.no, `ERROR`, `Adicione um canal via ping, por exemplo: #channel!`) - try { - message.guild.roles.cache.get(role.id) - } catch { - return functions.embedbuilder(client, "null", message, config.colors.no, `ERROR`, `Parece que o canal não existe neste servidor!`) - } - - if (!client.settings.get(message.guild.id, `djroles`).includes(role.id)) return functions.embedbuilder(client, "null", message, config.colors.no, `ERROR`, `Esta função já é DJ-ROLE!`) - message.react("✅"); - client.settings.remove(message.guild.id, role.id, `djroles`); - - let leftb = ""; - if (client.settings.get(message.guild.id, `djroles`).join("") === "") leftb = "nenhum papel de Dj, também conhecido como Todos os usuários são Djs" - else - for (let i = 0; i < client.settings.get(message.guild.id, `djroles`).length; i++) { - leftb += "<@&" + client.settings.get(message.guild.id, `djroles`)[i] + "> | " - } - return functions.embedbuilder(client, "null", message, config.colors.yes, "DJ-ROLES-SETUP", `✅ Excluiu com sucesso ${role} deste Server-DJ-Roles - deixou DJ-ROLES: - > ${leftb} - `) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/setup/prefix.js b/commands/setup/prefix.js deleted file mode 100644 index 01c4ae4..0000000 --- a/commands/setup/prefix.js +++ /dev/null @@ -1,24 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "prefix", - aliases: ["prefixo"], - category: "setup", - description: "Vamos mudar o prefixo do BOT", - useage: "prefix ", - run: async (client, message, args) => { - //command - let prefix = client.settings.get(message.guild.id, `prefix`); - if (prefix === null) prefix = config.prefix; - message.react("✅"); - if (!args[0]) return functions.embedbuilder(client, "null", message, "#00BFFF", `Prefixo atual: \`${prefix}\``, `Forneça um novo prefixo`) - if (!message.member.hasPermission("ADMINISTRATOR")) return functions.embedbuilder(client, "null", message, config.colors.no, "prefix", `❌ Você não tem permissão para este comando!`) - - if (args[1]) return functions.embedbuilder(client, "null", message, config.colors.no, "prefix", `❌ O prefixo não pode ter dois espaços`) - if (args[0].length > 5) return functions.embedbuilder(client, "null", message, config.colors.no, "ERROR", `❌ O prefixo não pode ser mais longo do que "5"`) - - client.settings.set(message.guild.id, args[0], `prefix`); - - return functions.embedbuilder(client, "null", message, config.colors.yes, "prefixo", `✅ Definido com sucesso o novo prefixo para **\`${args[0]}\`**`) - } -}; diff --git a/commands/setup/removebotchat.js b/commands/setup/removebotchat.js deleted file mode 100644 index 833b376..0000000 --- a/commands/setup/removebotchat.js +++ /dev/null @@ -1,43 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "removebotchat", - aliases: ["removechat"], - category: "setup", - description: "Vamos deletar o canal para os comandos do bot", - useage: "removebotchat #Chat", - run: async (client, message, args) => { - if (!message.member.hasPermission("ADMINISTRATOR")) return functions.embedbuilder(client, "null", message, config.colors.no, "DISABLE-BOT-CHAT-SETUP", `❌ Você não tem permissão para este comando!`) - let channel = message.mentions.channels.first(); - if (!channel) return functions.embedbuilder(client, "null", message, config.colors.no, `ERROR`, `Adicione um canal via ping, por exemplo: #channel!`) - try { - message.guild.roles.cache.get(channel.id) - } catch { - return functions.embedbuilder(client, "null", message, config.colors.no, `ERROR`, `Parece que o Canal não existe neste servidor!`) - } - - if (!client.settings.get(message.guild.id, `botchannel`).includes(channel.id)) return functions.embedbuilder(client, "null", message, config.colors.no, `ERROR`, `Este canal não está na configuração do canal do bot!`) - message.react("✅"); - client.settings.remove(message.guild.id, channel.id, `botchannel`); - - let leftb = ""; - if (client.settings.get(message.guild.id, `botchannel`).join("") === "") leftb = "nenhum canal, também conhecido como todos os canais são canais bot" - else - for (let i = 0; i < client.settings.get(message.guild.id, `botchannel`).length; i++) { - leftb += "<#" + client.settings.get(message.guild.id, `botchannel`)[i] + "> | " - } - return functions.embedbuilder(client, "null", message, config.colors.yes, "BOT-CHAT-SETUP", `✅ Excluído com sucesso ${channel} deste Server-Bot-Chats - deixou bate-papos de bot: - > ${leftb} - `) - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/setup/reset.js b/commands/setup/reset.js deleted file mode 100644 index e31dbb4..0000000 --- a/commands/setup/reset.js +++ /dev/null @@ -1,58 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "reset", - aliases: ["hardreset"], - category: "setup", - description: "Redefine / exclui todas as configurações, bem como o prefixo!", - usage: "reset", - run: async (client, message, args) => { - if (message.member.guild.owner.id !== message.author.id) return functions.embedbuilder(client, "null", message, config.colors.no, "RESET", `❌ Você não tem permissão para este comando! * Apenas o proprietário do servidor*`) - let themsg = await message.reply("Tem certeza de que deseja redefinir todas as configurações? || (* Responder com: * ** __ `sim`__**)||") - const filter = m => m.author.id === message.author.id; - themsg.channel.awaitMessages(filter, { - max: 1, - time: 600000, - errors: ['time'] - }) - .then(collected => { - if (collected === "sim") { - client.settings.delete(message.guild.id, "prefix"); - - client.settings.delete(message.guild.id, "djroles"); - - client.settings.delete(message.guild.id, "playingembed"); - - client.settings.delete(message.guild.id, "playingchannel"); - - client.settings.delete(message.guild.id, "botchannel"); - - client.custom.delete(message.guild.id, "playlists"); - - client.custom.ensure(message.guild.id, { - playlists: [], - }); - client.settings.ensure(message.guild.id, { - prefix: config.prefix, - djroles: [], - playingembed: "", - playingchannel: "", - botchannel: [], - }); - message.reply("REINICIALIZEU TUDO COM SUCESSO") - } - }).catch(error => { - message.reply("CANCELADO CAUSA: NÃO É A PALAVRA CERTA / TEMPO ESGOTADO!") - }) - - } -}; -/** - * @INFO - * Bot Coded by Tomato#6966 | https://github.com/Tomato6966/discord-js-lavalink-Music-Bot-erela-js - * @INFO - * Work for Milrato Development | https://milrato.eu - * @INFO - * Please mention Him / Milrato Development, when using this Code! - * @INFO - */ diff --git a/commands/utilidade/addemoji.js b/commands/utilidade/addemoji.js deleted file mode 100644 index 406a294..0000000 --- a/commands/utilidade/addemoji.js +++ /dev/null @@ -1,110 +0,0 @@ -const Discord = require('discord.js'); - -module.exports = { - name: "addemoji", - aliases:["adicionaremoji"], - category:"utilidade", - run: async (client, message, args) => { - -function converter(bytes) { - let formatos = ['B', 'KB', 'MB', 'GB', 'TB']; - if (bytes == 0) return '0B'; - let i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024))); - if(i <= 2) return Math.round(bytes / Math.pow(1024, i), 2) + formatos[i]; - if((bytes / Math.pow(1024, i)).toFixed(3).includes(".00")) return Math.round(bytes / Math.pow(1024, i), 2) + formatos[i]; - if((bytes / Math.pow(1024, i)).toFixed(3).includes(".0")) return ((bytes / Math.pow(1024, i)).toFixed(3) + formatos[i]).replace("0","") - return (bytes / Math.pow(1024, i)).toFixed(3) + formatos[i]; -} - -isEmoji = function(emoji) { -const e = Discord.Util.parseEmoji(emoji) - -if (e.id === null) { -return { - name: e.name, - id: e.id, - animated: e.animated, - response: false - } -} else { -return { - name: e.name, - id: e.id, - animated: e.animated, - response: true - } -} -} - -if(!['571375744635109394'].includes(message.author.id) && !message.member.permissions.has('MANAGE_EMOJIS')) { - return message.channel.send('**❌ | Você não pode usar este comando**\n**Permissão necessária: [\`GERENCIAR_EMOJIS\`]**') - } - if(!message.guild.me.permissions.has('MANAGE_EMOJIS')) { - return message.channel.send('**❌ | Eu não posso usar este comando**\n**Permissão necessária: [\`GERENCIAR_EMOJIS\`]**') - } - -let link = message.content.match("https://") -let nome = "" -let emoji = args[0] -if (!link) { - if (!emoji && !message.attachments.first() && !link) return message.channel.send("**❌ | Você precisa especificar um (link) um (emoji) uma (imagem) ou (random)**"); - -if(emoji === "random"){ - -let al = client.emojis.cache.random() -const emoji3 = await message.guild.emojis.create(al.url, al.name); - -const embed2 = new Discord.MessageEmbed() -.setTitle("✅ | Sucesso") -.setColor("#8b6eff") -.setDescription(`**O usuário ${message.author} adicionou o emoji**\n**[(${emoji3}) | (${emoji3.id})] ao servidor com o nome:** \`${emoji3.name}\``) - return message.channel.send(embed2) -} - - if (message.attachments.first()) { -link = message.attachments.first().url - -nome = args[0] -if(!nome) return message.channel.send("**❌ | (imagem) você esqueceu de especificar um nome**") - -let treco = message.attachments.first().size -let peso = converter(treco) -if(treco > 256000) return message.channel.send(`**❌ | Esta (imagem) pesa \`${peso}\` e necessário ser menor que \`256KB\`**`) - -} else if (isEmoji(args[0]).response === true) { -link = emoji.url; -link = `https://cdn.discordapp.com/emojis/${isEmoji(args[0]).id}.${isEmoji(args[0]).animated ? "gif" : "png"}?v=1&size=64` - -nome = args.slice(1).join("") -if(!nome) return message.channel.send("**❌ | (emoji) você esqueceu de especificar um nome**") - -} else { -return message.channel.send("**❌ | Você precisa especificar um (link) um (emoji) uma (imagem) ou (random)**"); -} -} else if (link && !message.attachments.first() && isEmoji(args[0]).response === false) { -link = args[0] -nome = args.slice(1).join("") -if(!nome) return message.channel.send("**❌ | (link) você esqueceu de especificar um nome**") - -const a = new Discord.MessageAttachment(link, "foto.gif") -message.channel.send(a).then((s) => { -if(s.attachments.first().size >= 256000) { -message.channel.send("**❌ | Este (link) pesa `"+converter(s.attachments.first().size)+"` e necessário ser menor que \`256KB\`**") -} -size = s.attachments.first().size -s.delete() -}) - -if(!link.endsWith('.gif') && !link.endsWith('.png') && !link.endsWith('.jpg') && !link.endsWith('.webp') && !link.endsWith('.jpeg')) return message.channel.send("**❌ | A sua imagem/link deve terminar com**\n**[**\`.gif\`**|**\`.png\`**|**\`.jpg\`**|**\`.webp\`**]**") -} - -const emoji2 = await message.guild.emojis.create(link, nome); - -const embed = new Discord.MessageEmbed() -.setTitle("✅ | Sucesso") -.setColor("#8b6eff") -.setDescription(`**O usuário ${message.author} adicionou o emoji**\n**[(${emoji2}) | (${emoji2.id})] ao servidor com o nome:** \`${nome}\``) - message.channel.send(embed) -} -} - diff --git a/commands/utilidade/afk.js b/commands/utilidade/afk.js deleted file mode 100644 index 2b8c99f..0000000 --- a/commands/utilidade/afk.js +++ /dev/null @@ -1,21 +0,0 @@ -const db = require('quick.db') -const { MessageEmbed } = require('discord.js') - -module.exports = { - name : 'afk', - run : async(client, message, args) => { - const roleColor = - message.guild.me.displayHexColor === "#000000" - ? "#ffffff" - : message.guild.me.displayHexColor; - - const content = args.join(" ") || "Nenhum motivo fornecido." - await db.set(`afk-${message.author.id}+${message.guild.id}`, content) - - const embed = new MessageEmbed() - .setDescription(`Você foi definido como AFK.\n**Motivo:** ${content}`) - .setColor(roleColor) - .setAuthor(message.author.tag, message.author.displayAvatarURL({ dynamic : true })) - message.channel.send(embed) - } -} \ No newline at end of file diff --git a/commands/utilidade/anime.js b/commands/utilidade/anime.js deleted file mode 100644 index 7e9c68f..0000000 --- a/commands/utilidade/anime.js +++ /dev/null @@ -1,58 +0,0 @@ -const Discord = require("discord.js"); -const { MessageEmbed } = require("discord.js"); -const Color = `#00FF7F`; -const Scraper = require("mal-scraper"); - -module.exports = { - name: "anime", - category: "utilidade", - description: "Informações sobre Anime!", - usage: "anime ", - run: async (client, message, args) => { - - //Start - - let Text = args.join(" "); - - if (!Text) return message.channel.send(`Por favor, diga o nome do anime!`); - - if (Text.length > 200) return message.channel.send(`Limite de Texto - 200`); - - let Replaced = Text.replace(/ +/g, " "); - - let Anime; - - let Embed; - - try { - - Anime = await Scraper.getInfoFromName(Replaced); - - if (!Anime.genres[0] || Anime.genres[0] === null) Anime.genres[0] = "None"; - - Embed = new MessageEmbed() - .setColor(Color || "#00FF7F") - .setURL(Anime.url) - .setTitle(Anime.title) - .setDescription(Anime.synopsis) - .addField(`Tipo`, Anime.type, true) - .addField(`Status`, Anime.status, true) - .addField(`Estreou`, Anime.premiered, true) - .addField(`Episódios`, Anime.episodes, true) - .addField(`Duração`, Anime.duration, true) - .addField(`Popularidade`, Anime.popularity, true) - .addField(`Generos`, Anime.genres.join(", ")) - .setThumbnail(Anime.picture) - .setFooter(`Pontuação - ${Anime.score}`) - .setTimestamp(); - - } catch (error) { - return message.channel.send(`Nenhum anime encontrado!`); - }; - - return message.channel.send(Embed); - - //End - - } -}; \ No newline at end of file diff --git a/commands/utilidade/anunciar.js b/commands/utilidade/anunciar.js deleted file mode 100644 index a4d0e06..0000000 --- a/commands/utilidade/anunciar.js +++ /dev/null @@ -1,23 +0,0 @@ -const Discord = require ('discord.js') -const { MessageEmbed } = require('discord.js') - -module.exports = { -name: "anunciar", -aliases: ["announce", "a"], -category: "Utility", -usage: "embed ", -description: "Retorna o texto fornecido em embed", -run: async(client, message, args) => { - if(!message.member.hasPermission("ADMINISTRATION")) return message.channel.send(`VOCÊ NÃO TEM PERMISSÃO`) - await message.delete() - let say = message.content.split(" ").slice(1).join(" ") - if(!say) return message.channel.send(`❌ | `+"Não consigo repetir mensagem em branco") - let embed = new MessageEmbed() -.setAuthor(message.author.username, message.author.avatarURL()) - .setDescription(`${say}`) - .setColor("#00bfff") -.setFooter(` ${message.guild}`) -.setTimestamp() - message.channel.send(embed) -} -} \ No newline at end of file diff --git a/commands/utilidade/avatar.js b/commands/utilidade/avatar.js deleted file mode 100644 index 5fe524f..0000000 --- a/commands/utilidade/avatar.js +++ /dev/null @@ -1,36 +0,0 @@ -const { Client, Message, MessageEmbed } = require('discord.js') -const search = require("discord.js-search"); - - -module.exports = { - name: 'avatar', - aliases: ['av'], - category:"utilidade", - - /** - * @param {Client} client - * @param {Message} message - * @param {String[]} args - */ - run: async(client, message, args) => { - let query = args.join(" "); - - if (!query) { - const authorAvatar = new MessageEmbed() - .setTitle(`Seu avatar:`) - .setColor('#00bfff') - .setImage(message.author.displayAvatarURL({ dynamic: true, size: 4096 })) - .setDescription(`[jpeg](${message.author.displayAvatarURL({ dynamic: true, format: 'jpeg'})}) \`|\` [gif](${message.author.displayAvatarURL({ dynamic: true, format: 'gif'})}) \`|\` [jpg](${message.author.displayAvatarURL({ dynamic: true, format: 'jpg'})}) \`|\` [png](${message.author.displayAvatarURL({ dynamic: true, format: 'png'})}) \`|\` [webp](${message.author.displayAvatarURL({ dynamic: true, format: 'webp'})})`) - - return message.channel.send(authorAvatar) - } - search.searchMember(message, query).then(x => { - const embed = new MessageEmbed() - .setTitle(`Avatar de ${x.user.tag}`) - .setColor('#00bfff') - .setImage(x.user.displayAvatarURL({ size: 4096, dynamic: true })) - message.reply({ embed: embed, allowedMentions: { repliedUser: true } }); - - }) - } -} \ No newline at end of file diff --git a/commands/utilidade/calculadora.js b/commands/utilidade/calculadora.js deleted file mode 100644 index 2c9448d..0000000 --- a/commands/utilidade/calculadora.js +++ /dev/null @@ -1,35 +0,0 @@ -const math = require('mathjs'); - -const Discord = require('discord.js'); - -module.exports = { - name: "calculadora", - aliases: ['calc', 'calcular', 'mat'], - category:"utilidade", - run:async (client, message, args) => { - - if(!args[0]) return message.channel.send('Por favor digite algo!'); - - let resp; - - try { - resp = math.evaluate(args.join(" ")) - } catch (e) { - return message.channel.send('Por favor digite um número válido!') - } - let error = new Discord.MessageEmbed() - .setColor('0079d8') - .setTitle(':(') - .setDescription('\n\n Seu PC teve um problema e precisa ser reiniciado. Estamos apenas coletando algumas informações de erro e, em seguida, reiniciaremos para você.') - .setImage('https://upload.wikimedia.org/wikipedia/commons/thumb/5/56/Bsodwindows10.png/1200px-Bsodwindows10.png') - if(args == 'NaN') return message.channel.send(error) - const embed = new Discord.MessageEmbed() - .setColor('GREEN') - .setTitle('Calculadora') - .addField('Questão', `\`\`\`css\n${args.join(' ')}\`\`\``) - .addField('Resposta', `\`\`\`css\n${resp}\`\`\``) - - message.channel.send(embed); - - } -} \ No newline at end of file diff --git a/commands/utilidade/clima.js b/commands/utilidade/clima.js deleted file mode 100644 index 55ec1d2..0000000 --- a/commands/utilidade/clima.js +++ /dev/null @@ -1,86 +0,0 @@ -var weather = require('weather-js'); -const Discord = require('discord.js') -const { Menu } = require('discord.js-menu') -const { Client, MessageEmbed } = require('discord.js') - - -module.exports = { - name:"clima", - run:async (client, message, args, default_prefix) => { - if (!args[0]) { - return message.quote(`você precisa inserir uma localidade para isso. Exemplo: \`${prefix}clima Alvorada do Sul\``) - } else { - try { - weather.find({ search: args.join(' '), degreeType: 'C' }, function (err, result) { - if (result[0] != undefined) { - var current = result[0].current; - var forecast = result[0].forecast; - var location = result[0].location; - for (i = 0; i < 5; i++) { - if (forecast[i].day == 'Monday') { - forecast[i].day = 'Segunda' - } - if (forecast[i].day == 'Tuesday') { - forecast[i].day = 'Terça' - } - if (forecast[i].day == 'Wednesday') { - forecast[i].day = 'Quarta' - } - if (forecast[i].day == 'Thursday') { - forecast[i].day = 'Quinta' - } - if (forecast[i].day == 'Friday') { - forecast[i].day = 'Sexta' - } - if (forecast[i].day == 'Saturday') { - forecast[i].day = 'Sábado' - } - if (forecast[i].day == 'Sunday') { - forecast[i].day = 'Domingo' - } - if (forecast[i].precip == '') { - forecast[i].precip = 0 - } - } - let helpMenu = new Menu(message.channel, message.author.id, [ - { - name: 'main', - content: new MessageEmbed({ - title: `Clima atual em: ${location.name}`, - description: `**Dia:** ${current.date} (Hoje)\n**Temperatura:** ${current.temperature} Cº\n**Sensação:** ${current.feelslike} Cº\n**Vento:** ${current.winddisplay}\n**Umidade:** ${current.humidity} %`, - footer: { - text: `Reaja com (▶) para ver a previsão da semana` - } - }), - reactions: { - '⏹': 'delete', - '▶': 'extra' - } - }, - { - name: 'extra', - content: new MessageEmbed({ - title: `Clima semanal em: ${location.name}`, - description: `**Dia:** ${forecast[0].date} (${forecast[0].day})\n**Max:** ${forecast[0].high} Cº\n**Min:** ${forecast[0].low} Cº\n**Chuva:** ${forecast[0].precip} %\n\n**Dia:** ${forecast[1].date} (${forecast[1].day})\n**Max:** ${forecast[1].high} Cº\n**Min:** ${forecast[1].low} Cº\n**Chuva:** ${forecast[1].precip} %\n\n**Dia:** ${forecast[2].date} (${forecast[2].day})\n**Max:** ${forecast[2].high} Cº\n**Min:** ${forecast[2].low} Cº\n**Chuva:** ${forecast[2].precip} %\n\n**Dia:** ${forecast[3].date} (${forecast[3].day})\n**Max:** ${forecast[3].high} Cº\n**Min:** ${forecast[3].low} Cº\n**Chuva:** ${forecast[3].precip} %\n\n**Dia:** ${forecast[4].date} (${forecast[4].day})\n**Max:** ${forecast[4].high} Cº\n**Min:** ${forecast[4].low} Cº\n**Chuva:** ${forecast[4].precip} %`, - color: '#00BFFF', - footer: { - text: `Reaja com (◀) para ver a previsão de hoje` - } - }), - reactions: { - '◀': 'first' - } - } - ], 300000) - helpMenu.start() - - } else { - message.channel.send('Esta localização não está em meu alcance! Me desculpe.') - } - }) - } catch (err) { - message.channel.send(`Occoreu um erro: \`${err}\``) - } - } -} -} \ No newline at end of file diff --git a/commands/utilidade/convite.js b/commands/utilidade/convite.js deleted file mode 100644 index 57baa27..0000000 --- a/commands/utilidade/convite.js +++ /dev/null @@ -1,22 +0,0 @@ -const { MessageEmbed } = require("discord.js"); - -module.exports = { - name: "convite", - category: "utilidade", - description: "Para adicionar / convidar o bot para o seu servidor", - usage: "convite", - aliases: ["con"], - - run: async function (client, message, args) { - - //defina o ID de permissões aqui (https://discordapi.com/permissions.html) - var permissions = 37080128; - - let invite = new MessageEmbed() - .setTitle(`Convite ${client.user.username}`) - .setDescription(`Me quer no seu servidor? Me convide hoje! \n\n [Link do convite](https://discord.com/oauth2/authorize?client_id=${client.user.id}&permissions=${permissions}&scope=bot)`) - .setURL(`https://discord.com/oauth2/authorize?client_id=${client.user.id}&permissions=${permissions}&scope=bot`) - .setColor("RANDOM") - return message.channel.send(invite); - }, -}; \ No newline at end of file diff --git a/commands/utilidade/cronometro.js b/commands/utilidade/cronometro.js deleted file mode 100644 index 938733f..0000000 --- a/commands/utilidade/cronometro.js +++ /dev/null @@ -1,30 +0,0 @@ -const Discord = require('discord.js'); - -module.exports = { - name:"cronometro", - category: "utilidade", - run: async( client, message, args) =>{ - let time = args[0] - if(!time) return message.reply("how minutes \ hours wiil you set your alarm") - if(ms(time) > ms("1w")) return message.reply("you can't set your alarm bigger than 1 week") - - let alert = args.slice(1).join(" ") - if(!alert) return message.channel.send("Você têm que especificar o alerta!") - let embed = new Discord.MessageEmbed() - .setAuthor(`${message.author.tag} Alarme` , message.author.displayAvatarURL()) - .setColor("#00bfff") - .addField("Tempo:" , `\`${time}\`` , true) - .addField(" Alerta:" , `\`${alert}\`` , true) - message.channel.send(embed) - setTimeout(() => { - let time = new Discord.MessageEmbed() - .setAuthor(`${message.author.tag} Your alarm has been ended` , message.author.displayAvatarURL()) - .setColor("#00bfff") - .addField("Tempo:" , `\`${time}\`` , true) - .addField(" Alerta:" , `\`${alert}\`` , true) - .addField("Alerta iniciado em: " , `\`${message.guild.name}\``) - message.author.send(time) - - }, ms(time)) -} -} \ No newline at end of file diff --git a/commands/utilidade/elemento.js b/commands/utilidade/elemento.js deleted file mode 100644 index d4c0066..0000000 --- a/commands/utilidade/elemento.js +++ /dev/null @@ -1,62 +0,0 @@ -const { MessageEmbed } = require('discord.js'); -const request = require('request'); - -// Too fix the Literal String (My eyes get irritated) -const { stripIndents } = require('common-tags'); - -module.exports = { - name: 'elemento', - description: 'Search about elements from the periodic table', - guildOnly: true, - aliases: ['e'], - usage: ['name of the element'], - example: 'Hydrogen', - cooldown: 2, - run:async (client, message, args) => { - let element = args.join(" "); - if(!element) return message.channel.send("No element provided!"); - const url = 'https://chemistrydata.herokuapp.com/elements/' + element; - //const result = `${url}${element.split(/ +/g).join('')}`; - - request({url: url, json: true}, (err, res, body) => { - if (typeof body.symbol == 'undefined') return message.channel.send("Can't find that element!") - - let embed = new RichEmbed() - .setTitle(`${element.slice(0,1).toUpperCase()}${element.slice(1)}`) - .setColor('#7289da') - //.setThumbnail(body.spectral_img) - .setDescription(body.summary) - .addField("Basics", stripIndents` - **Number: **${body.number} - **Symbol: **${body.symbol} - **Appearance: **${body.appearance} - **Atomic Mass: **${body.atomic_mass} - **Boil: **${body.boil} - **Category: **${body.category} - **Color: **${body.color} - **Density: **${body.density} - **Discovered By: **${body.discovered_by} - **Named By: **${body.named_by} - `) - .addField("Data", stripIndents` - **Melt: **${body.melt} - **Molar Heat: **${body.molar_heat} - **Period: **${body.period} - **Phase: **${body.phase} - `) - .addField("Scientific", stripIndents` - **XPos: **${body.xpos} - **YPos: **${body.ypos} - **Shells: **${body.shells} - **Electron Configuration: **${body.electron_configuration} - **Electron Affinity: **${body.electron_affinity} - **Electronegativity Pauling: **${body.electronegativity_pauling} - **Ionization Energies: **${body.ionization_energies} - `) - .setFooter(`Source: ${body.source}`) - .setTimestamp(new Date()) - - message.channel.send(embed) - }); - }, -}; \ No newline at end of file diff --git a/commands/utilidade/emojis.js b/commands/utilidade/emojis.js deleted file mode 100644 index a041842..0000000 --- a/commands/utilidade/emojis.js +++ /dev/null @@ -1,17 +0,0 @@ -const { MessageEmbed } = require('discord.js'); - -module.exports = { - name: 'emojis', - description: 'View all server emojis', - guildOnly: true, - usage: ' ', - cooldown: 3, - run:async (client, message, args) => { - const emojiList = message.guild.emojis.cache.first(e=>e.toString()).join(" "); - let embed = new MessageEmbed() - .setColor("#00bfff") - .setDescription(emojiList) - message.channel.send(embed) - if (!emojiList) return message.channel.send("Nenhum emojis personalizado no servidor!"); - }, -}; \ No newline at end of file diff --git a/commands/utilidade/help.js b/commands/utilidade/help.js deleted file mode 100644 index ffb7960..0000000 --- a/commands/utilidade/help.js +++ /dev/null @@ -1,384 +0,0 @@ -const prefix = require('../../config.json').prefix; -const Discord = require('discord.js'); -const config = require('../../config.json'); - -module.exports = { - name: 'help', - category:"utilidade", - - run: async (client, message, args) => { - - message.delete(); - - var embedInicial = new Discord.MessageEmbed() - .setDescription( - `**📬ㅤOlá ${ - message.author - }, precisa de ajuda? Aqui estão todos os meus comandos:**` - ) - - .addField( - '**BASSBOOST INFORMAÇÃO DO FILTRO**', - ` - >>> Agora você pode alterar o ganho de seu Bass Boost de \`1\` - \`20\`! Exemplo: \`${prefix}bassboost 10 \` * Faz um Bassboost com ganho de 10db * - ` - ) - .addField('\u200b', '\u200b') - .addField( - '**LISTAS DE REPRODUÇÃO PERSONALIZADOS PRÉ-FEITOS**', - ` - >>> existem várias listas de reprodução personalizadas que você pode reproduzir, cada uma com 75 músicas! - - 1. Charts - 2. Natal - 3. Jazz - 4. Blues - 5. Country - 6. Rock - *mais em breve* -reproduzi-los por \`${prefix}playlist \` - ` - ) - .addField('\u200b', '\u200b') - .addField( - '**ESTAÇÕES DE RADIO**', - ` - >>> existem mais de 200 estações de rádio disponíveis, você pode vê-las digitando \`${prefix}radio \` e reproduzi-los pela rádio \`${prefix} \` - `) - - .addField('\u200b', '\u200b') - - .addField(`<:RolePlay:810231968297517106>ㅤ**AÇÃO**`, `ㅤ`) - .addField(`ㅤ**DIVERSÃO**`, `ㅤ`) - .addField(`<:game:810254416635494400>ㅤ**GAMES**`, `ㅤ`) - .addField(`<:photos:810249979905572864>ㅤ**IMAGEM**`, `ㅤ`) - .addField(`ㅤ**MODERAÇÃO**`, `ㅤ`) - .addField(`<:musica:810233712334995496>ㅤ**MUSICA**`, `ㅤ`) - .addField(`<:nsfw2:810232533462810666>ㅤ**NSFW**`, `ㅤ`) - .addField(`<:utility:810250009894584351>ㅤ**UTILIDADE**`, `ㅤ`) - - .addField('\u200b', '\u200b') - .addField( - '**__BOT DE:__**', - ` - >>> \`KingKiller#1889\` [\`Website\`](https://kingbot.cf) [\`Convite\`](https://discord.com/oauth2/authorize?client_id=794291443454836766&scope=bot&permissions=2102658175) - ` - ) - .addField( - '**__Música - fontes suportadas__**', - ` - >>> \`Youtube\`, \`Spotify\`, \`Soundcloud\`, [\`Mais\`](https://links.musicium.eu), ... - `) - - .setThumbnail(client.user.avatarURL) - .setColor("#00bfff") - .setFooter( - `Requerido por ${message.author.tag}`, - message.author.displayAvatarURL({ dynamic: true }) - ); - - let embed1 = new Discord.MessageEmbed() - .setDescription( - `<:RolePlay:810231968297517106>ㅤ**ACÃO**:\n -• **${config.prefix}abraçar** -• **${config.prefix}aplaudir** -• **${config.prefix}atirar** -• **${config.prefix}beijar** -• **${config.prefix}bye** -• **${config.prefix}cafune** -• **${config.prefix}chorar** -• **${config.prefix}dance** -• **${config.prefix}morder** -• **${config.prefix}morrer** -• **${config.prefix}sad** -• **${config.prefix}soco** -• **${config.prefix}sorrir** -• **${config.prefix}tapa** -• **${config.prefix}timido**` - ) - .setThumbnail(client.user.avatarURL) - .setColor("#00bfff"); - - let embed2 = new Discord.MessageEmbed() - .setDescription( - `ㅤ**DIVERSÃO**:\n -• **${ - config.prefix - }8ball** - Faça uma pergunta para o bot e ele irá responder você da Melhor forma possível. -• **${config.prefix}ascii** - Retorna um texto em formato ascii -• **${config.prefix}binario** - Converta uma palavra para codigo binário -• **${config.prefix}decode** - decodifique um codigo binario -• **${config.prefix}chat** - Converse comigo ^-^ -• **${ - config.prefix - }coinflip** - Gire uma moeda e veja se irá cair cara ou coroa! -• **${config.prefix}ejetar** - ejete alguém da nave - Among Us -• **${config.prefix}emojify** - Retorna um texto em forma de emoji -• **${config.prefix}morse** - codifique ou decodifique um codigo morse -• **${config.prefix}ratewaifu** - vote em sua waifu favorita -• **${config.prefix}say** - você fala e eu repito -• **${ - config.prefix - }ship** - ship um casal ou veja qual a probabilidade de você dar certo com seu crush -• **${config.prefix}vaporwave** - Converta um texto em vaporwave -` - ) - - .setThumbnail(client.user.avatarURL) - .setColor("#00bfff"); - - let embed3 = new Discord.MessageEmbed() - .setDescription( - `<:game:810254416635494400>ㅤ**GAMES**:\n -• **${config.prefix}aki** - Jogue uma partida com o gênio -• **${ - config.prefix - }fight** - lute com alguém do servidor e veja quem sai vitorioso -• **${config.prefix}forca** - Jogue uma partida de jogo da forca -• **${config.prefix}ppt** - "Pedra papel tesoura/ Jogue jokenpô com o bot -• **${ - config.prefix - }velha** - Jogue uma partida de jogo da velha com um membro do servidor` - ) - .setThumbnail(client.user.avatarURL) - .setColor("#00bfff"); - - let embed4 = new Discord.MessageEmbed() - .setDescription( - `<:photos:810249979905572864>ㅤ**IMAGEM**:\n -• **${config.prefix}bob** - Coloque uma frase dentro do meme Bob Esponja -• **${ - config.prefix - }changemymind** - Coloque sua frase dentro de uma imagem Change my mind -• **${config.prefix}clyde** Faça o bot oficial do discord repetir sua frase -• **${config.prefix}firstword** - Faça o bebe falar suas primeiras palavras -• **${config.prefix}tgif** - Procure um gif no Tenor -• **${config.prefix}laranjo** - Uma foto do laranjo é gerado com asua frase -• **${config.prefix}meme** - Gera imagens com memes aleátorios -• **${config.prefix}memevideo** - Videos de memes aleátorios -• **${ - config.prefix - }monkey** - Gera uma imagem do macaquinho "suspeito" com sua frase personalizada -• **${ - config.prefix - }pablo** - Gera uma imagem do Pablo Escobar solitario com sua frase personalizada -• **${ - config.prefix - }stonks** - Gera uma imagem stonks com sua frase personalizada -• **${config.prefix}supreme** - Converta sua frase em forma da logo SUPREME -• **${config.prefix}trump** - O que você quer que o ex presidente twitte hoje? -• **${config.prefix}wallpaper** - obtenha uma imagem neko -• **${config.prefix}wasted** - Retornna uma imagem wasted!` - ) - .setThumbnail(client.user.avatarURL) - .setColor("#00bfff"); - - let embed5 = new Discord.MessageEmbed() - .setDescription( - `ㅤ**MODERAÇÃO**:\n -• **${config.prefix}addcargo** - Adicione um cargo para um membro do servidor -• **${config.prefix}removecargo** - Retira um cargo do usuario mencionado -• **${config.prefix}adcmd** - adicionar comandos personalizados de guilda -• **${config.prefix}delcmd** - Exclua o comando personalizado -• **${config.prefix}ban** - Banir um usuario que tenha quebrado as regras -• **${config.prefix}unban** - Desbanir aquele usuário que você baniu -• **${config.prefix}chutar** - Expulse qualquer membro do servidor -• **${config.prefix}limpar** - Apague até 99 mensagens de um canal -• **${config.prefix}lock** - Bloqueie um canal -• **${config.prefix}unlock** - Desbloquie o canal bloqueado -• **${ - config.prefix - }mute** - Silencie um membro do servidor ideal para aqueles que gostam de quebrar as regras -• **${config.prefix}unmute** - Desmutar um membro do servidor -• **${ - config.prefix - }tempmute** - Defina o tempo que um membro vai permanecer mutado -• **${config.prefix}prefix** - Mude meu prefixo neste servidor -• **${config.prefix}slowmode** - Permite definir o modo lento no canal -• **${config.prefix}warn** - Advertir quem não obedece às regras -• **${config.prefix}warnings** - Veja os avisos seus ou da pessoa mencionada -• **${config.prefix}resetwarns** - Redefinir avisos da pessoa mencionada` - ) - .setThumbnail(client.user.avatarURL) - .setColor("#00bfff"); - - let embed6 = new Discord.MessageEmbed() - .setDescription( - `<:musica:810233712334995496>ㅤ**MUSICA**:\n -• **${config.prefix}aleatorio** - Colocar a fila no aleatorio -• **${ - config.prefix - }fila** - Mostra a fila de músicas e o que está tocando agora. -• **${config.prefix}filtro** - Definir áudio - efeitos -• **${config.prefix}leave** - Saia do canal atual -• **${config.prefix}letra** - Obtenha a letra da música que está tocando -• **${config.prefix}loop** - Alternar loop de música -• **${config.prefix}mover** - Mova as músicas na fila. -• **${config.prefix}nowplaying** - Mostrar música atual -• **${config.prefix}pause** - Pause a música que está tocando -• **${config.prefix}play** - Toca música do YouTube / Stream -• **${config.prefix}procurar** - Pesquise e selecione vídeos para reproduzir -• **${config.prefix}radio** - Ouça uma estação de radio -• **${config.prefix}remover** - Remover música da fila -• **${config.prefix}resumo** - Retomar a música atual -• **${config.prefix}skip** - Pular a música que está tocando -• **${config.prefix}skipto** - Pule para o número da fila selecionado -• **${config.prefix}stop** - Para a música -• **${config.prefix}volume** - "Alterar o volume atual no servidor` - ) - .setThumbnail(client.user.avatarURL) - .setColor("#00bfff"); - - let embed7 = new Discord.MessageEmbed() - .setDescription( - `<:nsfw2:810232533462810666>ㅤ**NSFW**:\n -• **${config.prefix}4k** -• **${config.prefix}anal** -• **${config.prefix}ass** -• **${config.prefix}gif** -• **${config.prefix}hentai** -• **${config.prefix}hentaigif** -• **${config.prefix}holo** -• **${config.prefix}lewd** -• **${config.prefix}neko** -• **${config.prefix}pussy** -• **${config.prefix}rule34** -• **${config.prefix}thigh**` - ) - .setThumbnail(client.user.avatarURL) - .setColor("#00bfff"); - - let embed8 = new Discord.MessageEmbed() - .setDescription( - `<:utility:810250009894584351>ㅤ**UTILIDADE**:\n -• **${config.prefix}anime** - Informações sobre Animes! -• **baixar**- Agora você pode fazer o download de um video do youtube e o bot retorna ele em formato mp3 use| baixar + link_do_video -• **${config.prefix}anunciar** - Faça um anuncio em seu servidor -• **${config.prefix}avatar** - Exibe o seu avatar ou de um outro usuário -• **${config.prefix}calculadora** - Resolva um calculo matematico -• **${config.prefix}clima** - Veja o clima de qualquer lugar do mundo -• **${ - config.prefix - }convite** - Para me adicionar / convidar o bot para o seu servidor -• **${ - config.prefix - }covid** - Receba atualizações de todo o mundo dos casos de covid 19 -• **${config.prefix}emoji** - Receba uma lista de tos os emojis do seu servidor -• **${config.prefix}idemoji** - Pegue um o ID de uma figurinha do seu servidor -• **${config.prefix}help** - Mostra todos os comandos do bot disponíveis. -• **${config.prefix}imdb** - Obtenha informações sobre séries e filmes -• **${config.prefix}info** - Veja as informações detalhadas do bot -• **${config.prefix}moeda** - Veja o valor do real nas principais moedas -• **${config.prefix}ping** - Obter ping do bot -• **${config.prefix}qrcode** - Faça um QR Code de um link -• **${ - config.prefix - }serveravatar** - Retorna o logo do servidor sendo possivel fazer o download do mesmo -• **${config.prefix}serverinfo** - Receba as informações do seu servidor -• **${ - config.prefix - }sugerir** - Enviar uma sugestão para o seu canal de sugestões -• **${config.prefix}tradutor** - Traduza uma frase ou um texto para o seu idioma -• **${ - config.prefix - }userinfo** - Obtenha estatísticas avançadas de determinada pessoa ou de você mesmo` - ) - - .setThumbnail(client.user.avatarURL) - .setColor("#00bfff"); - - message.channel.send(embedInicial).then(async msg => { - await msg.react('810254382549565530'); - await msg.react('810231968297517106'); - await msg.react('810254327372316713'); - await msg.react('810254416635494400'); - await msg.react('810249979905572864'); - await msg.react('810250044888317952'); - await msg.react('810233712334995496'); - await msg.react('810232533462810666'); - await msg.react('810250009894584351'); - - const inicio = msg.createReactionCollector( - (r, u) => - r.emoji.id === '810254382549565530' && u.id === message.author.id, - { time: 60000 } - ); - const aca = msg.createReactionCollector( - (r, u) => - r.emoji.id === '810231968297517106' && u.id === message.author.id, - { time: 120000 } - ); - const diver = msg.createReactionCollector( - (r, u) => - r.emoji.id === '810254327372316713' && u.id === message.author.id, - { time: 120000 } - ); - const game = msg.createReactionCollector( - (r, u) => - r.emoji.id === '810254416635494400' && u.id === message.author.id, - { time: 120000 } - ); - const image = msg.createReactionCollector( - (r, u) => - r.emoji.id === '810249979905572864' && u.id === message.author.id, - { time: 120000 } - ); - const mod = msg.createReactionCollector( - (r, u) => - r.emoji.id === '810250044888317952' && u.id === message.author.id, - { time: 120000 } - ); - const music = msg.createReactionCollector( - (r, u) => - r.emoji.id === '810233712334995496' && u.id === message.author.id, - { time: 120000 } - ); - const nsfw = msg.createReactionCollector( - (r, u) => - r.emoji.id === '810232533462810666' && u.id === message.author.id, - { time: 120000 } - ); - const util = msg.createReactionCollector( - (r, u) => - r.emoji.id === '810250009894584351' && u.id === message.author.id, - { time: 120000 } - ); - inicio.on('collect', async r => { - msg.edit(embedInicial); - }); - - aca.on('collect', async r => { - msg.edit(embed1); - }); - - diver.on('collect', async r => { - msg.edit(embed2); - }); - - game.on('collect', async r => { - msg.edit(embed3); - }); - - image.on('collect', async r => { - msg.edit(embed4); - }); - - mod.on('collect', async r => { - msg.edit(embed5); - }); - - music.on('collect', async r => { - msg.edit(embed6); - }); - - nsfw.on('collect', async r => { - msg.edit(embed7); - }); - - util.on('collect', async r => { - msg.edit(embed8); - }); - }); - } - -}; diff --git a/commands/utilidade/idemoji.js b/commands/utilidade/idemoji.js deleted file mode 100644 index bb1d79a..0000000 --- a/commands/utilidade/idemoji.js +++ /dev/null @@ -1,29 +0,0 @@ -const Discord = require("discord.js"); - -module.exports ={ - name:"idemoji", - usage:"idemoji ", - category:"utilidade", - aliases:["emojiid"], - - run:async (client, message, args) => { - message.delete(); - if (!args[0]) - return message.channel.send( - `**${message.author.username}, Use:** ` + - "`" + - "k!emoji + figurinha`" - ); //Troque a exclamação ! da mensagem acima pelo seu prefixo - let emoji = message.guild.emojis.cache.find(emoji => emoji.name === args[0]); - - if (!emoji) { - message.channel.send( - "`" + args[0] + "` **Esse é o id da figurinha solicitada.**" - ); - } else if (emoji.animated === true) { - message.channel.send(``); - } else { - message.channel.send(`<:${args[0]}:${emoji.id}>`); - } -} -}; \ No newline at end of file diff --git a/commands/utilidade/imdb.js b/commands/utilidade/imdb.js deleted file mode 100644 index 44a7fa3..0000000 --- a/commands/utilidade/imdb.js +++ /dev/null @@ -1,38 +0,0 @@ -const discord = require("discord.js"); -const imdb = require("imdb-api"); -const googleTranslate = require("@iamtraction/google-translate"); - -module.exports = { -name: "imdb", - description: "Obtenha informações sobre séries e filmes", - category: "utilidade", - usage: "imdb ", - run: async (client, message, args, color) => { - - if(!args.length) { - return message.channel.send("Por favor, dê o nome do filme ou série") - } - - const imob = new imdb.Client({apiKey: "5e36f0db"}) //Você precisa colar sua imdb api - - let movie = await imob.get({'name': args.join(" ")}) - const plot = await googleTranslate(movie.plot, { from: 'en', to: 'pt' }) - - let embed = new discord.MessageEmbed() - .setTitle(movie.title) - .setColor("#ff2050") - .setThumbnail(movie.poster) - .setDescription(plot.text) - .setFooter(`Avaliações: ${movie.rating}`) - .addField("País:", movie.country, true) - .addField("Idiomas:", movie.languages, true) - .addField("Tipo:", movie.type, true); - - - message.channel.send(embed) - - - - } - -} \ No newline at end of file diff --git a/commands/utilidade/info.js b/commands/utilidade/info.js deleted file mode 100644 index 5d3c53e..0000000 --- a/commands/utilidade/info.js +++ /dev/null @@ -1,26 +0,0 @@ -const Discord = require("discord.js"), -os = require('os'); -module.exports = { - name: "info", - aliases:["i"], - category: "utilidade", - description: "Veja as informações detalhadas do bot", - - run: async = (client, message, args) => { - - let embed = new Discord.MessageEmbed() - .setTimestamp() - .addField(`:map: Número de servidores`, `${client.guilds.cache.size}`, true) - .addField(`:bust_in_silhouette: Numero de usuarios`, `${client.users.cache.size}`, true) - .addField(`:speech_balloon: Numeros de canais`, `${client.channels.cache.size}`, true) - .addField(`:desktop: Sistema operacional`, `${os.platform()}`, true) - .addField(`:gear: Arquitetura`, `${os.arch()}`, true) - .addField(`:rocket: Processador`, `${os.cpus().map(i => `${i.model}`)[0]}`, true) - .addField(`:pager: RAM`, `${Math.trunc((process.memoryUsage().heapUsed) / 1024 / 1000)} MB / ${Math.trunc(os.totalmem() / 1024 / 1000)} MB (${Math.round((Math.round(process.memoryUsage().heapUsed / 1024 / 1024) / Math.round(os.totalmem() / 1024 / 1024)) * 100)}%)`, true) - .addField(`:dividers: Livraria`, `Discord.js ${Discord.version}`, true) - .addField(`:alarm_clock: Conectado desde`, ""+(Math.round(client.uptime / (1000 * 60 * 60))) + " Hora(s), " + (Math.round(client.uptime / (1000 * 60)) % 60) + " minuto(s) e " + (Math.round(client.uptime / 1000) % 60) + " segundo(s)"+"") -.setColor('#00bfff') -.setFooter('KingKiller®#1889','https://cdn.discordapp.com/avatars/718669518452293713/1893ff302ddf846e106f47159d308367.webp?size=4096') - message.channel.send(embed); -} -} \ No newline at end of file diff --git a/commands/utilidade/level.js b/commands/utilidade/level.js deleted file mode 100644 index 0e4b155..0000000 --- a/commands/utilidade/level.js +++ /dev/null @@ -1,39 +0,0 @@ -const db = require('quick.db') -const discord = require('discord.js') -const { getInfo } = require("../../handlers/xp.js") -module.exports = { - name: "level", - description: "Obtenha o nível de autor ou mencionado", - aliases:["nivel"], - usage: "level <@user>", - category: "utilidade", - run: (client, message, args) => { - const user = message.mentions.users.first() || message.author; - - if(user.id === client.user.id) { //IF BOT - return message.channel.send("😉 | Estou no nível 100") - } - - if(user.bot) { - return message.channel.send("O bot não tem níveis") - } - - let xp = db.get(`xp_${user.id}_${message.guild.id}`) || 0; - - const {level, remxp, levelxp} = getInfo(xp); - if(xp === 0) return message.channel.send(`**${user.tag}** está fora do XP`) - - let embed = new discord.MessageEmbed() - .setAuthor(user.username, message.guild.iconURL()) - .setColor("#ff2050") - .setThumbnail(user.avatarURL()) - .setDescription(`**NÍVEL** - ${level} -**XP** - ${remxp}/${levelxp}`) - - message.channel.send(embed) - - - - - } -} \ No newline at end of file diff --git a/commands/utilidade/nick.js b/commands/utilidade/nick.js deleted file mode 100644 index 6147a46..0000000 --- a/commands/utilidade/nick.js +++ /dev/null @@ -1,20 +0,0 @@ -const discord = require("discord.js"); - -/*** -* @param {Discord.client} bot the discord bot client. -* @param {Discord.messsage} message the initial message sent by the user. -* @param {array} args an array of arguments - */ - -module.exports = { - name:"nick", - run:async (client, message, args) => { - var a = message.id; - var nickname = args.join(' '); - if (!message.member.hasPermission('CHANGE_NICKNAME')) return message.reply("Você não tem permissão para fazer isso!"); - message.member.setNickname(nickname).catch(err => { - return message.reply("Desculpe, não posso fazer isso no momento"); - }); - await message.channel.messages.fetch(a).then(msg => msg.delete({ timeout: 1000 })); -} -} \ No newline at end of file diff --git a/commands/utilidade/orm.js b/commands/utilidade/orm.js deleted file mode 100644 index d617fa4..0000000 --- a/commands/utilidade/orm.js +++ /dev/null @@ -1,88 +0,0 @@ -const { MessageEmbed } = require("discord.js") -const moment = require("moment") - -module.exports = { - name: "user", - aliases: ["userinfo"], - category: "info", - description: "Obtenha inf", - run: async (client, message, args) => { - - let target - - if(message.mentions.users.first()) { - target = message.mentions.users.first(); - } else if(args[0]) { - target = message.guild.members.cache.get(args[0]).user; - } else { - target = message.author - } - - if (target.presence.status === "dnd") target.presence.status = "<:dnd:812752487688699915>"; - if (target.presence.status === "idle") target.presence.status = "<:idle:812752961800896533>"; - if (target.presence.status === "online") target.presence.status = "<:online:812753463057973248>"; - if (target.presence.status === "offline") target.presence.status = "<:offline:812753903333539841>"; - - function game() { - let game; - if (target.presence.activities.length >= 1) game = `${target.presence.activities[0].type} ${target.presence.activities[0].name}`; - else if (target.presence.activities.length < 1) game = "Vazio"; - return game; - } - - let x = Date.now() - target.createdAt; - let y = Date.now() - message.guild.members.cache.get(target.id).joinedAt; - let created = Math.floor(x / 86400000); - let joined = Math.floor(y / 86400000); - - const member = message.guild.member(target); - let nickname = member.nickname !== undefined && member.nickname !== null ? member.nickname : "Vazio"; - let status = target.presence.status; - let avatar = target.avatarURL({ dynamic: true, size: 2048 }); - let aicon = message.author.avatarURL({ dynamic: true, size: 2048 }); - let createdate = moment.utc(target.createdAt).format("DD MM YYYY"); - let joindate = moment.utc(target.joinedAt).format(" DD MM YYYY"); - let flags = target.flags.toArray(); - if(target.flags.toArray() < 1) flags = "Vazio"; - - - const embed = new MessageEmbed() - .setAuthor(target.tag, avatar) - .setThumbnail(avatar) - .setDescription( - ` -<:arrow2:812770296289427549>** Nickname:** -${target.username} - -<:arrow2:812770296289427549>** ID:** -${target.id} - -<:arrow2:812770296289427549>** Apelido:** -${nickname} - -<:arrow2:812770296289427549>** Criação da conta:** -${createdate} | ${created} dia(s) atrás - -<:arrow2:812770296289427549>** Entrou no servidor em:** -${joindate} | ${joined} dia(s) atrás - -<:arrow2:812770296289427549>** Status:** -${status} - -<:arrow2:812770296289427549>** Atividade:** -${game()} - -<:arrow2:812770296289427549>** Emblemas:** -${flags} - -<:arrow2:812770296289427549>** Cargos:** -<@&${member._roles.join('> <@&')}>`) - - .setColor("#00bfff") - .setFooter(`${message.author.username}`, aicon ) - .setTimestamp() - - message.channel.send(embed) - - } -} \ No newline at end of file diff --git a/commands/utilidade/ping.js b/commands/utilidade/ping.js deleted file mode 100644 index f4ff6f8..0000000 --- a/commands/utilidade/ping.js +++ /dev/null @@ -1,25 +0,0 @@ -const discord = require("discord.js"); - -module.exports = { - name: "ping", - category: "utilidade", - description: "Obter ping do bot", - usage: "ping", - run: async (client, message, args) => { - - let start = Date.now(); - - message.channel.send({embed: - {description: "Parece que o bot está lento", - color: "#00FA9A" - }}).then(m =>{ - let end = Date.now(); - let embed = new discord.MessageEmbed() - .setAuthor("🏓 | Pong!", message.author.avatarURL()) - .addField("Latência da API", Math.round(client.ws.ping)+"ms", true) - .addField("latência de Mensagen", end - start + "ms", true) - .setColor("#00FA9A"); - m.edit(embed).catch(e => message.channel.send(e)) - }) - } -}; \ No newline at end of file diff --git a/commands/utilidade/qrcode.js b/commands/utilidade/qrcode.js deleted file mode 100644 index 766d314..0000000 --- a/commands/utilidade/qrcode.js +++ /dev/null @@ -1,28 +0,0 @@ -const discord = require("discord.js"); - -/*** -* @param {Discord.client} bot the discord bot client. -* @param {Discord.messsage} message the initial message sent by the user. -* @param {array} args an array of arguments - */ -module.exports = { - name:"qrcode", - run:async (client, message, args) => { - const neb = args.join(' '); - function isValidURL(string) { - //regex for link - // eslint-disable-next-line no-useless-escape - const res = string.match(/(http(s)?:\/\/.)?(www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b([-a-zA-Z0-9@:%_\+.~#?&//=]*)/g); - return (res !== null); - } - if (isValidURL(neb) == true) { - const url = `http://api.qrserver.com/v1/create-qr-code/?data=${neb}&size=100x100`; - - const embed = new discord.MessageEmbed() - .setColor('GREEN') - .setImage(url); - await message.channel.send(embed); - } - else return message.reply("Por favor insira um url válido no formato http(s)://www.example.com"); -} -} \ No newline at end of file diff --git a/commands/utilidade/relogio.js b/commands/utilidade/relogio.js deleted file mode 100644 index 7f96579..0000000 --- a/commands/utilidade/relogio.js +++ /dev/null @@ -1,35 +0,0 @@ -const Discord = require('discord.js'); -const snekfetch = require('snekfetch'); -const moment = require('moment'); -const clocks = ["🕛", "🕐", "🕑", "🕒", "🕓", "🕔", "🕕", "🕖", "🕗", "🕘", "🕙", "🕚"] - -module.exports = { - name:"relogio", - - run:async (client, message, args) => { - const location = message.content.split(/\s+/g).slice(1).join(" "); - if (!location) return message.channel.send('Especifique um local para eu coletar informações!'); - - try { - const res = await snekfetch.get(`https://time.is/${location.replace(/^in/, "")}`); - if (res.status !== 200) { - return message.channel.send('❎ | Não pôde conectar-se ao servidor!') - } - - const text = res.text || res.body.toString(); - - const date = text.match(new RegExp('
([^]+?)
'))[1] - const time = text.match(/
([^]+?)<\/div>/)[1].replace(/(AM|PM)<\/span>/, ' $1') - const place = text.match(/

Time in ([^]+?) now<\/h1>/)[1] - const clock = clocks[parseInt(time.split(':')[0], 10) % 12] - - var parsedTime = moment(`${date} ${time}`, 'dddd, MMMM D, YYYY HH:mm:ss A') - return message.channel.send(`${clock} | A hora em **${place}** is \`${parsedTime.format('dddd, MMMM Do YYYY @ h:mm:ss a')}\`!`) - - } catch (err) { - console.log(err) - return message.channel.send(`❎ | Localização **${location}** não foi encontrada!`); - } - - } -} \ No newline at end of file diff --git a/commands/utilidade/serveravatar.js b/commands/utilidade/serveravatar.js deleted file mode 100644 index dbbd6e1..0000000 --- a/commands/utilidade/serveravatar.js +++ /dev/null @@ -1,19 +0,0 @@ -const discord = require("discord.js") - -module.exports = { - name: "serveravatar", - aliases: ["sav", "guildavatar", "servericon"], - category: "info", - description: "Get avatar of the server", - run: async (client, message, args) => { - - let embed = new discord.MessageEmbed() - - embed.setDescription(`[Download](${message.guild.iconURL({ dynamic: true, size: 1024 })})`) - embed.setImage(message.guild.iconURL({ dynamic: true, size: 1024 })) - embed.setColor("#00bfff") - - message.channel.send(embed) - - } -} \ No newline at end of file diff --git a/commands/utilidade/serverinfo.js b/commands/utilidade/serverinfo.js deleted file mode 100644 index 9d78b33..0000000 --- a/commands/utilidade/serverinfo.js +++ /dev/null @@ -1,68 +0,0 @@ -const discord = require("discord.js"); - -module.exports = { - name: "serverinfo", - category: "info", - aliases:["servidorinfo"], - description: "Get the info of any server", - run: async (client, message, args) => { - if (message.guild.premiumTier === "Level 0") message.guild.premiumTier = " 0" - if (message.guild.premiumTier === "Level 1") message.guild.premiumTier = "<:boost:812908034132672552> 1" - if (message.guild.premiumTier === "Level 2") message.guild.premiumTier = "<:boost3:812908518562201650> 2" - if (message.guild.premiumTier === "Level 3") message.guild.premiumTier = "<:boost:812908909806223380> 3" - - if (message.guild.region === "india") message.guild.region = "🇮🇳 India" - if (message.guild.region === "brazil") message.guild.region = "🇧🇷 Brasil" - if (message.guild.region === "japan") message.guild.region = "🇯🇵 Japão" - if (message.guild.region === "russia") message.guild.region = "🇷🇺 Russia" - if (message.guild.region === "europe") message.guild.region = "🇪🇺 Europa" - if (message.guild.region === "sydney") message.guild.region = "🇦🇺 Sydney" - if (message.guild.region === "singapore") message.guild.region = "🇸🇬 Singapura" - if (message.guild.region === "hongkong") message.guild.region = "🇭🇰 Hong Kong" - if (message.guild.region === "southafrica") message.guild.region = "🇿🇦 Africa do sul" - if (message.guild.region === "us-east") message.guild.region = "🇺🇸 Leste dos Estados Unidos" - if (message.guild.region === "us-west") message.guild.region = "🇺🇸 Oeste americano" - if (message.guild.region === "us-central") message.guild.region = "🇺🇸 US Central" - if (message.guild.region === "us-south") message.guild.region = "🇺🇸 Sul dos Estados Unidos " - - let boostlevel = message.guild.premiumTier - - let aicon = message.author.avatarURL({ dynamic: true, size: 2048 }); - - let sicon = message.guild.iconURL({ dynamic: true, size: 2048 }); - - let embed = new discord.MessageEmbed() - .setTitle(message.guild) - .setDescription( - ` -<:king2:814342839735287851> **PROPRIETÁRIO** -${message.guild.owner.user.tag} -<:id:814337350762233866> **ID DO SERVIDOR** -${message.guild.id} -<:region:814337618199969802> **REGIÃO** -${message.guild.region} -<:people:814336053648949268> **MEMBROS ** -${message.guild.memberCount} -<:channel:814339037325164544> **CANAIS ** - ${message.guild.channels.cache.size} -<:role:814339727258943498> **CARGOS** -${message.guild.roles.cache.size} -<:alias:807391421656334398> **EMOJIS ** -${message.guild.emojis.cache.size} -<:date:814336828727361576> **SERVIDOR CRIADO EM** -${message.guild.createdAt.toLocaleDateString("pt-br")} -<:boost3:812908518562201650> **SERVER BOOST** -${message.guild.premiumSubscriptionCount} -<:boost2:812908146636226591> **NÍVEL DO BOOST** -${boostlevel} -<:securit:814335706079166484> **NÍVEL DE SEGURANÇA** -${message.guild.verificationLevel} -`) - .setThumbnail(message.guild.iconURL()) - .setColor("#00bfff") - .setFooter(`${message.author.username}`) - .setTimestamp() - - message.channel.send(embed); - } -}; \ No newline at end of file diff --git a/commands/utilidade/sleeptimer.js b/commands/utilidade/sleeptimer.js deleted file mode 100644 index f7951b1..0000000 --- a/commands/utilidade/sleeptimer.js +++ /dev/null @@ -1,49 +0,0 @@ -const functions = require("../../functions") -const config = require("../../config.json") -module.exports = { - name: "sleeptimer", - category: "utilidade", - aliases: ["sleep"], - useage: "sleeptimer ", - description: "Define um temporizador de suspensão que interromperá o bot / deixará o canal e o expulsará do canal após as horas de duração que você definiu", - run: async (client, message, args) => { - //if not a dj, return error - if (functions.check_if_dj(message)) - return functions.embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ Você não tem permissão para este comando! Você need to have: ${functions.check_if_dj(message)}`) - - //If Bot not connected, return error - if (!message.guild.me.voice.channel) return functions.embedbuilder(client, 3000, message, config.colors.no, "Nada tocando!") - - //if member not connected return error - if (!message.member.voice.channel) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar em um canal de voz") - - //if they are not in the same channel, return error - if (message.member.voice.channel.id != message.guild.me.voice.channel.id) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar no meu canal de voz: " + ` \`${message.guild.me.voice.channel.name ? message.guild.me.voice.channel.name : ""}\``) - - //get queue - let queue = client.distube.getQueue(message); - - //if no queue return error - if (!queue) return functions.embedbuilder(client, 3000, message, config.colors.no, "Não há nada tocando!"); - - //if no args return error - if (!args[0]) return functions.embedbuilder(client, 5000, message, config.colors.no, "`" + message.author.tag + "`" + "Por favor, adicione a quantidade do \"sleep\" que você deseja adicionar, em horas, por favor.") - - //send information message - functions.embedbuilder(client, "null", message, config.colors.no, "Temporizador definido",` Vou deixar o canal em \`${args[0]} horas\``) - - //wait until the time ended - setTimeout(() => { - //Send information message - functions.embedbuilder(client, "null", message, config.colors.no, "PARADO", `Saiu do canal`) - //kick the user - message.member.voice.setChannel(null) - //send information to the user - message.author.send(`Durma bem, ${message.author} :zzz:`).catch(e=>console.log("zzz")); - //stop distube - client.distube.stop(message); - //leave the channel - message.member.voice.channel.leave().catch(e=>console.log("zzz")); - }, Number(args[0]) * 1000 * 60 * 60) - } -}; \ No newline at end of file diff --git a/commands/utilidade/steam.js b/commands/utilidade/steam.js deleted file mode 100644 index 313ba3a..0000000 --- a/commands/utilidade/steam.js +++ /dev/null @@ -1,58 +0,0 @@ -const Discord = require('discord.js'); -const snekfetch = require('snekfetch'); - -module.exports = { - name:"steam", - - args: [{ - key: 'query', - prompt: 'Por favor, forneça-me um jogo para pesquisar!', - type: 'string', - default: 'Doki Doki Literature Club' - }], - run:async (client, message, args) => { - const { query } = args; - const search = await snekfetch - .get('https://store.steampowered.com/api/storesearch') - .query({ - cc: 'br', - l: 'pt', - term: query - }); - - if (!search.body.items.length) return msg.say(`Nenhum resultado encontrado para **${query}**!`); - - const { id, tiny_image } = search.body.items[0]; - - const { body } = await snekfetch - .get('https://store.steampowered.com/api/appdetails') - .query({ appids: id }); - - const { data } = body[id.toString()]; - const current = data.price_overview ? `${data.price_overview.final / 100}` : 'Grátis'; - const original = data.price_overview ? `${data.price_overview.initial / 100}` : 'Grátis'; - const price = current === original ? current : `~~${original}~~ ${current}`; - const platforms = []; - if (data.platforms) { - if (data.platforms.windows) platforms.push('Windows'); - if (data.platforms.mac) platforms.push('Mac'); - if (data.platforms.linux) platforms.push('Linux'); - } - - const embed = new Discord.MessageEmbed() - .setColor(0x101D2F) - .setAuthor('Steam', 'https://i.imgur.com/xxr2UBZ.png', 'http://store.steampowered.com/') - .setTitle(data.name) - .setURL(`http://store.steampowered.com/app/${data.steam_appid}`) - .setImage(tiny_image) - .addField('❯\u2000Preço', `•\u2000 ${price}`, true) - .addField('❯\u2000Pontos', `•\u2000 ${data.metacritic ? data.metacritic.score : '???'}`, true) - .addField('❯\u2000Recomendações', `•\u2000 ${data.recommendations ? data.recommendations.total : '???'}`, true) - .addField('❯\u2000Plataformas', `•\u2000 ${platforms.join(', ') || 'None'}`, true) - .addField('❯\u2000Data de lançamento', `•\u2000 ${data.release_date ? data.release_date.date : '???'}`, true) - .addField('❯\u2000Contagem de DLC', `•\u2000 ${data.dlc ? data.dlc.length : 0}`, true) - .addField('❯\u2000Desenvolvedores', `•\u2000 ${data.developers ? data.developers.join(', ') || '???' : '???'}`, true) - .addField('❯\u2000Editoras', `•\u2000 ${data.publishers ? data.publishers.join(', ') || '???' : '???'}`, true); - return message.channel.send({ embed }); - } -}; \ No newline at end of file diff --git a/commands/utilidade/sugerir.js b/commands/utilidade/sugerir.js deleted file mode 100644 index bf26905..0000000 --- a/commands/utilidade/sugerir.js +++ /dev/null @@ -1,57 +0,0 @@ -const { MessageEmbed } = require("discord.js") - - -module.exports = { - name: "sugerir", - aliases: ["sugestão"], - usage: "sugerir ", - description: "Envie sua sugestão", - category: "utilidade", - run: (client, message, args) => { - - message.delete() - - if(!args.length) { - return message.channel.send(new MessageEmbed() - .setColor('#FF0000') - .setTitle("Por favor, mande a sua sugestão") - ).then(msg => { - msg.delete({ timeout: 4000 }) - }) - } - - let channel = message.guild.channels.cache.find((x) => (x.name === "sugestão" || x.name === "sugestões" || x.name === "💡⎮sugestões")) - - - if(!channel) { - return message.channel.send(new MessageEmbed() - .setColor('#ff0000') - .setTitle("não existe um canal com o nome `sugestões` ou `sugestão` nesse servidor") - ).then(msg => { - msg.delete({ timeout: 4000 }) - }) - } - - - let embed = new MessageEmbed() - .setAuthor("sugestão de: " + message.author.tag, message.author.avatarURL()) - .setThumbnail(message.author.avatarURL()) - .setColor("#FF0000") - .setDescription(args.join(" ")) - .setTimestamp() - - - channel.send(embed).then(m => { - m.react("✅") - m.react("❌") - }) - - - - message.channel.send(`Sugestão enviada para ${channel}`).then(msg => { - msg.delete({ timeout: 4000 }) - msg.react("<:suzushi:788848956875997205>") - }) - - } -} \ No newline at end of file diff --git a/commands/utilidade/tradutor.js b/commands/utilidade/tradutor.js deleted file mode 100644 index 1df12c2..0000000 --- a/commands/utilidade/tradutor.js +++ /dev/null @@ -1,40 +0,0 @@ -//Codigo copiado e modificado de WinG4merBR codigo original aqui: (https://github.com/BotFoxy/Foxy.git) - -const {MessageEmbed} = require('discord.js'); -const translate = require('@k3rn31p4nic/google-translate-api'); - -module.exports = { - - name: "tradutor", - aliases: ['translate' ,'traduzir'], - category:"utilidade", - - - - run: async (client, message, args) => { - const roleColor = - message.guild.me.displayHexColor === "#00FFFF" - ? "##00BFFF" - : message.guild.me.displayHexColor; - - let language = args[0]; - let text = args.slice(1).join(" ") - - if(!language) return message.reply("Especifique um idioma") - - if (language.length !== 2) return message.reply('Use apenas abreviações. Exemplo: `k!language en Olá Mundo!`') - - if(!text) return message.reply('Insira um texto') - - const result = await translate(text, { to: language}) - - let embed = new MessageEmbed() - .setColor(roleColor) - .setTitle(':globe_with_meridians: | Tradutor') - .setDescription(`\ \ \`\`\`\n${result.text}\n\`\`\``) - - - message.channel.send(`${message.author}`, embed) - - } -} \ No newline at end of file diff --git a/commands/utilidade/userinfo.js b/commands/utilidade/userinfo.js deleted file mode 100644 index 4276bbb..0000000 --- a/commands/utilidade/userinfo.js +++ /dev/null @@ -1,88 +0,0 @@ -const { MessageEmbed } = require("discord.js") -const moment = require("moment") - -module.exports = { - name: "user", - aliases: ["userinfo"], - category: "info", - description: "Get info of any user", - run: async (client, message, args) => { - - let target - - if(message.mentions.users.first()) { - target = message.mentions.users.first(); - } else if(args[0]) { - target = message.guild.members.cache.get(args[0]).user; - } else { - target = message.author - } - - if (target.presence.status === "dnd") target.presence.status = "<:dnd:812752487688699915>"; - if (target.presence.status === "idle") target.presence.status = "<:idle:812752961800896533>"; - if (target.presence.status === "online") target.presence.status = "<:online:812753463057973248>"; - if (target.presence.status === "offline") target.presence.status = "<:offline:812753903333539841>"; - - function game() { - let game; - if (target.presence.activities.length >= 1) game = `${target.presence.activities[0].type} ${target.presence.activities[0].name}`; - else if (target.presence.activities.length < 1) game = "Vazio"; - return game; - } - - let x = Date.now() - target.createdAt; - let y = Date.now() - message.guild.members.cache.get(target.id).joinedAt; - let created = Math.floor(x / 86400000); - let joined = Math.floor(y / 86400000); - - const member = message.guild.member(target); - let nickname = member.nickname !== undefined && member.nickname !== null ? member.nickname : "Nenhum apelido nesse servidor"; - let status = target.presence.status; - let avatar = target.avatarURL({ dynamic: true, size: 2048 }); - let aicon = message.author.avatarURL({ dynamic: true, size: 2048 }); - let createdate = moment.utc(target.createdAt).format("DD MM YYYY"); - let joindate = moment.utc(target.joinedAt).format("DD MM YYYY"); - let flags = target.flags.toArray(); - if(target.flags.toArray() < 1) flags = "Não possui nenhum emblema"; - - - const embed = new MessageEmbed() - .setAuthor(target.tag, avatar) - .setThumbnail(avatar) - .setDescription( - ` -<:arrow2:812770296289427549>** Nickname:** -${target.username} - -<:arrow2:812770296289427549>** ID:** -${target.id} - -<:arrow2:812770296289427549>** Apelido:** -${nickname} - -<:arrow2:812770296289427549>** Criação da conta:** -${createdate} | ${created} dia(s) atrás - -<:arrow2:812770296289427549>** Entrou no servidor em:** -${joindate} | ${joined} dia(s) atrás - -<:arrow2:812770296289427549>** Status:** -${status} - -<:arrow2:812770296289427549>** Atividade:** -${game()} - -<:arrow2:812770296289427549>** Emblemas:** -${flags} - -<:arrow2:812770296289427549>** Cargos:** -<@&${member._roles.join('> <@&')}>`) - - .setColor("#00bfff") - .setFooter(`${message.author.username}`, aicon ) - .setTimestamp() - - message.channel.send(embed) - - } -} \ No newline at end of file diff --git a/dashboard/index.js b/dashboard/index.js new file mode 100644 index 0000000..6a073a2 --- /dev/null +++ b/dashboard/index.js @@ -0,0 +1,331 @@ +const express = require("express"); +const http = require("http"); +const url = require(`url`); +const path = require(`path`); +const { Permissions } = require("discord.js"); +const ejs = require("ejs"); +const fs = require("fs") +const passport = require(`passport`); +const bodyParser = require("body-parser"); +const Strategy = require(`passport-discord`).Strategy; +const BotConfig = require("../botconfig/config.json"); +const BotFilters = require("../botconfig/filters.json"); +const BotEmojis = require("../botconfig/emojis.json"); +const BotEmbed = require("../botconfig/embed.json"); + +/** + * STARTING THE WEBSITE + * @param {*} client THE DISCORD BOT CLIENT + */ +module.exports = client => { + //Start teh website + console.log("Loading DashBoard settings".brigthGreen) + const settings = require("./settings.json"); + // We instantiate express app and the session store. + const app = express(); + const httpApp = express(); + const session = require(`express-session`); + const MemoryStore = require(`memorystore`)(session); + + /** + * @INFO - Initial the Discord Login Setup! + */ + passport.serializeUser((user, done) => done(null, user)); + passport.deserializeUser((obj, done) => done(null, obj)); + passport.use(new Strategy({ + clientID: settings.config.clientID, + clientSecret: settings.config.secret, + callbackURL: settings.config.callback, + scope: [`identify`, `guilds`, `guilds.join`] + }, + (accessToken, refreshToken, profile, done) => { + process.nextTick(() => done(null, profile)); + })); + + + /** + * @INFO - ADD A SESSION SAVER + */ + app.use(session({ + store: new MemoryStore({ checkPeriod: 86400000 }), + secret: `#@%#&^$^$%@$^$&%#$%@#$%$^%&$%^#$%@#$%#E%#%@$FEErfgr3g#%GT%536c53cc6%5%tv%4y4hrgrggrgrgf4n`, + resave: false, + saveUninitialized: false, + })); + + // initialize passport middleware. + app.use(passport.initialize()); + app.use(passport.session()); + + + app.set('view engine', 'ejs'); + app.set('views', path.join(__dirname, './views')) + + + //Those for app.use(s) are for the input of the post method (updateing settings) + app.use(bodyParser.json()); + app.use(bodyParser.urlencoded({ + extended: true + })); + app.use(express.json()); + app.use(express.urlencoded({ + extended: true + })); + + //LOAD THE ASSETS + app.use(express.static(path.join(__dirname, './public'))); + //Load .well-known (if available) + app.use(express.static(path.join(__dirname, '/'), {dotfiles: 'allow'})); + + // We declare a checkAuth function middleware to check if an user is logged in or not, and if not redirect him. + const checkAuth = (req, res, next) => { + if (req.isAuthenticated()) return next(); + req.session.backURL = req.url; + res.redirect("/login"); + }; + + //Login endpoint + app.get(`/login`, (req, res, next) => { + if (req.session.backURL) { + req.session.backURL = req.session.backURL; + } else if (req.headers.referer) { + const parsed = url.parse(req.headers.referer); + if (parsed.hostname === app.locals.domain) { + req.session.backURL = parsed.path; + } + } else { + req.session.backURL = `/`; + } + next(); + }, passport.authenticate(`discord`, { prompt: `none` }) + ); + + + //Callback endpoint for the login data + app.get(`/callback`, passport.authenticate(`discord`, { failureRedirect: "/" }), async (req, res) => { + let banned = false // req.user.id + if(banned) { + req.session.destroy(() => { + res.json({ login: false, message: `Você foi bloqueado no painel.`, logout: true }) + req.logout(); + }); + } else { + res.redirect(`/dashboard`) + } + }); + + + + //When the website is loaded on the main page, render the main page + with those variables + app.get("/", (req, res) => { + res.render("index", { + req: req, + user: req.isAuthenticated() ? req.user : null, + //guild: client.guilds.cache.get(req.params.guildID), + botClient: client, + Permissions: Permissions, + bot: settings.website, + callback: settings.config.callback, + categories: client.categories, + commands: client.commands, + BotConfig: BotConfig, + BotFilters: BotFilters, + BotEmojis: BotEmojis, + }); + }) + + + // When the commands page is loaded, render it with those settings + app.get("/commands", (req, res) => { + res.render("commands", { + req: req, + user: req.isAuthenticated() ? req.user : null, + //guild: client.guilds.cache.get(req.params.guildID), + botClient: client, + Permissions: Permissions, + bot: settings.website, + callback: settings.config.callback, + categories: client.categories, + commands: client.commands, + BotConfig: BotConfig, + BotFilters: BotFilters, + BotEmojis: BotEmojis, + }) + }) + + + //Logout the user and move him back to the main page + app.get(`/logout`, function (req, res) { + req.session.destroy(() => { + req.logout(); + res.redirect(`/`); + }); + }); + + // Dashboard endpoint. + app.get("/dashboard", checkAuth, async (req,res) => { + if(!req.isAuthenticated() || !req.user) + return res.redirect("/?error=" + encodeURIComponent("Login First!")); + if(!req.user.guilds) + return res.redirect("/?error=" + encodeURIComponent("Unable to get your Guilds!")); + res.render("dashboard", { + req: req, + user: req.isAuthenticated() ? req.user : null, + //guild: client.guilds.cache.get(req.params.guildID), + botClient: client, + Permissions: Permissions, + bot: settings.website, + callback: settings.config.callback, + categories: client.categories, + commands: client.commands, + BotConfig: BotConfig, + BotFilters: BotFilters, + BotEmojis: BotEmojis, + }); + }) + + // Settings endpoint. + app.get("/dashboard/:guildID", checkAuth, async (req, res) => { + // We validate the request, check if guild exists, member is in guild and if member has minimum permissions, if not, we redirect it back. + const guild = client.guilds.cache.get(req.params.guildID); + if (!guild) return res.redirect("/dashboard?error=" + encodeURIComponent("Can't get Guild Information Data")); + let member = guild.members.cache.get(req.user.id); + if (!member) { + try { + member = await guild.members.fetch(req.user.id); + } catch (err) { + console.error(`Couldn't fetch ${req.user.id} in ${guild.name}: ${err}`); + } + } + if (!member) return res.redirect("/dashboard?error=" + encodeURIComponent("Unable to fetch you, sorry!")); + if (!member.permissions.has(Permissions.FLAGS.MANAGE_GUILD)) { + return res.redirect("/dashboard?error=" + encodeURIComponent("You are not allowed to do that!")); + } + client.settings.ensure(guild.id, { + prefix: BotConfig.prefix, + defaultvolume: 50, + defaultautoplay: false, + defaultfilters: [`bassboost6`, `clear`], + djroles: [], + botchannel: [] + }) + + + // We render template using the absolute path of the template and the merged default data with the additional data provided. + res.render("settings", { + req: req, + user: req.isAuthenticated() ? req.user : null, + guild: client.guilds.cache.get(req.params.guildID), + botClient: client, + Permissions: Permissions, + bot: settings.website, + callback: settings.config.callback, + categories: client.categories, + commands: client.commands, + BotConfig: BotConfig, + BotFilters: BotFilters, + BotEmojis: BotEmojis, + } + ); + }); + + + // Settings endpoint. + app.post("/dashboard/:guildID", checkAuth, async (req, res) => { + // We validate the request, check if guild exists, member is in guild and if member has minimum permissions, if not, we redirect it back. + const guild = client.guilds.cache.get(req.params.guildID); + if (!guild) return res.redirect("/dashboard?error=" + encodeURIComponent("Can't get Guild Information Data!")); + let member = guild.members.cache.get(req.user.id); + if (!member) { + try { + member = await guild.members.fetch(req.user.id); + } catch (err) { + console.error(`Couldn't fetch ${req.user.id} in ${guild.name}: ${err}`); + } + } + if (!member) return res.redirect("/dashboard?error=" + encodeURIComponent("Can't Information Data about you!")); + if (!member.permissions.has("MANAGE_GUILD")) { + return res.redirect("/dashboard?error=" + encodeURIComponent("You are not allowed to do that!")); + } + if(req.body.prefix) client.settings.set(guild.id, String(req.body.prefix).split(" ")[0], "prefix") + if(req.body.defaultvolume) client.settings.set(guild.id, Number(req.body.defaultvolume), "defaultvolume") + //if autoplay is enabled set it to true + if(req.body.defaultautoplay) client.settings.set(guild.id, true, "defaultautoplay") + //otherwise not + else client.settings.set(guild.id, false, "defaultautoplay") + + //if there are new defaultfilters, set them + if(req.body.defaultfilters) client.settings.set(guild.id, req.body.defaultfilters, "defaultfilters") + if(req.body.djroles) client.settings.set(guild.id, req.body.djroles, "djroles") + if(req.body.botchannel) client.settings.set(guild.id, req.body.botchannel, "botchannel") + // We render template using the absolute path of the template and the merged default data with the additional data provided. + res.render("settings", { + req: req, + user: req.isAuthenticated() ? req.user : null, + guild: client.guilds.cache.get(req.params.guildID), + botClient: client, + + Permissions: Permissions, + bot: settings.website, + callback: settings.config.callback, + categories: client.categories, + commands: client.commands, + BotConfig: BotConfig, + BotFilters: BotFilters, + BotEmojis: BotEmojis, + } + ); + }); + + + + // Queue Dash + app.get("/queue/:guildID", async (req,res) => { + res.render("queue", { + req: req, + user: req.isAuthenticated() ? req.user : null, + guild: client.guilds.cache.get(req.params.guildID), + botClient: client, + Permissions: Permissions, + bot: settings.website, + callback: settings.config.callback, + categories: client.categories, + commands: client.commands, + BotConfig: BotConfig, + BotFilters: BotFilters, + BotEmojis: BotEmojis, + }); + }) + + + //Queue Dashes + app.get("/queuedashboard", checkAuth, async (req,res) => { + if(!req.isAuthenticated() || !req.user) + return res.redirect("/?error=" + encodeURIComponent("Login First!")); + if(!req.user.guilds) + return res.redirect("/?error=" + encodeURIComponent("Unable to get your Guilds!")); + res.render("queuedashboard", { + req: req, + user: req.isAuthenticated() ? req.user : null, + //guild: client.guilds.cache.get(req.params.guildID), + botClient: client, + Permissions: Permissions, + bot: settings.website, + callback: settings.config.callback, + categories: client.categories, + commands: client.commands, + BotConfig: BotConfig, + BotFilters: BotFilters, + BotEmojis: BotEmojis, + }); + }) + + /** + * @START THE WEBSITE + */ + //START THE WEBSITE ON THE DEFAULT PORT (80) + const http = require(`http`).createServer(app); + http.listen(settings.config.http.port, () => { + console.log(`[${settings.website.domain}]: HTTP-Website running on ${settings.config.http.port} port.`) + }); +} \ No newline at end of file diff --git a/dashboard/public/commands.css b/dashboard/public/commands.css new file mode 100644 index 0000000..4794694 --- /dev/null +++ b/dashboard/public/commands.css @@ -0,0 +1,130 @@ +@import url('https://fonts.googleapis.com/css2?family=Poppins&display=swap'); + + +body { + background: #000617; + color: #5663f7 +} +h1 { + text-align: center; +} +p { + text-align: center; +} +a { + color: #00BFFF; + text-decoration: none; + transition: all 0.2s ease; +} +a:hover { + color: #00bffd +} +section { + margin-top: 10px; + margin-bottom: 30px; +} + +.command_head { + padding-top: 50px; + padding-bottom: 50px; + color: white; +} + +#category { + border-radius: 5px; + padding-bottom: 50px; +} + +#category a { + background-color: #151f2e; + color: #00bfff; + font-weight: bold; +} + +#category a:focus{ + color: #000617; + background: #00bfff; +} + +#category a:hover{ + color: #000617; + background: #00BFFF; +} + +.allfilters{ + color: #000617!important +} + +#category a.active { + background-color: #00BFFF; + border-color: #00BFFF; + color: #000617; +} + +#category a.active:focus { + background-color: #00BFFF; + border-color: #00BFFF; +} +.accordion-item { + background-color: #151f2e; + color: #888a9b; +} + +.accordion-button { + color: #00BFFF; + font-weight: bold; +} + +.accordion-button:not(.collapsed) { + color: #000617; + background-color: #00BFFF; +} + +.accordion-button:not(.collapsed)::after { + background-image: url(https://cdn3.iconfinder.com/data/icons/faticons/32/arrow-up-01-512.png); + transform: rotate(180deg); + filter: invert(10%) +} +.accordion-button::after { + background-image: url(https://cdn3.iconfinder.com/data/icons/faticons/32/arrow-up-01-512.png); +} */ + +.accordion-button:focus { + z-index: 0; + border-color: transparent; + outline: 0; + box-shadow: 0 0 0 0.25rem transparent; +} + +.accordion-item:first-of-type { + border-top-left-radius: .25rem; + border-top-right-radius: .25rem; +} + + +.accordion-item:last-of-type { + border-bottom-left-radius: .25rem; + border-bottom-right-radius: .25rem; +} + +#commands_menu { + font-family: 'Poppins', sans-serif; +} + + +/* ANIMATION */ + +.slide-up-fade-in{ + animation: slide-up-fade-in ease 1.5s; +} + +@keyframes slide-up-fade-in{ + 0% { + opacity:0; + transform: translate(0px,40px) ; + } + 100% { + opacity:1; + transform: translate(0px,0px) ; + } +} \ No newline at end of file diff --git a/dashboard/public/index.css b/dashboard/public/index.css new file mode 100644 index 0000000..0197a45 --- /dev/null +++ b/dashboard/public/index.css @@ -0,0 +1,384 @@ +/* MAIN BODY */ +::-webkit-scrollbar { + width: 8px; +} + +/* Track */ +::-webkit-scrollbar-track { + background: tranparent +} + +/* Handle */ +::-webkit-scrollbar-thumb { + background: #00bfff; + border: 2px solid #000; + border-radius: 5px; +} + +/* Handle on hover */ +::-webkit-scrollbar-thumb:hover { + background: #5663f7; +} + +::-webkit-scrollbar-thumb:window-inactive { + background: transparent; + } + +body +{ + background: #000617; + background-size: cover; +} + +.head { + padding-top: 150px; + color: #00BFFF; + line-height: 1.2; + text-align: center; +} + +.song{ + display: flex; + flex-wrap: wrap; + justify-content: center; + height: 20px; +} + +.queue{ + margin: 650px 430px; +} + +.current-song{ + margin-top: 20%!important; + min-height: 100vh; + width:825px!important; + height:150px!important; + border: solid 3px #00bfff!important; + border-radius: 15px!important; +} + +.nowplaying{ + position: relative!important; + width:650px!important; + height:290px!important; + margin-left: -100px!important; + margin-top: -210px!important; +} + +.img-thumbnail{ + background: transparent; + border: 1px solid #00bfff!important; + border-radius: 0.25rem!important; + min-width: 10%; + width:40%; + height: 70%; +} + +.progresswrapper{ + position: absolute!important; + width:100%!important; + bottom: 0px!important; +} + +.bg-dark{ + background-color: transparent !important; +} + +.subtext { + padding-bottom: 330px; + color: rgba(255, 255, 255, 0.55); + line-height: 1.3; + text-align: center; + +} + +.w-100{ + border-radius: 15px; + box-shadow: 3px 2px 1px #00bfff; +} + +.container { + max-width: auto; +} + +.pt-10 { + padding-top: 10rem!important; +} + +.pt-16 { + padding-top: 20rem!important; +} + +.custom-1 img { + float: right; + border-radius: 10px; + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); +} + +.custom-1 h3 { + padding-top: 60px; +} + +.custom-1 p { + color: rgb(255, 255, 255, .55); + width: 40%; +} + +.custom-2 img { + float: left; + border-radius: 10px; + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); +} + +.custom-2 h3 { + padding-top: 60px; + float: right; + width: 40%; +} + +.custom-2 p { + float: right; + width: 40%; + color: rgb(255, 255, 255, .55); +} + + +/* MEDIA */ + +@media screen and (max-width: 967px) { + .custom-1 img { + float: none; + display: block; + margin-left: auto; + margin-right: auto; + height: auto; + } + + .pt-10 { + padding-top: 5rem!important; + } + .pt-16 { + padding-top: 2rem!important; + } + + .custom-1 p { + text-align: center; + width: 100%; + } + + .custom-1 h3 { + text-align: center; + } + + .custom-2 p { + text-align: center; + float: none; + width: 100%; + } + + .custom-2 h3 { + float: none; + text-align: center; + width: 100%; + } + + .custom-2 img { + float: none; + display: block; + margin-left: auto; + margin-right: auto; + height: auto; + } +.current-song{ + width:350px!important; +} + +.nowplaying{ + position: relative!important; + width:320px!important; + margin-left: -3px!important; + margin-top: -210px!important; +} + +.img-thumbnail{ + width:65px; + height: 30%; +} + +} + + + +.card { + max-width: 18rem; + margin: 2rem; + min-width: 18em; + border: transparent; +} + + + + +.form-holder { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + text-align: center; + min-height: 100vh; +} + +.form-holder .form-content { + position: relative; + text-align: center; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-justify-content: center; + justify-content: center; + -webkit-align-items: center; + align-items: center; + padding: 60px; +} + +.form-content .form-items { + margin-top: 30px; + border: 3px solid #00bfff; + padding: 40px; + display: inline-block; + width: 100%; + min-width: 320px; + -webkit-border-radius: 10px; + -moz-border-radius: 10px; + border-radius: 10px; + text-align: left; + -webkit-transition: all 0.4s ease; + transition: all 0.4s ease; +} + +.form-content h3 { + color: #fff; + text-align: left; + font-size: 28px; + font-weight: 600; + margin-bottom: 5px; +} + +.form-content h3.form-title { + margin-bottom: 30px; +} + +.form-content p { + color: #fff; + text-align: left; + font-size: 17px; + font-weight: 300; + line-height: 20px; + margin-bottom: 30px; +} + + +.form-content label, .was-validated .form-check-input:invalid~.form-check-label, .was-validated .form-check-input:valid~.form-check-label{ + color: #fff; +} + +.form-content input[type=text], .form-content input[type=password], .form-content input[type=email], .form-content select { + width: 100%; + padding: 9px 20px; + text-align: left; + border: 0; + outline: 0; + border-radius: 6px; + background-color: #fff; + font-size: 15px; + font-weight: 300; + color: #292929; + -webkit-transition: all 0.3s ease; + transition: all 0.3s ease; + margin-top: 16px; +} + + +.form-content textarea { + position: static !important; + width: 100%; + padding: 8px 20px; + border-radius: 6px; + text-align: left; + background-color: #fff; + border: 0; + font-size: 15px; + font-weight: 300; + color: #292929; + outline: none; + resize: none; + height: 120px; + -webkit-transition: none; + transition: none; + margin-bottom: 14px; +} + +.form-content textarea:hover, .form-content textarea:focus { + border: 0; + background-color: #ebeff8; + color: #292929; +} + +.mv-up{ + margin-top: -9px !important; + margin-bottom: 8px !important; +} + +.invalid-feedback{ + color: #ff606e; +} + +.valid-feedback{ + color: #2acc80; +} +.bootstrap-select.btn-group .dropdown-menu li a:hover { + color: whitesmoke !important; + background: #bf5279 !important; +} +select { + height: 40px!important; + margin-top: -10px; +} +.form-control { + height: 40px!important; + margin-top: -10px; +} +.selectpicker { + height: 40px!important; + margin-top: -10px; +} + + + + + + + + + + + + + + + + + + +.current-song { + margin-top: -20%; + min-height: 100vh; /* minimum height = screen height */ + display: flex; + justify-content: center; + align-items: center; +} +.current-song img { + border-radius: 15px; +} \ No newline at end of file diff --git a/dashboard/public/style.css b/dashboard/public/style.css new file mode 100644 index 0000000..c1ef496 --- /dev/null +++ b/dashboard/public/style.css @@ -0,0 +1,223 @@ +@import url('https://fonts.googleapis.com/css2?family=Poppins:wght@200;300;400;500;600;700&display=swap'); +*{ + box-sizing: border-box; + text-decoration: none; + font-family: 'Poppins', sans-serif; +} +.wrapper{ + background: #00BFFF; + position: fixed; + width: 100%; +} +.wrapper nav{ + position: relative; + display: flex; + max-width: calc(100% - 200px); + margin: 0 auto; + height: 70px; + align-items: center; + justify-content: space-between; +} +nav .content{ + display: flex; + align-items: flex-start; + margin-top: 25px; + margin-left: -130px; +} +nav .content .links{ + margin-left: 80px; + display: flex; +} +.content .links li{ + list-style: none; + line-height: 70px; +} +.content .links li a, +.content .links li label{ + color: #000617; + text-transform: uppercase; + font-size: 15px; + font-weight: 500; + padding: 9px 17px; + border-radius: 5px; + text-decoration: none; + transition: all 0.3s ease; +} + +.links li a:hover{ + color: #00bfff; +} +.content .links li label{ + display: none; +} +.content .links li a:hover, +.content .links li label:hover{ + background: #000617; +} +.wrapper .menu-icon{ + display: none; +} +.wrapper input[type="checkbox"]{ + display: none; +} + +/* Dropdown Menu code start */ +.content .links ul{ + position: absolute; + background: #171c24; + top: 80px; + z-index: -1; + opacity: 0; + visibility: hidden; +} +.content .links li:hover > ul{ + top: 70px; + opacity: 1; + visibility: visible; + transition: all 0.3s ease; +} +.content .links ul li a{ + display: block; + width: 100%; + line-height: 30px; + border-radius: 0px!important; +} +.content .links ul ul{ + position: absolute; + top: 0; + right: calc(-100% + 8px); +} +.content .links ul li{ + position: relative; +} +.content .links ul li:hover ul{ + top: 0; +} + +/* Responsive code start */ +@media screen and (max-width: 1250px){ + .wrapper nav{ + max-width: 100%; + padding: 0 20px; + } + nav .content .links{ + margin-left: -10px; + } + .content .links li a{ + padding: 8px 13px; + } + .wrapper .search-box{ + max-width: calc(100% - 100px); + } + .wrapper .search-box input{ + padding: 0 100px 0 15px; + } +} + +@media screen and (max-width: 900px){ + .wrapper .menu-icon{ + display: block; + } + .wrapper #show-menu:checked ~ .menu-icon i::before{ + content: "\f00d"; + } + .content .links li a:hover, +.content .links li label:hover{ + background: #00bfff; +} + nav .content .links{ + display: block; + position: fixed; + background: #000617; + height: 100%; + width: 100%; + top: 70px; + left: -100%; + margin-left: 0; + max-width: 350px; + overflow-y: auto; + padding-bottom: 100px; + transition: all 0.3s ease; + } + nav #show-menu:checked ~ .content .links{ + left: 0%; + } + .content .links li{ + margin: 15px 20px; + } + + .content .links li a, + .content .links li label{ + line-height: 40px; + font-size: 20px; + color: #00bfff; + display: block; + padding: 8px 18px; + cursor: pointer; + text-decoration: none; + } + .content .links li a:hover{ + color: #000617; +} + .content .links li a.desktop-link{ + display: none; + } + + /* dropdown responsive code start */ + .content .links ul, + .content .links ul ul{ + position: static; + opacity: 1; + visibility: visible; + background: none; + max-height: 0px; + overflow: hidden; + } + .content .links #show-features:checked ~ ul, + .content .links #show-services:checked ~ ul, + .content .links #show-items:checked ~ ul{ + max-height: 100vh; + } + .content .links ul li{ + margin: 7px 20px; + } + .content .links ul li a{ + font-size: 18px; + line-height: 30px; + border-radius: 5px!important; + } +} + +@media screen and (max-width: 400px){ + .wrapper nav{ + padding: 0 10px; + } + .content .logo a{ + font-size: 27px; + } + .wrapper .search-box{ + max-width: calc(100% - 70px); + } + .wrapper .search-box .go-icon{ + width: 30px; + right: 0; + } + .wrapper .search-box input{ + padding-right: 30px; + } +} + +.dummy-text{ + position: absolute; + top: 50%; + left: 50%; + width: 100%; + z-index: -1; + padding: 0 20px; + text-align: center; + transform: translate(-50%, -50%); +} +.dummy-text h2{ + font-size: 45px; + margin: 5px 0; +} \ No newline at end of file diff --git a/dashboard/views/commands.ejs b/dashboard/views/commands.ejs new file mode 100644 index 0000000..aa07aae --- /dev/null +++ b/dashboard/views/commands.ejs @@ -0,0 +1,129 @@ +<%- include('header'); -%> + + + + + + + + + <%= bot.name %> + + + + +
+
+ +
+

Meus Comandos

+

+ + Convide-me com as Permissões de Comandos Slash , porque todos os meus Comandos também estão disponíveis como Comandos Slash

+ + +
+
+
+
+ <% categories.forEach((category, i) => { %> + <%= category %> + <% }) %> +
+
+
+
+ <% categories.forEach((category, k) => { %> +
+
+ <% commands.filter((cmd) => cmd.category === category).forEach((cmd, i) => { %> +
+

+ +

+
+
+ Descrição : <%= cmd.description %>
+ Aliases : <% cmd.aliases && cmd.aliases.length > 0 ? cmd.aliases.forEach(a => { %> + [+<%= a %>] + <% }) : "NO" %>
+ Uso : <%= cmd.usage %>
+
+
+
+ <% }) %> +
+
+ <% }) %> +
+
+
+
+
+ +
+

Filtros de Áudio

+

Você pode adicionar filtros usando os comandos addfilter/removefilter/setfilter ou o filter[set/add/remove] no Comando Slash!
Às vezes, leva até 2 segundos para que um filtro seja aplicado!
Você também pode adicionar filtros no padrão! defaultfiltero

+ + +
+
+ +
+
+
+
+ <% Object.keys(BotFilters).forEach((filter, i) => { %> +
+

+ +

+
+
+ <% if(filter.includes("custom")) { %> +

Este é um Filtro personalizado e possui Comandos dedicados para ele! Você pode ajustar o ganho/quantidade dele!

+ <% } %> + FFmpeg-Arg: <%= BotFilters[String(filter)] %>
+ Aplica um filtro de áudio de som"<%= filter %>" +
+
+
+ <% }) %> +
+
+
+
+
+
+
+ + + <%- include('footer'); -%> + + + \ No newline at end of file diff --git a/dashboard/views/dashboard.ejs b/dashboard/views/dashboard.ejs new file mode 100644 index 0000000..1adb60b --- /dev/null +++ b/dashboard/views/dashboard.ejs @@ -0,0 +1,70 @@ +<%- include('header'); -%> + + + + + + + + + <%= bot.name %> + + + + + +
+
+

DASHBOARD

+
+
+

Com o painel, você pode gerenciar as configurações de cada guilda individualmente!
Somente se você tiver a permissão Gerenciar servidor, porque ela é necessária para esse comando!

+
+ <% if(user && user.id){ %> +
+ <% user.guilds + .filter((guild) => { + const permsOnGuild = new Permissions(guild.permissions_new); + if(permsOnGuild.has(Permissions.FLAGS.MANAGE_GUILD)) return guild; + }) + .sort((a, b) => { + return (botClient.guilds.cache.get(a.id) === botClient.guilds.cache.get(b.id)) ? 0 : a ? -1 : 1; + }) + .forEach(guild => { + %> +
+ <%- guild.icon ? `` : `` %> +
+
<%= guild.name %>
+ <% if (botClient.guilds.cache.get(guild.id)) { %> +

Edite as configurações de <%= guild.name %> Através do painel clicando no botão abaixo!

+ Editar Configurações + <% } else { %> +

Me adicione a <% = guild.name%> para ver as configurações de sua guilda através do painel clicando no botão abaixo!

+ Adicionar Bot + <% } %> +
+
+ <% + }); + %> +
+ <% + } else { + %> +

Please login First!

+ <% + } + %> +
+ + <%- include('footer'); -%> + + + + + \ No newline at end of file diff --git a/dashboard/views/footer.ejs b/dashboard/views/footer.ejs new file mode 100644 index 0000000..2fc44c9 --- /dev/null +++ b/dashboard/views/footer.ejs @@ -0,0 +1,12 @@ +
+ +
\ No newline at end of file diff --git a/dashboard/views/header.ejs b/dashboard/views/header.ejs new file mode 100644 index 0000000..088fc96 --- /dev/null +++ b/dashboard/views/header.ejs @@ -0,0 +1,43 @@ + + + + +
+ +
+ + \ No newline at end of file diff --git a/dashboard/views/index.ejs b/dashboard/views/index.ejs new file mode 100644 index 0000000..a578bad --- /dev/null +++ b/dashboard/views/index.ejs @@ -0,0 +1,97 @@ +<%- include('header'); -%> + + + + + + + + + <%= bot.name %> + + + + + +
+
+

+ <%= botClient.user.username %> | Experiência de Música definitiva +

+
+
+

O melhor bot de música com a melhor e mais alta qualidade que você já usou!

+
+
+ +
+ +
+
+
+
+
+
+
Todos os comandos necessários para o seu servidor
+

Você está cansado de ter um Bot de Música com milhares de comandos? King tem todos os comandos necessários em apenas um único bot! +
Embora eles não vejam "muito", você pode usar nossas estruturas de comando para adicionar um dos <%= Object.keys(BotFilters).length %> Filtros!

+
+
+
+
+
+ + +
+
+
+
+
+
+
Experiência de Música definitiva significa <%= Object.keys(BotFilters).length %> Filtros para ajustar o seu áudio!
+

Estamos usando o FFMPEG, para dar a você a mais alta qualidade de áudio possível! Na verdade, nós os geramos instantaneamente e não temos lag!

+
+
+
+
+
+ + +
+
+
+
+
+
+
Spotify, Soundcloud, Youtube e 1100+ outros links suportados!
+

Apoiamos tudo o que você ouve! INCLUINDO PLAYLISTS E 20 PLAYLISTS PREDEFINIDAS, otimizadas! (mix)

+
+
+
+
+
+ + +
+
+
+
+
+
+
Interface clara, com logs e botões instantâneos!
+

Para que você possa obter tudo o que deseja instantaneamente do Bot e ver tudo o que / quem aconteceu!

+
+
+
+
+
+ +
+ + + <%- include('footer'); -%> + + + + + \ No newline at end of file diff --git a/dashboard/views/queue.ejs b/dashboard/views/queue.ejs new file mode 100644 index 0000000..5e8d289 --- /dev/null +++ b/dashboard/views/queue.ejs @@ -0,0 +1,165 @@ +<%- include('header'); -%> + + + + + + + + + + <%= guild ? guild.name : "Queue" %> + + + + + + <% + const nFormatter = function(num, digits = 2) { + const lookup = [ + { value: 1, symbol: "" }, + { value: 1e3, symbol: "k" }, + { value: 1e6, symbol: "M" }, + { value: 1e9, symbol: "G" }, + { value: 1e12, symbol: "T" }, + { value: 1e15, symbol: "P" }, + { value: 1e18, symbol: "E" } + ]; + const rx = /\.0+$|(\.[0-9]*[1-9])0+$/; + var item = lookup.slice().reverse().find(function(item) { + return num >= item.value; + }); + return item ? (num / item.value).toFixed(digits).replace(rx, "$1") + item.symbol : "0"; + } + %> + + +
+

+ <% if(guild && botClient.distube.getQueue(guild.id) && botClient.distube.getQueue(guild.id).songs && botClient.distube.getQueue(guild.id).songs.length > 0){ let current = botClient.distube.getQueue(guild.id).songs[0] %> + +
+

Música atual:

+
+ +
+ +
+
+ <%= String(current.name).substr(0, 50) %> +
+
+
+
+
+ <%= botClient.distube.getQueue(guild.id).formattedCurrentTime %><%= current.formattedDuration %> +
+

<%= String(current.name).length > 70 ? String(current.name).substr(0, 69) + " ..." : String(current.name) %>

+

+ + Requested by: <%= current.user.username %>#<%= current.user.discriminator %> +

+

+ + <%= nFormatter(current.views, 2) %> +

+

+ + <%= nFormatter(current.likes, 2) %> +

+

+ + <%= nFormatter(current.dislikes, 2) %> +

+

+ + Duration: <%= current.formattedDuration %> | <%= current.duration %> Seconds +

+
+
+
+
+
+
+ +
+

Fila de Reprodução [ <%= botClient.distube.getQueue(guild.id) && botClient.distube.getQueue(guild.id).songs ? botClient.distube.getQueue(guild.id).songs.length : 0 %> Músicas ]

+
+
+
+ Card image cap +
+
1. <%= current.name %>
+

Requerido por: <%= current.user.tag %>

+

Duration: <%= botClient.distube.getQueue(guild.id).formattedCurrentTime + " / " + current.formattedDuration %>

+
+
+ <% botClient.distube.getQueue(guild.id).songs.forEach((song, i) => { if(i>0){ %> +
+ Card image cap +
+
<%= i + 1%>. <%= song.name %>
+

Requested by: <%= song.user.tag %>

+

Duration: <%= song.formattedDuration %>

+
+
+ <% }}) %> +
+ <% }else{ %> +
+

Atualmente não há nada tocando

+
+ <% } %> +
+ + + <%- include('footer'); -%> + + + + + + + \ No newline at end of file diff --git a/dashboard/views/queuedashboard.ejs b/dashboard/views/queuedashboard.ejs new file mode 100644 index 0000000..76630dd --- /dev/null +++ b/dashboard/views/queuedashboard.ejs @@ -0,0 +1,71 @@ +<%- include('header'); -%> + + + + + + + + + <%= bot.name %> + + + + + +
+ <% if(user && user.guilds && user.guilds.filter((guild) => botClient.guilds.cache.get(guild.id)).length > 0){ %> +
+

Servidores em que ambos estamos

+
+
+

Esses servidores são ordenados, após o comprimento da fila, o servidor com a maior fila está à esquerda!

+
+
+ <% + user.guilds + .filter((guild) => botClient.guilds.cache.get(guild.id)) + .sort((a, b) => { + let x = botClient.distube.getQueue(a.id) ? botClient.distube.getQueue(a.id).songs.length : 0 + let y = botClient.distube.getQueue(a.id) ? botClient.distube.getQueue(a.id).songs.length : 0 + return y - x || -1 + }) + .forEach(guild => { + %> +
+ <%- guild.icon ? `` : `` %> +
+
<%= guild.name %>
+

Mostrar a fila atual de <%= guild.name %> com <%= botClient.distube.getQueue(guild.id) ? botClient.distube.getQueue(guild.id).songs.length : 0 %> Músicas!

+ + Mostrar fila + + +
+
+ <% }); + %> +
+ <% }else { + %> +

Nós não compartilhamos nenhum servidor ;(

+

+ +

+
+ <% + } %> +
+ + + <%- include('footer') -%> + + + + + \ No newline at end of file diff --git a/dashboard/views/settings.ejs b/dashboard/views/settings.ejs new file mode 100644 index 0000000..bc62274 --- /dev/null +++ b/dashboard/views/settings.ejs @@ -0,0 +1,146 @@ +<%- include('header'); -%> + + + + + + + + + <%= guild.name %> + + + + + + + + + +
+
+
+
+
+
+

Configurações do servidor

+

Alterar as configurações do servidor de <%= botClient.user.username %> em <%= guild.name %>.

+
+
Prefixo:
+

O prefixo que é adicionado às mensagens do Discord para solicitar comandos.

+ + +

+
Reprodução automática padrão:
+

Se a reprodução automática deve ser habilitada na inicialização da fila.

+
+    > + + + +
+ +

+
volume padrão:
+

O volume a ser definido na inicialização da fila.

+ + Volume Atual: <%= botClient.settings.get(guild.id, 'defaultvolume')%>% + + +

+
Cargos-Dj:
+

Todos os usuários com as funções selecionadas / solicitante de música têm permissão para usar os comandos de manipulação de fila / música. | Não escolha nenhuma função, para desabilitar!

+ + + +

+
Canais de bots na lista de permissões:
+

Todos os canais de bot que estão na lista de permissões! | O Bot responderá apenas aos comandos em um desses canais!

+ + + + +

+
Filtros Padrão:
+

Filtros a serem adicionados à fila antes de começar a tocar!

+ + +

+ +
+
+
+
+
+ +
+

Mostrar a Fila de Música [ <%= botClient.distube.getQueue(guild.id) && botClient.distube.getQueue(guild.id).songs ? botClient.distube.getQueue(guild.id).songs.length : 0 %> Músicas]

+ + +
+
+ + + + <%- include('footer') -%> + + + + + + \ No newline at end of file diff --git a/data/enmap.sqlite b/data/enmap.sqlite deleted file mode 100644 index 1fdaeb1..0000000 Binary files a/data/enmap.sqlite and /dev/null differ diff --git a/data/enmap.sqlite-shm b/data/enmap.sqlite-shm deleted file mode 100644 index a6e6777..0000000 Binary files a/data/enmap.sqlite-shm and /dev/null differ diff --git a/data/enmap.sqlite-wal b/data/enmap.sqlite-wal deleted file mode 100644 index cc67692..0000000 Binary files a/data/enmap.sqlite-wal and /dev/null differ diff --git a/databases/infos/enmap.sqlite b/databases/infos/enmap.sqlite index 3f960a8..b3455fa 100644 Binary files a/databases/infos/enmap.sqlite and b/databases/infos/enmap.sqlite differ diff --git a/databases/infos/enmap.sqlite-shm b/databases/infos/enmap.sqlite-shm deleted file mode 100644 index 80036b3..0000000 Binary files a/databases/infos/enmap.sqlite-shm and /dev/null differ diff --git a/databases/infos/enmap.sqlite-wal b/databases/infos/enmap.sqlite-wal deleted file mode 100644 index dd28981..0000000 Binary files a/databases/infos/enmap.sqlite-wal and /dev/null differ diff --git a/databases/infos/placeholder.md b/databases/infos/placeholder.md new file mode 100644 index 0000000..1943510 --- /dev/null +++ b/databases/infos/placeholder.md @@ -0,0 +1 @@ +this folder is a db \ No newline at end of file diff --git a/databases/infos/placeholder.txt b/databases/infos/placeholder.txt deleted file mode 100644 index 3646e9e..0000000 --- a/databases/infos/placeholder.txt +++ /dev/null @@ -1 +0,0 @@ -enmap will create files in here https://kinbot.cf \ No newline at end of file diff --git a/databases/playlist/enmap.sqlite b/databases/playlist/enmap.sqlite deleted file mode 100644 index d9ac5ae..0000000 Binary files a/databases/playlist/enmap.sqlite and /dev/null differ diff --git a/databases/playlist/enmap.sqlite-shm b/databases/playlist/enmap.sqlite-shm deleted file mode 100644 index 9965ab1..0000000 Binary files a/databases/playlist/enmap.sqlite-shm and /dev/null differ diff --git a/databases/playlist/enmap.sqlite-wal b/databases/playlist/enmap.sqlite-wal deleted file mode 100644 index 379ade0..0000000 Binary files a/databases/playlist/enmap.sqlite-wal and /dev/null differ diff --git a/databases/playlist/placeholder.txt b/databases/playlist/placeholder.txt deleted file mode 100644 index ac53f53..0000000 --- a/databases/playlist/placeholder.txt +++ /dev/null @@ -1 +0,0 @@ -enmap will create files in here https://kingbot.cf \ No newline at end of file diff --git a/databases/playlist2/enmap.sqlite b/databases/playlist2/enmap.sqlite deleted file mode 100644 index ea3fad3..0000000 Binary files a/databases/playlist2/enmap.sqlite and /dev/null differ diff --git a/databases/playlist2/enmap.sqlite-shm b/databases/playlist2/enmap.sqlite-shm deleted file mode 100644 index d225dbb..0000000 Binary files a/databases/playlist2/enmap.sqlite-shm and /dev/null differ diff --git a/databases/playlist2/enmap.sqlite-wal b/databases/playlist2/enmap.sqlite-wal deleted file mode 100644 index bf2a1ed..0000000 Binary files a/databases/playlist2/enmap.sqlite-wal and /dev/null differ diff --git a/databases/playlist2/placeholder.txt b/databases/playlist2/placeholder.txt deleted file mode 100644 index ac53f53..0000000 --- a/databases/playlist2/placeholder.txt +++ /dev/null @@ -1 +0,0 @@ -enmap will create files in here https://kingbot.cf \ No newline at end of file diff --git a/databases/settings/enmap.sqlite b/databases/settings/enmap.sqlite deleted file mode 100644 index f5a179b..0000000 Binary files a/databases/settings/enmap.sqlite and /dev/null differ diff --git a/databases/settings/enmap.sqlite-shm b/databases/settings/enmap.sqlite-shm deleted file mode 100644 index fca9595..0000000 Binary files a/databases/settings/enmap.sqlite-shm and /dev/null differ diff --git a/databases/settings/enmap.sqlite-wal b/databases/settings/enmap.sqlite-wal deleted file mode 100644 index 7588d85..0000000 Binary files a/databases/settings/enmap.sqlite-wal and /dev/null differ diff --git a/databases/settings/placeholder.md b/databases/settings/placeholder.md new file mode 100644 index 0000000..1943510 --- /dev/null +++ b/databases/settings/placeholder.md @@ -0,0 +1 @@ +this folder is a db \ No newline at end of file diff --git a/databases/settings/placeholder.txt b/databases/settings/placeholder.txt deleted file mode 100644 index ac53f53..0000000 --- a/databases/settings/placeholder.txt +++ /dev/null @@ -1 +0,0 @@ -enmap will create files in here https://kingbot.cf \ No newline at end of file diff --git a/events/client/debug.js b/events/client/debug.js new file mode 100644 index 0000000..ae5cf68 --- /dev/null +++ b/events/client/debug.js @@ -0,0 +1,4 @@ +//here the event starts +module.exports = (client, info) => { + console.log(String(info).grey); +} \ No newline at end of file diff --git a/events/client/disconnect.js b/events/client/disconnect.js new file mode 100644 index 0000000..cbbce76 --- /dev/null +++ b/events/client/disconnect.js @@ -0,0 +1,5 @@ +//here the event starts +module.exports = client => { + console.log(`Você foi desconectado em ${new Date()}.`.dim) +} + diff --git a/events/client/error.js b/events/client/error.js new file mode 100644 index 0000000..21558be --- /dev/null +++ b/events/client/error.js @@ -0,0 +1,4 @@ +//here the event starts +module.exports = (client, error) => { + console.log(String(error).red.dim); +} diff --git a/events/client/rateLimit.js b/events/client/rateLimit.js new file mode 100644 index 0000000..5a74052 --- /dev/null +++ b/events/client/rateLimit.js @@ -0,0 +1,4 @@ +//here the event starts +module.exports = (client, rateLimitData) => { + console.log(JSON.stringify(rateLimitData).grey.italic.dim); +} diff --git a/events/client/ready.js b/events/client/ready.js new file mode 100644 index 0000000..bc1c951 --- /dev/null +++ b/events/client/ready.js @@ -0,0 +1,27 @@ +//here the event starts +const config = require("../../botconfig/config.json") +const { change_status } = require("../../handlers/functions"); +module.exports = client => { + //SETTING ALL GUILD DATA FOR THE DJ ONLY COMMANDS for the DEFAULT + //client.guilds.cache.forEach(guild=>client.settings.set(guild.id, ["autoplay", "clearqueue", "forward", "loop", "jump", "loopqueue", "loopsong", "move", "pause", "resume", "removetrack", "removedupe", "restart", "rewind", "seek", "shuffle", "skip", "stop", "volume"], "djonlycmds")) + try{ + try{ + const stringlength = 69; + console.log("\n") + console.log(` ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓`.bold.brightGreen) + console.log(` ┃ `.bold.brightGreen + " ".repeat(-1+stringlength-` ┃ `.length)+ "┃".bold.brightGreen) + console.log(` ┃ `.bold.brightGreen + `O Bot está online!`.bold.brightGreen + " ".repeat(-1+stringlength-` ┃ `.length-`O Bot está online!`.length)+ "┃".bold.brightGreen) + console.log(` ┃ `.bold.brightGreen + ` /--/ ${client.user.tag} /--/ `.bold.brightGreen+ " ".repeat(-1+stringlength-` ┃ `.length-` /--/ ${client.user.tag} /--/ `.length)+ "┃".bold.brightGreen) + console.log(` ┃ `.bold.brightGreen + " ".repeat(-1+stringlength-` ┃ `.length)+ "┃".bold.brightGreen) + console.log(` ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛`.bold.brightGreen) + }catch{ /* */ } + change_status(client); + //loop through the status per each 10 minutes + setInterval(()=>{ + change_status(client); + }, 15 * 1000); + + } catch (e){ + console.log(String(e.stack).grey.italic.dim.bgRed) + } +} diff --git a/events/client/reconnecting.js b/events/client/reconnecting.js new file mode 100644 index 0000000..687a941 --- /dev/null +++ b/events/client/reconnecting.js @@ -0,0 +1,4 @@ +//here the event starts +module.exports = client => { + console.log(`Reconectando em ${new Date()}.`.bgYellow.black) +} diff --git a/events/client/shardDisconnect.js b/events/client/shardDisconnect.js new file mode 100644 index 0000000..5710c27 --- /dev/null +++ b/events/client/shardDisconnect.js @@ -0,0 +1,4 @@ +//here the event starts +module.exports = (client, event, id) => { + console.log(` || <==> || [${String(new Date).split(" ", 5).join(" ")}] || <==> || Shard #${id} Desconectado || <==> ||`) +} diff --git a/events/client/shardError.js b/events/client/shardError.js new file mode 100644 index 0000000..fda6dd1 --- /dev/null +++ b/events/client/shardError.js @@ -0,0 +1,4 @@ +//here the event starts +module.exports = (client, error, id) => { + console.log(` || <==> || [${String(new Date).split(" ", 5).join(" ")}] || <==> || Shard #${id} Erro || <==> ||`) +} diff --git a/events/client/shardReady.js b/events/client/shardReady.js new file mode 100644 index 0000000..bb285e1 --- /dev/null +++ b/events/client/shardReady.js @@ -0,0 +1,4 @@ +//here the event starts +module.exports = (client, id) => { + console.log(` || <==> || [${String(new Date).split(" ", 5).join(" ")}] || <==> || Shard #${id} Preparado || <==> ||`) +} diff --git a/events/client/shardReconnecting.js b/events/client/shardReconnecting.js new file mode 100644 index 0000000..203c467 --- /dev/null +++ b/events/client/shardReconnecting.js @@ -0,0 +1,3 @@ +//here the event starts +module.exports = (client, id) => { + console.log(` || <==> || [${String(new Date).split(" ", 5).join(" ")}] || <==> || Shard #${id} Reconectando || <==> ||`)} \ No newline at end of file diff --git a/events/client/shardResume.js b/events/client/shardResume.js new file mode 100644 index 0000000..37debe8 --- /dev/null +++ b/events/client/shardResume.js @@ -0,0 +1,4 @@ +//here the event starts +module.exports = (client, id, replayedEvents) => { + console.log(` || <==> || [${String(new Date).split(" ", 5).join(" ")}] || <==> || Shard #${id} Retomado || <==> ||`) +} diff --git a/events/client/warn.js b/events/client/warn.js new file mode 100644 index 0000000..253f758 --- /dev/null +++ b/events/client/warn.js @@ -0,0 +1,4 @@ +//here the event starts +module.exports = (client, error) => { + console.log(String(error).yellow.dim); +} \ No newline at end of file diff --git a/events/guild/interactionCreate.js b/events/guild/interactionCreate.js new file mode 100644 index 0000000..e3bcbeb --- /dev/null +++ b/events/guild/interactionCreate.js @@ -0,0 +1,93 @@ +//Import Modules +const config = require(`../../botconfig/config.json`); +const ee = require(`../../botconfig/embed.json`); +const settings = require(`../../botconfig/settings.json`); +const { onCoolDown, replacemsg } = require("../../handlers/functions"); +const Discord = require("discord.js"); +module.exports = (client, interaction) => { + const CategoryName = interaction.commandName; + client.settings.ensure(interaction.guildId, { + prefix: config.prefix, + defaultvolume: 50, + defaultautoplay: false, + defaultfilters: [`bassboost6`, `clear`], + djroles: [], + }) + let prefix = client.settings.get(interaction.guildId) + let command = false; + try{ + if (client.slashCommands.has(CategoryName + interaction.options.getSubcommand())) { + command = client.slashCommands.get(CategoryName + interaction.options.getSubcommand()); + } + }catch{ + if (client.slashCommands.has("normal" + CategoryName)) { + command = client.slashCommands.get("normal" + CategoryName); + } + } + if(command) { + let botchannels = client.settings.get(interaction.guildId, `botchannel`); + if(!botchannels || !Array.isArray(botchannels)) botchannels = []; + if (botchannels.length > 0) { + if (!botchannels.includes(interaction.channelId) && !interaction.member.permissions.has("ADMINISTRATOR")) { + return interaction.reply({ ephemeral: true, + embeds: [new Discord.MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não tem permissão para usar este comando aqui!**`) + .setDescription(`Por favor, faça isso em um desses canais:\n> ${botchannels.map(c=>`<#${c}>`).join(", ")}`) + ] + }) + } + } + if (onCoolDown(interaction, command)) { + return interaction.reply({ephemeral: true, + embeds: [new Discord.MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(replacemsg(settings.messages.cooldown, { + prefix: prefix, + command: command, + timeLeft: onCoolDown(interaction, command) + }))] + }); + } + //if Command has specific permission return error + if (command.memberpermissions && command.memberpermissions.length > 0 && !interaction.member.permissions.has(command.memberpermissions)) { + return interaction.reply({ ephemeral: true, embeds: [new Discord.MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(replacemsg(settings.messages.notallowed_to_exec_cmd.title)) + .setDescription(replacemsg(settings.messages.notallowed_to_exec_cmd.description.memberpermissions, { + command: command, + prefix: prefix + }))] + }); + } + //if Command has specific needed roles return error + if (command.requiredroles && command.requiredroles.length > 0 && interaction.member.roles.cache.size > 0 && !interaction.member.roles.cache.some(r => command.requiredroles.includes(r.id))) { + return interaction.reply({ ephemeral: true, embeds: [new Discord.MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(replacemsg(settings.messages.notallowed_to_exec_cmd.title)) + .setDescription(replacemsg(settings.messages.notallowed_to_exec_cmd.description.requiredroles, { + command: command, + prefix: prefix + }))] + }) + } + //if Command has specific users return error + if (command.alloweduserids && command.alloweduserids.length > 0 && !command.alloweduserids.includes(interaction.member.id)) { + return message.channel.send({ ephemeral: true, embeds: [new Discord.MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(replacemsg(settings.messages.notallowed_to_exec_cmd.title)) + .setDescription(replacemsg(settings.messages.notallowed_to_exec_cmd.description.alloweduserids, { + command: command, + prefix: prefix + }))] + }); + } + //execute the Command + command.run(client, interaction) + } +} diff --git a/events/guild/messageCreate.js b/events/guild/messageCreate.js new file mode 100644 index 0000000..444a9e6 --- /dev/null +++ b/events/guild/messageCreate.js @@ -0,0 +1,172 @@ +//Import Modules +const config = require(`../../botconfig/config.json`); +const ee = require(`../../botconfig/embed.json`); +const settings = require(`../../botconfig/settings.json`); +const { onCoolDown, replacemsg } = require(`../../handlers/functions`); +const Discord = require(`discord.js`); +module.exports = async (client, message) => { + if(!message.guild || !message.channel || message.author.bot) return; + if(message.channel.partial) await message.channel.fetch(); + if(message.partial) await message.fetch(); + client.settings.ensure(message.guild.id, { + prefix: config.prefix, + defaultvolume: 50, + defaultautoplay: false, + defaultfilters: [`bassboost6`, `clear`], + djroles: [], + botchannel: [] + }) + let prefix = client.settings.get(message.guild.id, `prefix`) + const prefixRegex = new RegExp(`^(<@!?${client.user.id}>|${escapeRegex(prefix)})`); + if(!prefixRegex.test(message.content)) return; + const [, mPrefix] = message.content.match(prefixRegex); + const args = message.content.slice(mPrefix.length).trim().split(/ +/).filter(Boolean); + const cmd = args.length > 0 ? args.shift().toLowerCase() : null; + if(!cmd || cmd.length == 0){ + if(mPrefix.includes(client.user.id)){ + message.reply({embeds: [new Discord.MessageEmbed().setColor(ee.color).setFooter(ee.footertext, ee.footericon).setTitle(`:thumbsup: **Meu prefixo aqui é __\`${prefix}\`__**`)]}) + } + return; + } + let command = client.commands.get(cmd); + if(!command) command = client.commands.get(client.aliases.get(cmd)); + if (command) { + let botchannels = client.settings.get(message.guild.id, `botchannel`); + if(!botchannels || !Array.isArray(botchannels)) botchannels = []; + if (botchannels.length > 0) { + if (!botchannels.includes(message.channel.id) && !message.member.permissions.has("ADMINISTRATOR")) { + return message.reply({ + embeds: [new Discord.MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não tem permissão para usar este comando aqui!**`) + .setDescription(`Por favor, faça isso em um desses canais:\n> ${botchannels.map(c=>`<#${c}>`).join(", ")}`) + ] + }) + } + } + //Check if user is on cooldown with the cmd, with Tomato#6966's Function from /handlers/functions.js + if (onCoolDown(message, command)) { + return message.reply({ + embeds: [new Discord.MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(replacemsg(settings.messages.cooldown, { + prefix: prefix, + command: command, + timeLeft: onCoolDown(message, command) + }))] + }); + } + try { + //if Command has specific permission return error + if (command.memberpermissions && command.memberpermissions.length > 0 && !message.member.permissions.has(command.memberpermissions)) { + return message.reply({ embeds: [new Discord.MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(replacemsg(settings.messages.notallowed_to_exec_cmd.title)) + .setDescription(replacemsg(settings.messages.notallowed_to_exec_cmd.description.memberpermissions, { + command: command, + prefix: prefix + }))] + }).then(msg => {setTimeout(()=>{msg.delete().catch((e) => {console.log(String(e).grey)})}, settings.timeout.notallowed_to_exec_cmd.memberpermissions)}).catch((e) => {console.log(String(e).grey)}); + } + //if Command has specific needed roles return error + if (command.requiredroles && command.requiredroles.length > 0 && message.member.roles.cache.size > 0 && !message.member.roles.cache.some(r => command.requiredroles.includes(r.id))) { + return message.reply({embeds: [new Discord.MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(replacemsg(settings.messages.notallowed_to_exec_cmd.title)) + .setDescription(replacemsg(settings.messages.notallowed_to_exec_cmd.description.requiredroles, { + command: command, + prefix: prefix + }))] + }).then(msg => {setTimeout(()=>{msg.delete().catch((e) => {console.log(String(e).grey)})}, settings.timeout.notallowed_to_exec_cmd.requiredroles)}).catch((e) => {console.log(String(e).grey)}); + + } + //if Command has specific users return error + if (command.alloweduserids && command.alloweduserids.length > 0 && !command.alloweduserids.includes(message.author.id)) { + return message.reply({embeds: [new Discord.MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(replacemsg(settings.messages.notallowed_to_exec_cmd.title)) + .setDescription(replacemsg(settings.messages.notallowed_to_exec_cmd.description.alloweduserids, { + command: command, + prefix: prefix + }))] + }).then(msg => {setTimeout(()=>{msg.delete().catch((e) => {console.log(String(e).grey)})}, settings.timeout.notallowed_to_exec_cmd.alloweduserids)}).catch((e) => {console.log(String(e).grey)}); + } + //if command has minimum args, and user dont entered enough, return error + if(command.minargs && command.minargs > 0 && args.length < command.minargs) { + return message.reply({embeds: [new Discord.MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Uso de comando errado!`) + .setDescription(command.argsmissing_message && command.argsmissing_message.trim().length > 0 ? command.argsmissing_message : command.usage ? `Uso: ` + command.usage : `Uso de comando errado`)] + }).then(msg => {setTimeout(()=>{msg.delete().catch((e) => {console.log(String(e).grey)})}, settings.timeout.minargs)}).catch((e) => {console.log(String(e).grey)}); + } + //if command has maximum args, and user enters too many, return error + if(command.maxargs && command.maxargs > 0 && args.length > command.maxargs) { + return message.reply({embeds: [new Discord.MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Uso de comando errado!`) + .setDescription(command.argstoomany_message && command.argstoomany_message.trim().length > 0 ? command.argstoomany_message : command.usage ? `Uso: ` + command.usage : `Uso de comando errado`)] + }).then(msg => {setTimeout(()=>{msg.delete().catch((e) => {console.log(String(e).grey)})}, settings.timeout.maxargs)}).catch((e) => {console.log(String(e).grey)}); + } + + //if command has minimum args (splitted with `++`), and user dont entered enough, return error + if(command.minplusargs && command.minplusargs > 0 && args.join(` `).split(`++`).filter(Boolean).length < command.minplusargs) { + return message.reply({embeds: [new Discord.MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Uso de comando errado!`) + .setDescription(command.argsmissing_message && command.argsmissing_message.trim().length > 0 ? command.argsmissing_message : command.usage ? `Uso: ` + command.usage : `Uso de comando errado`)] + }).then(msg => {setTimeout(()=>{msg.delete().catch((e) => {console.log(String(e).grey)})}, settings.timeout.minplusargs)}).catch((e) => {console.log(String(e).grey)}); + } + //if command has maximum args (splitted with `++`), and user enters too many, return error + if(command.maxplusargs && command.maxplusargs > 0 && args.join(` `).split(`++`).filter(Boolean).length > command.maxplusargs) { + return message.reply({embeds: [new Discord.MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} Uso de comando errado!`) + .setDescription(command.argstoomany_message && command.argstoomany_message.trim().length > 0 ? command.argsmissing_message : command.usage ? `Uso: ` + command.usage : `Uso de comando errado`)] + }).then(msg => {setTimeout(()=>{msg.delete().catch((e) => {console.log(String(e).grey)})}, settings.timeout.maxplusargs)}).catch((e) => {console.log(String(e).grey)}); + } + //run the command with the parameters: client, message, args, Cmduser, text, prefix, + command.run(client, message, args, args.join(` `).split(`++`).filter(Boolean), message.member, args.join(` `), prefix); + } catch (error) { + if (settings.somethingwentwrong_cmd) { + return message.reply({ + embeds: [new Discord.MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(replacemsg(settings.messages.somethingwentwrong_cmd.title, { + prefix: prefix, + command: command + })) + .setDescription(replacemsg(settings.messages.somethingwentwrong_cmd.description, { + error: error, + prefix: prefix, + command: command + }))] + }).then(msg => {setTimeout(()=>{msg.delete().catch((e) => {console.log(String(e).grey)})}, 4000)}).catch((e) => {console.log(String(e).grey)}); + } + } + }/* else //if the command is not found send an info msg + return message.reply({ + embeds: [new Discord.MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(replacemsg(settings.messages.unknown_cmd, { + prefix: prefix + }))] + }).then(msg => {setTimeout(()=>{msg.delete().catch((e) => {console.log(String(e).grey)})}, 4000)}).catch((e) => {console.log(String(e).grey)});*/ + } +function escapeRegex(str) { + try{ + return str.replace(/[.*+?^${}()|[\]\\]/g, `\\$&`); + }catch{ + return str + } +} diff --git a/events/guild/threadCreate.js b/events/guild/threadCreate.js new file mode 100644 index 0000000..bcdfa0d --- /dev/null +++ b/events/guild/threadCreate.js @@ -0,0 +1,9 @@ +module.exports = async (client, thread) => { + if(thread.joinable){ + try{ + await thread.join(); + }catch (e){ + console.log(e) + } + } +} diff --git a/events/guild/voiceStateUpdate.js b/events/guild/voiceStateUpdate.js new file mode 100644 index 0000000..668572f --- /dev/null +++ b/events/guild/voiceStateUpdate.js @@ -0,0 +1,39 @@ +module.exports = async (client, oldState, newState) => { + if ( + (!oldState.streaming && newState.streaming) || + (oldState.streaming && !newState.streaming) || + (!oldState.serverDeaf && newState.serverDeaf) || + (oldState.serverDeaf && !newState.serverDeaf) || + (!oldState.serverMute && newState.serverMute) || + (oldState.serverMute && !newState.serverMute) || + (!oldState.selfDeaf && newState.selfDeaf) || + (oldState.selfDeaf && !newState.selfDeaf) || + (!oldState.selfMute && newState.selfMute) || + (oldState.selfMute && !newState.selfMute) || + (!oldState.selfVideo && newState.selfVideo) || + (oldState.selfVideo && !newState.selfVideo) + ) + if (!oldState.channelId && newState.channelId) { + if(newState.channel.type == "GUILD_STAGE_VOICE" && newState.guild.me.voice.suppress){ + try{ + await newState.guild.me.voice.setSuppressed(false); + }catch (e){ + console.log(String(e).grey) + } + } + return + } + if (oldState.channelId && !newState.channelId) { + return + } + if (oldState.channelId && newState.channelId) { + if(newState.channel.type == "GUILD_STAGE_VOICE" && newState.guild.me.voice.suppress){ + try{ + await newState.guild.me.voice.setSuppressed(false); + }catch (e){ + console.log(String(e).grey) + } + } + return; + } +} \ No newline at end of file diff --git a/functions.js b/functions.js deleted file mode 100644 index 0766ea8..0000000 --- a/functions.js +++ /dev/null @@ -1,365 +0,0 @@ -const Discord = require("discord.js") -const config = require("./config.json") -module.exports.formatDate = formatDate; -module.exports.promptMessage = promptMessage; -module.exports.embedbuilder = embedbuilder; -module.exports.errorbuilder = errorbuilder; -module.exports.customplaylistembed = customplaylistembed; -module.exports.lyricsEmbed = lyricsEmbed; -module.exports.playsongyes = playsongyes; -module.exports.curembed = curembed; -module.exports.delay = delay; -module.exports.getRandomInt = getRandomInt; -module.exports.QueueEmbed = QueueEmbed; -module.exports.check_if_dj = check_if_dj; - -function check_if_dj(message, member) { - //if no message added return - if(!message) return false; - //set variable for "client" - var client = message.client; - - if (!member) member = message.member; - //get the adminroles - var roleid = client.settings.get(message.guild.id, `djroles`) - //if no dj roles return false, so that it continues - if (String(roleid) == "") return false; - - //define variables - var isdj = false, - string = ""; - - //loop through the roles - for (let i = 0; i < roleid.length; i++) { - //if the role does not exist, then skip this current loop run - if (!message.guild.roles.cache.get(roleid[i])) continue; - //if he has role set var to true - if (member.roles.cache.has(roleid[i])) isdj = true; - //add the role to the string - string += "<@&" + roleid[i] + "> | " - } - //if no dj and not an admin, return the string - if (!isdj && !member.hasPermission("ADMINISTRATOR")) - return string; - //if he is a dj or admin, then return false, which will continue the cmd - else - return false; -} - -function formatDate(date) { - return new Intl.DateTimeFormat('pt-BR').format(date) -} -async function promptMessage(message, author, time, validReactions) { - time *= 1000; - for (const reaction of validReactions) await message.react(reaction); - const filter = (reaction, user) => validReactions.includes(reaction.emoji.name) && user.id === author.id; - return message - .awaitReactions(filter, { - max: 1, - time: time - }) - .then(collected => collected.first() && collected.first().emoji.name); -} - -function embedbuilder(client, deletetime, message, color, title, description, thumbnail) { - try { - if (title.includes("filter") && title.includes("Adding")) { - client.infos.set("global", Number(client.infos.get("global", "filters")) + 1, "filters"); - } - } catch {} - try { - let embed = new Discord.MessageEmbed() - .setColor("#00bfff") - .setAuthor(message.author.tag, message.member.user.displayAvatarURL({ - dynamic: true - }), "https://kingbot.cf") - .setFooter(client.user.username + client.user.displayAvatarURL()); - if (title) embed.setTitle(title); - if (description) embed.setDescription(description); - if (thumbnail) embed.setThumbnail(thumbnail) - if (!deletetime || deletetime === undefined || deletetime === "null") { - message.channel.send(embed) - .then(msg => { - try { - if (msg.channel.type === "news") - msg.crosspost() - } catch (error) { - console.log(error) - errorbuilder(error.stack.toString().substr(0, 2000)) - } - }) - return; - } - return message.channel.send(embed).then(msg => msg.delete({ - timeout: deletetime - })); - } catch (error) { - embedbuilder(client, 5000, message, "RED", "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - errorbuilder(error.stack.toString().substr(0, 2000)) - } -} - -function errorbuilder(error) { - console.log(error) -} - -function QueueEmbed(client, queue) { - try { - let embeds = ["#00bfff"]; - let k = 10; - //defining each Pages - for (let i = 0; i < queue.songs.length; i += 10) { - let qus = queue.songs; - const current = qus.slice(i, k) - let j = i; - k += 10; - const info = current.map((track) => `**${j++} -** [\`${track.name}\`](${track.url}) - \`${track.formattedDuration}\``).join("\n") - const embed = new Discord.MessageEmbed() - .setTitle("Fila de servidor") - .setColor(config.colors.yes) - .setDescription(`**Música atual - [\`${qus[0].name}\`](${qus[0].url})**\n\n${info}`) - .setFooter(client.user.username + client.user.displayAvatarURL()) - embeds.push(embed); - } - //returning the Embed - return embeds; - } catch (error) { - console.log(error) - errorbuilder(error.stack.toString().substr(0, 2000)) - } -} - -function customplaylistembed(client, message, lyrics, song) { - if (!lyrics) lyrics = "Nenhuma música na lista de reprodução!"; - try { - let embeds = ["#00bfff"]; - let k = 1000; - for (let i = 0; i < lyrics.length; i += 1000) { - const current = lyrics.slice(i, k); - k += 1000; - const embed = new Discord.MessageEmbed() - .setTitle("Playlist personalizada") - .setColor(config.colors.yes) - .setDescription(current) - embeds.push(embed); - } - return embeds; - } catch (error) { - console.log(error) - embedbuilder(client, 5000, message, "RED", "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - errorbuilder(error.stack.toString().substr(0, 2000)) - } -} - -function lyricsEmbed(client, message, lyrics, song) { - try { - let embeds = ["#00bfff"]; - let k = 1000; - for (let i = 0; i < lyrics.length; i += 1000) { - const current = lyrics.slice(i, k); - k += 1000; - const embed = new Discord.MessageEmbed() - .setTitle("Letras - " + song.name) - .setURL(song.url) - .setThumbnail(song.thumbnail) - .setColor(config.colors.yes) - .setDescription(current) - embeds.push(embed); - } - return embeds; - } catch (error) { - console.log(error) - embedbuilder(client, 5000, message, "RED", "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - errorbuilder(error.stack.toString().substr(0, 2000)) - } -} -async function playsongyes(client, message, queue, song) { - try { - let djs = ""; - if (client.settings.get(message.guild.id, `djroles`).join("") === "") djs = "não configurado" - else - for (let i = 0; i < client.settings.get(message.guild.id, `djroles`).length; i++) { - djs += "<@&" + client.settings.get(message.guild.id, `djroles`)[i] + "> | " - } - - let embed1 = new Discord.MessageEmbed() - - .setColor(config.colors.yes) - .setTitle("🎶 Tocando música!") - .setDescription(`Song: [\`${song.name}\`](${song.url})`) - .addField("💡 Requerido por:", `>>> ${song.user}`, true) - .addField("⏱ Duração:", `>>> \`${queue.formattedCurrentTime} / ${song.formattedDuration}\``, true) - .addField("🌀 Fila:", `>>> \`${queue.songs.length} musica(s) - ${queue.formattedDuration}\``, true) - .addField("🔊 Volume:", `>>> \`${queue.volume} %\``, true) - .addField("♾ Loop:", `>>> ${queue.repeatMode ? queue.repeatMode === 2 ? "✅ Fila" : "✅ Musica" : "❌"}`, true) - .addField("↪️ Reprodução automática:", `>>> ${queue.autoplay ? "✅" : "❌"}`, true) - .addField("❔ Baixar música:", `>>> [\`Clique aqui\`](${song.streamURL})`, true) - .addField("❔ Filtro:", `>>> \`${queue.filter || "❌"}\``, true) - .addField("🎧 DJ-Role:", `>>> ${djs}`, true) - .setFooter(client.user.username + " | por: KingKiller", client.user.displayAvatarURL()) - .setAuthor(message.author.tag, message.member.user.displayAvatarURL({ - dynamic: true - }), "") - .setThumbnail(`https://img.youtube.com/vi/${song.id}/mqdefault.jpg`) - .setColor("#00bfff") - var playingMessage = await message.channel.send(embed1) - - client.settings.set(message.guild.id, playingMessage.id, "playingembed") - client.settings.set(message.guild.id, message.channel.id, "playingchannel") - - try { - await playingMessage.react("⏭"); - await playingMessage.react("⏹"); - await playingMessage.react("🔉"); - await playingMessage.react("🔊"); - await playingMessage.react("⬅️"); - await playingMessage.react("➡️"); - } catch (error) { - embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - errorbuilder(error.stack.toString().substr(0, 2000)) - console.log(error); - } - const filter = (reaction, user) => ["⏭", "⏹", "🔉", "🔊", "⬅️", "➡️"].includes(reaction.emoji.id || reaction.emoji.name) && user.id !== message.client.user.id; - - var collector = await playingMessage.createReactionCollector(filter, { - time: song.duration > 0 ? song.duration * 1000 : 600000 - }); - collector.on("collect", async (reaction, user) => { - //return if no queue available - if (!queue) return; - - //create member out of the user - const member = reaction.message.guild.member(user); - - //remoe the reaction - reaction.users.remove(user); - - //if member not connected, return error - if (!member.voice.channel) return embedbuilder(client, 3000, message, config.colors.no, "`" + message.author.tag + "`" + " Você deve entrar em um canal de voz") - - //if member is not same vc as bot return error - if (member.voice.channel.id !== member.guild.me.voice.channel.id) return embedbuilder(client, 3000, message, config.colors.no, "`" + message.author.tag + "`" + "Você deve entrar no meu canal de voz") - - //if not a dj return error - if (check_if_dj(reaction.message, member)) - return embedbuilder(client, 6000, message, config.colors.no, "DJ-ROLE", `❌ Você não tem permissão para este comando! Você precisa ter: ${check_if_dj(message)}`) - - switch (reaction.emoji.id || reaction.emoji.name) { - case "⏭": - client.distube.skip(message); - embedbuilder(client, 3000, message, config.colors.yes, "PULADO!", `Pulou a música`) - try { - playingMessage.reactions.removeAll(); - } catch {} - - try { - playingMessage.delete({ - timeout: client.ws.ping - }); - } catch {} - break; - - case "⏹": - client.distube.stop(message); - try { - playingMessage.reactions.removeAll(); - } catch {} - try { - playingMessage.delete({ - timeout: client.ws.ping - }); - } catch {} - embedbuilder(client, 3000, message, config.colors.no, "PARADO!", `Saiu do canal`) - break; - - case "🔉": - await client.distube.setVolume(message, Number(queue.volume) - 10); - embedbuilder(client, 3000, message, config.colors.yes, "Volume!", `Reduziu o volume para \`${queue.volume}\``) - break; - - case "🔊": - await client.distube.setVolume(message, Number(queue.volume) + 10); - embedbuilder(client, 3000, message, config.colors.yes, "Volume!", `Aumentou o volume para \`${queue.volume}\``) - break; - - case "⬅️": - let seektime = queue.currentTime - 10000; - if (seektime < 0) seektime = 0; - await client.distube.seek(message, Number(seektime)); - - embedbuilder(client, 3000, message, config.colors.yes, "RETROCEDER!", `voltei a música por \`-10 segundos\``) - break; - - case "➡️": - let seektime2 = queue.currentTime + 10000; - if (seektime2 >= queue.songs[0].duration * 1000) { - seektime2 = queue.songs[0].duration * 1000 - 1; - } - await client.distube.seek(message, seektime2); - - embedbuilder(client, 3000, message, config.colors.yes, "AVANÇAR!", `Avancei a música por \`+10 segundos\``) - break; - default: - break; - } - }); - collector.on("end", () => { - playingMessage.reactions.removeAll(); - playingMessage.delete({ - timeout: client.ws.ping - }); - }) - } catch (error) { - console.log(error) - embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - errorbuilder(error.stack.toString().substr(0, 2000)) - } -} - -function curembed(client, message) { - try { - let djs = ""; - if (client.settings.get(message.guild.id, `djroles`).join("") === "") djs = "não configurado" - else - for (let i = 0; i < client.settings.get(message.guild.id, `djroles`).length; i++) { - djs += "<@&" + client.settings.get(message.guild.id, `djroles`)[i] + "> | " - } - - let queue = client.distube.getQueue(message); //get the current queue - let song = queue.songs[0]; - embed = new Discord.MessageEmbed() - .setColor(config.colors.yes) - .setTitle("🎶 Tocando música:") - .setDescription(`> [\`${song.name}\`](${song.url})`) - .addField("💡 Requerido por:", `>>> ${song.user}`, true) - .addField("⏱ Duração:", `>>> \`${queue.formattedCurrentTime} / ${song.formattedDuration}\``, true) - .addField("🌀 Fila:", `>>> \`${queue.songs.length} song(s) - ${queue.formattedDuration}\``, true) - .addField("🔊 Volume:", `>>> \`${queue.volume} %\``, true) - .addField("♾ Loop:", `>>> ${queue.repeatMode ? queue.repeatMode === 2 ? "✅ Fila" : "✅ Musica" : "❌"}`, true) - .addField("↪️ Autoplay:", `>>> ${queue.autoplay ? "✅" : "❌"}`, true) - .addField("❔ Filtro:", `>>> \`${queue.filter || "❌"}\``, true) - .addField("🎧 DJ-Role:", `>>> ${djs}`, true) - .setFooter(client.user.username + " | por: kingbot.cf", client.user.displayAvatarURL()) - .setAuthor(message.author.tag, message.member.user.displayAvatarURL({ - dynamic: true - }), "https://kingbot.cf") - .setThumbnail(song.thumbnail) - return embed; //sending the new embed back - } catch (error) { - console.log(error) - embedbuilder(5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - errorbuilder(error.stack.toString().substr(0, 2000)) - } -} - -function delay(delayInms) { - return new Promise(resolve => { - setTimeout(() => { - resolve(2); - }, delayInms); - }); -} - -function getRandomInt(max) { - return Math.floor(Math.random() * Math.floor(max)); -} \ No newline at end of file diff --git a/handlers/antiCrash.js b/handlers/antiCrash.js new file mode 100644 index 0000000..f61cdd5 --- /dev/null +++ b/handlers/antiCrash.js @@ -0,0 +1,18 @@ +module.exports = client => { + process.on('unhandledRejection', (reason, p) => { + console.log(' [antiCrash] :: Rejeição não tratada/Catch'); + console.log(reason, p); + }); + process.on("uncaughtException", (err, origin) => { + console.log(' [antiCrash] :: Exceção não capturada/Catch'); + console.log(err, origin); + }) + process.on('uncaughtExceptionMonitor', (err, origin) => { + console.log(' [antiCrash] :: Exceção não capturada/Catch (MONITOR)'); + console.log(err, origin); + }); + process.on('multipleResolves', (type, promise, reason) => { + console.log(' [antiCrash] :: Múltiplas Resoluções'); + console.log(type, promise, reason); + }); +} diff --git a/handlers/command.js b/handlers/command.js deleted file mode 100644 index 28da9f9..0000000 --- a/handlers/command.js +++ /dev/null @@ -1,186 +0,0 @@ -const {readdirSync} = require("fs"); -const c = require('colors') -const config = require("../config.json") -const ascii = require("ascii-table"); -let table = new ascii("Commands"); -const functions = require("../functions") -table.setHeading(c.brightCyan("Comando", "status")); -console.log(c.brightCyan("Bem-vindo ao SERVIÇO DE MANIPULAÇÃO")) -module.exports = (client) => { - readdirSync("./commands/").forEach(dir => { - const commands = readdirSync(`./commands/${dir}/`).filter(file => file.endsWith(".js")); - for (let file of commands) { - let pull = require(`../commands/${dir}/${file}`); - if (pull.name) { - client.commands.set(pull.name, pull); - table.addRow(file, '✅'); - } else { - table.addRow(file, `❌ -> cmd.name ausente ou cmd.name não é uma string.`); - continue; - } - if (pull.aliases && Array.isArray(pull.aliases)) pull.aliases.forEach(alias => client.aliases.set(alias, pull.name)); - } - }); - - const guildonlycounter = new Map(); - - - client.distube - .on("playSong", async (message, queue, song) => { - - client.infos.set("global", Number(client.infos.get("global", "songs")) + 1, "songs"); - - try { - queue.connection.voice.setDeaf(true); - } catch (error) { - console.error(error) - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - try { - queue.connection.voice.setSelfDeaf(true); - } catch (error) { - console.error(error) - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - try { - functions.playsongyes(client, message, queue, song); - } catch (error) { - console.error(error) - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - }) - .on("addSong", (message, queue, song) => { - try { - return functions.embedbuilder(client, 7500, message, config.colors.yes, "Adicionou uma música!", `Música: [\`${song.name}\`](${song.url}) - \`${song.formattedDuration}\` \n\nRequerido por: ${song.user}\n\nTempo estimado: ${queue.songs.length - 1} músicas(s) - \`${(Math.floor((queue.duration - song.duration) / 60 * 100) / 100).toString().replace(".", ":")}\`\nDuração da fila: \`${queue.formattedDuration}\``, song.thumbnail) - } catch (error) { - console.error(error) - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - }) - .on("playList", (message, queue, playlist, song) => { - try { - queue.connection.voice.setDeaf(true); - } catch (error) { - console.error(error) - functions.embedbuilder(5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - try { - queue.connection.voice.setSelfDeaf(true); - } catch (error) { - console.error(error) - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - functions.embedbuilder(client, 7500, message, config.colors.yes, "Adcionado a playList", `Playlist: [\`${playlist.name}\`](${playlist.url ? playlist.url : ""}) - \`${playlist.songs.length ? playlist.songs.length : "undefinied"} música\` \n\nRequerido por: ${queue.songs[0].user ? queue.songs[0].user : "error"}`, playlist.thumbnail.url ? playlist.thumbnail.url : "") - - try { - functions.playsongyes(client, message, queue, queue.songs[0]); - } catch (error) { - console.error(error) - functions.embedbuilder(client, 5000, message, "#ff264a", "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - }) - .on("addList", (message, queue, playlist) => { - try { - return functions.embedbuilder(client, 7500, message, config.colors.yes, "Adicionado a Playlist!", `Playlist: [\`${playlist.name}\`](${playlist.url ? playlist.url : ""}) - \`${playlist.songs.length ? playlist.songs.length : "undefinied"} músicas\` \n\nRequerido por: ${queue.songs[0].user ? queue.songs[0].user : "error"}`, playlist.thumbnail.url ? playlist.thumbnail.url : "") - } catch (error) { - console.error(error) - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - }) - .on("searchResult", (message, result) => { - try { - let i = 0; - return functions.embedbuilder(client, "null", message, config.colors.yes, "", `**Escolha uma opção abaixo**\n${result.map(song => `**${++i}**. [${song.name}](${song.url}) - \`${song.formattedDuration}\``).join("\n")}\n*Digite qualquer outra coisa ou aguarde 60 segundos para cancelar*`) - } catch (error) { - console.error(error) - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - }) - .on("searchCancel", (message) => { - try { - message.reactions.removeAll(); - message.react("❌") - } catch (error) { - console.error(error) - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - try { - return functions.embedbuilder(client, 5000, message, config.colors.yes, `Pesquisa cancelada`, "") - } catch (error) { - console.error(error) - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - }) - .on("error", (message, err) => { - try { - message.reactions.removeAll(); - message.react("❌") - } catch (error) { - console.error(error) - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - console.log(err); - try { - return functions.embedbuilder(client, "null", message, config.colors.yes, "Um erro encontrado:", "```" + err + "```") - } catch (error) { - console.error(error) - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - }) - .on("finish", message => { - try { - return functions.embedbuilder(client, 5000, message, config.colors.yes, "SINDO DO CANAL", "Não há mais músicas restantes") - } catch (error) { - console.error(error) - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - }) - .on("empty", message => { - - try { - return functions.embedbuilder(client, 5000, message, config.colors.yes, "Sai do canal porque ficou vazio!") - } catch (error) { - console.error(error) - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - }) - .on("noRelated", message => { - try { - return functions.embedbuilder(client, 5000, message, config.colors.yes, "Não é possível encontrar o vídeo relacionado para reproduzir. Pare de tocar música.") - } catch (error) { - console.error(error) - functions.embedbuilder(client, 5000, message, config.colors.no, "ERROR: ", "```" + error.toString().substr(0, 100) + "```" + "\n\n**Erro enviado ao meu proprietário!**") - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - }) - .on("initQueue", queue => { - try { - queue.autoplay = false; - queue.volume = 50; - queue.filter = "bassboost6"; - } catch (error) { - console.error(error) - functions.errorbuilder(error.stack.toString().substr(0, 2000)) - } - }); - - - console.log(table.toString()); - console.log(c.brightCyan("Bem-vindo ao SERVIÇO DE MANUTENÇÃO")) - console.log(c.brightRed("lOGANDO NO BOT DO USUÁRIO...")); -} diff --git a/handlers/commands.js b/handlers/commands.js new file mode 100644 index 0000000..06706b9 --- /dev/null +++ b/handlers/commands.js @@ -0,0 +1,26 @@ +const { + readdirSync +} = require("fs"); +console.log("Bem-vindo ao MANIPULADOR DE SERVIÇO".yellow); +module.exports = (client) => { + try { + let amount = 0; + readdirSync("./commands/").forEach((dir) => { + const commands = readdirSync(`./commands/${dir}/`).filter((file) => file.endsWith(".js")); + for (let file of commands) { + let pull = require(`../commands/${dir}/${file}`); + if (pull.name) { + client.commands.set(pull.name, pull); + amount++; + } else { + console.log(file, `error -> falta um help.name ou help.name não é uma string.`.brightRed); + continue; + } + if (pull.aliases && Array.isArray(pull.aliases)) pull.aliases.forEach((alias) => client.aliases.set(alias, pull.name)); + } + }); + console.log(`${amount} Comandos carregados`.brightGreen); + } catch (e) { + console.log(String(e.stack).bgRed) + } +}; \ No newline at end of file diff --git a/handlers/distubeEvent.js b/handlers/distubeEvent.js new file mode 100644 index 0000000..edf1f21 --- /dev/null +++ b/handlers/distubeEvent.js @@ -0,0 +1,608 @@ +console.log(`Bem-vindo ao MANIPULADOR DE SERVIÇO /--/`.yellow); +const PlayerMap = new Map() +const Discord = require(`discord.js`); +const { + KSoftClient +} = require('@ksoft/api'); +const config = require(`../botconfig/config.json`); +const ksoft = new KSoftClient(config.ksoftapi); +const ee = require(`../botconfig/embed.json`); +const { + MessageButton, + MessageActionRow, + MessageEmbed +} = require(`discord.js`); +const { + lyricsEmbed, check_if_dj +} = require("./functions"); +let songEditInterval = null; +module.exports = (client) => { + try { + client.distube + .on(`playSong`, async (queue, track) => { + try { + client.guilds.cache.get(queue.id).me.voice.setDeaf(true).catch((e) => { + console.log(e.stack ? String(e.stack).grey : String(e).grey) + }) + } catch (error) { + console.log(error) + } + try { + var newQueue = client.distube.getQueue(queue.id) + var newTrack = track; + var data = receiveQueueData(newQueue, newTrack) + //Send message with buttons + let currentSongPlayMsg = await queue.textChannel.send(data).then(msg => { + PlayerMap.set(`currentmsg`, msg.id); + return msg; + }) + //create a collector for the thinggy + var collector = currentSongPlayMsg.createMessageComponentCollector({ + filter: (i) => i.isButton() && i.user && i.message.author.id == client.user.id, + time: track.duration > 0 ? track.duration * 1000 : 600000 + }); //collector for 5 seconds + //array of all embeds, here simplified just 10 embeds with numbers 0 - 9 + let lastEdited = false; + + /** + * @INFORMATION - EDIT THE SONG MESSAGE EVERY 10 SECONDS! + */ + try{clearInterval(songEditInterval)}catch(e){} + songEditInterval = setInterval(async () => { + if (!lastEdited) { + try{ + var newQueue = client.distube.getQueue(queue.id) + var newTrack = newQueue.songs[0]; + var data = receiveQueueData(newQueue, newTrack) + await currentSongPlayMsg.edit(data).catch((e) => { + console.log(e.stack ? String(e.stack).grey : String(e).grey) + }) + }catch (e){ + clearInterval(songEditInterval) + } + } + }, 10000) + + collector.on('collect', async i => { + if(i.customId != `10` && check_if_dj(client, i.member, client.distube.getQueue(i.guild.id).songs[0])) { + return i.reply({embeds: [new MessageEmbed() + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon) + .setTitle(`${client.allEmojis.x} **Você não é um DJ e não é o solicitador da música!**`) + .setDescription(`**CARGO-DJ:**\n${check_if_dj(client, i.member, client.distube.getQueue(i.guild.id).songs[0])}`) + ], + ephemeral: true}); + } + lastEdited = true; + setTimeout(() => { + lastEdited = false + }, 7000) + //skip + if (i.customId == `1`) { + let { member } = i; + //get the channel instance from the Member + const { channel } = member.voice + //if the member is not in a channel, return + if (!channel) + return i.reply({ + content: `${client.allEmojis.x} **Por favor, junte-se a um canal de voz primeiro!**`, + ephemeral: true + }) + //get the player instance + const queue = client.distube.getQueue(i.guild.id); + //if no player available return aka not playing anything + if (!queue || !newQueue.songs || newQueue.songs.length == 0) { + return i.reply({ + content: `${client.allEmojis.x} Nada há nada tocando ainda`, + ephemeral: true + }) + } + //if not in the same channel as the player, return Error + if (channel.id !== newQueue.voiceChannel.id) + return i.reply({ + content: `${client.allEmojis.x} **Por favor entre no __meu__ canal de voz primeiro! <#${channel.id}>**`, + ephemeral: true + }) + //if ther is nothing more to skip then stop music and leave the Channel + if (newQueue.songs.length == 0) { + //if its on autoplay mode, then do autoplay before leaving... + i.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`<:stop:893931070410604594> **Parou de tocar e saiu do canal**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + clearInterval(songEditInterval); + //edit the current song message + await client.distube.stop(i.guild.id) + return + } + //skip the track + await client.distube.skip(i.guild.id) + i.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`<:next:893930822267195453> **Pulei para a próxima música!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } + //stop + if (i.customId == `2`) { + let { member } = i; + //get the channel instance from the Member + const { channel } = member.voice + //if the member is not in a channel, return + if (!channel) + return i.reply({ + content: `${client.allEmojis.x} **Por favor junte-se a um canal de voz primeiro!**`, + ephemeral: true + }) + + //if not in the same channel as the player, return Error + if (channel.id !== newQueue.voiceChannel.id) + return i.reply({ + content: `${client.allEmojis.x} **Por favor entre no __meu__ canal de voz primeiro! <#${channel.id}>**`, + ephemeral: true + }) + //stop the track + i.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`<:stop:893931070410604594> **Parou de tocar e saiu do canal!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + clearInterval(songEditInterval); + //edit the current song message + await client.distube.stop(i.guild.id) + } + //pause/resume + if (i.customId == `3`) { + let { member } = i; + //get the channel instance from the Member + const { channel } = member.voice + //if the member is not in a channel, return + if (!channel) + return i.reply({ + content: `${client.allEmojis.x} **Por favor junte-se a um canal de voz primeiro!**`, + ephemeral: true + }) + //if not in the same channel as the player, return Error + if (channel.id !== newQueue.voiceChannel.id) + return i.reply({ + content: `${client.allEmojis.x} **Por favor entre no __meu__ canal de voz primeiro! <#${channel.id}>**`, + ephemeral: true + }) + if (newQueue.playing) { + await client.distube.pause(i.guild.id); + var data = receiveQueueData(client.distube.getQueue(queue.id), newQueue.songs[0]) + currentSongPlayMsg.edit(data).catch((e) => { + //console.log(e.stack ? String(e.stack).grey : String(e).grey) + }) + i.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`<:pause:893930949149097985> **Pausado!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } else { + //pause the player + await client.distube.resume(i.guild.id); + var data = receiveQueueData(client.distube.getQueue(queue.id), newQueue.songs[0]) + currentSongPlayMsg.edit(data).catch((e) => { + //console.log(e.stack ? String(e.stack).grey : String(e).grey) + }) + i.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`<:play:893931043571249174> **Despausado!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } + } + //autoplay + if (i.customId == `4`) { + let { member } = i; + //get the channel instance from the Member + const { channel } = member.voice + //if the member is not in a channel, return + if (!channel) + return i.reply({ + content: `${client.allEmojis.x} **Por favor junte-se a um canal de voz primeiro!**`, + ephemeral: true + }) + //if not in the same channel as the player, return Error + if (channel.id !== newQueue.voiceChannel.id) + return i.reply({ + content: `${client.allEmojis.x} **Por favor entre no __meu__ canal de voz primeiro! <#${channel.id}>**`, + ephemeral: true + }) + //pause the player + await newQueue.toggleAutoplay() + if (newQueue.autoplay) { + var data = receiveQueueData(client.distube.getQueue(queue.id), newQueue.songs[0]) + currentSongPlayMsg.edit(data).catch((e) => { + //console.log(e.stack ? String(e.stack).grey : String(e).grey) + }) + } else { + var data = receiveQueueData(client.distube.getQueue(queue.id), newQueue.songs[0]) + currentSongPlayMsg.edit(data).catch((e) => { + //console.log(e.stack ? String(e.stack).grey : String(e).grey) + }) + } + //Send PRIMARY Message + i.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`${newQueue.autoplay ? `${client.allEmojis.check_mark} **Autoplay ativado**`: `${client.allEmojis.x} **Autoplay desativado**`}`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } + //Shuffle + if(i.customId == `5`){ + let { member } = i; + //get the channel instance from the Member + const { channel } = member.voice + //if the member is not in a channel, return + if (!channel) + return i.reply({ + content: `${client.allEmojis.x} **Por favor junte-se a um canal de voz primeiro!**`, + ephemeral: true + }) + //if not in the same channel as the player, return Error + if (channel.id !== newQueue.voiceChannel.id) + return i.reply({ + content: `${client.allEmojis.x} **Por favor entre no __meu__ canal de voz primeiro! <#${channel.id}>**`, + ephemeral: true + }) + //pause the player + await newQueue.shuffle() + //Send PRIMARY Message + i.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`<:shuffle:893942706269749278> **Aleátorio ${newQueue.songs.length} Songs!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + } + //Songloop + if(i.customId == `6`){ + let { member } = i; + //get the channel instance from the Member + const { channel } = member.voice + //if the member is not in a channel, return + if (!channel) + return i.reply({ + content: `${client.allEmojis.x} **Por favor junte-se a um canal de voz primeiro!**`, + ephemeral: true + }) + //if not in the same channel as the player, return Error + if (channel.id !== newQueue.voiceChannel.id) + return i.reply({ + content: `${client.allEmojis.x} **Por favor entre no __meu__ canal de voz primeiro! <#${channel.id}>**`, + ephemeral: true + }) + //Disable the Repeatmode + if(newQueue.repeatMode == 1){ + await newQueue.setRepeatMode(0) + } + //Enable it + else { + await newQueue.setRepeatMode(1) + } + i.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`${newQueue.repeatMode == 1 ? `${client.allEmojis.check_mark} **Loop ativado**`: `${client.allEmojis.x} **Loop desativado**`}`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + var data = receiveQueueData(client.distube.getQueue(queue.id), newQueue.songs[0]) + currentSongPlayMsg.edit(data).catch((e) => { + //console.log(e.stack ? String(e.stack).grey : String(e).grey) + }) + } + //Queueloop + if(i.customId == `7`){ + let { member } = i; + //get the channel instance from the Member + const { channel } = member.voice + //if the member is not in a channel, return + if (!channel) + return i.reply({ + content: `${client.allEmojis.x} **Por favor junte-se a um canal de voz primeiro!**`, + ephemeral: true + }) + //if not in the same channel as the player, return Error + if (channel.id !== newQueue.voiceChannel.id) + return i.reply({ + content: `${client.allEmojis.x} **Por favor entre no __meu__ canal de voz primeiro! <#${channel.id}>**`, + ephemeral: true + }) + //Disable the Repeatmode + if(newQueue.repeatMode == 2){ + await newQueue.setRepeatMode(0) + } + //Enable it + else { + await newQueue.setRepeatMode(2) + } + i.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`${newQueue.repeatMode == 2 ? `${client.allEmojis.check_mark} **Loop ativado**`: `${client.allEmojis.x} **Loop desativado**`}`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + var data = receiveQueueData(client.distube.getQueue(queue.id), newQueue.songs[0]) + currentSongPlayMsg.edit(data).catch((e) => { + //console.log(e.stack ? String(e.stack).grey : String(e).grey) + }) + } + //Forward + if(i.customId == `8`){ + let { member } = i; + //get the channel instance from the Member + const { channel } = member.voice + //if the member is not in a channel, return + if (!channel) + return i.reply({ + content: `${client.allEmojis.x} **Por favor junte-se a um canal de voz primeiro!**`, + ephemeral: true + }) + //if not in the same channel as the player, return Error + if (channel.id !== newQueue.voiceChannel.id) + return i.reply({ + content: `${client.allEmojis.x} **Por favor entre no __meu__ canal de voz primeiro! <#${channel.id}>**`, + ephemeral: true + }) + let seektime = newQueue.currentTime + 10; + if (seektime >= newQueue.songs[0].duration) seektime = newQueue.songs[0].duration - 1; + await newQueue.seek(Number(seektime)) + collector.resetTimer({time: (newQueue.songs[0].duration - newQueue.currentTime) * 1000}) + i.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`<:avancar:893930980312760390> **Avançou a música por \`10 Segundos\`!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + var data = receiveQueueData(client.distube.getQueue(queue.id), newQueue.songs[0]) + currentSongPlayMsg.edit(data).catch((e) => { + //console.log(e.stack ? String(e.stack).grey : String(e).grey) + }) + } + //Rewind + if(i.customId == `9`){ + let { member } = i; + //get the channel instance from the Member + const { channel } = member.voice + //if the member is not in a channel, return + if (!channel) + return i.reply({ + content: `${client.allEmojis.x} **Por favor junte-se a um canal de voz primeiro!**`, + ephemeral: true + }) + //if not in the same channel as the player, return Error + if (channel.id !== newQueue.voiceChannel.id) + return i.reply({ + content: `${client.allEmojis.x} **Por favor entre no __meu__ canal de voz primeiro! <#${channel.id}>**`, + ephemeral: true + }) + let seektime = newQueue.currentTime - 10; + if (seektime < 0) seektime = 0; + if (seektime >= newQueue.songs[0].duration - newQueue.currentTime) seektime = 0; + await newQueue.seek(Number(seektime)) + collector.resetTimer({time: (newQueue.songs[0].duration - newQueue.currentTime) * 1000}) + i.reply({ + embeds: [new MessageEmbed() + .setColor(ee.color) + .setTimestamp() + .setTitle(`<:voltar:893930880307961886> **Retrocedeu a música por \`10 Segundos\`!**`) + .setFooter(`Ação por: ${member.user.tag}`, member.user.displayAvatarURL({dynamic: true}))] + }) + var data = receiveQueueData(client.distube.getQueue(queue.id), newQueue.songs[0]) + currentSongPlayMsg.edit(data).catch((e) => { + //console.log(e.stack ? String(e.stack).grey : String(e).grey) + }) + } + //Lyrics + if(i.customId == `10`){let { member } = i; + //get the channel instance from the Member + const { channel } = member.voice + //if the member is not in a channel, return + if (!channel) + return i.reply({ + content: `${client.allEmojis.x} **Por favor junte-se a um canal de voz primeiro!**`, + ephemeral: true + }) + //if not in the same channel as the player, return Error + if (channel.id !== newQueue.voiceChannel.id) + return i.reply({ + content: `${client.allEmojis.x} **Por favor entre no __meu__ canal de voz primeiro! <#${channel.id}>**`, + ephemeral: true + }) + return i.reply({ + content: `${client.allEmojis.x} **As letras estão desativadas!** \n> *Devido a motivos legais, as letras estão desativadas e não funcionarão por um período de tempo indeterminado* :cry:`, + ephemeral: true + }); + let embeds = []; + await ksoft.lyrics.get(newQueue.songs[0].name).then( + async track => { + if (!track.lyrics) return i.reply({content: `${client.allEmojis.x} **Nenhuma letra encontrada!** :cry:`, ephemeral: true}); + lyrics = track.lyrics; + embeds = lyricsEmbed(lyrics, newQueue.songs[0]); + }).catch(e=>{ + console.log(e) + return i.reply({content: `${client.allEmojis.x} **Nenhuma letra encontrada!** :cry:\n${String(e).substr(0, 1800)}`, ephemeral: true}); + }) + i.reply({ + embeds: embeds, ephemeral: true + }) + } + }); + } catch (error) { + console.error(error) + } + }) + .on(`addSong`, (queue, song) => queue.textChannel.send({ + embeds: [ + new MessageEmbed() + .setColor(ee.color) + .setThumbnail(`https://img.youtube.com/vi/${song.id}/mqdefault.jpg`) + .setFooter(" " + song.user.tag, song.user.displayAvatarURL({ + dynamic: true + })) + .setTitle(`${client.allEmojis.check_mark} **Música adicionada à fila de reprodução!**`) + .setDescription(`<:queue:893912259535966238> Música: [\`${song.name}\`](${song.url}) - \`${song.formattedDuration}\``) + .addField(`<:duration:893938822386163723> **Tempo estimado:**`, `\`${queue.songs.length - 1} song${queue.songs.length > 0 ? "s" : ""}\` - \`${(Math.floor((queue.duration - song.duration) / 60 * 100) / 100).toString().replace(".", ":")}\``) + .addField(`<:queue:893912259535966238> **Duração da fila:**`, `\`${queue.formattedDuration}\``) + ] + })) + .on(`addList`, (queue, playlist) => queue.textChannel.send({ + embeds: [ + new MessageEmbed() + .setColor(ee.color) + .setThumbnail(playlist.thumbnail.url ? playlist.thumbnail.url : `https://img.youtube.com/vi/${playlist.songs[0].id}/mqdefault.jpg`) + .setFooter("" + playlist.user.tag, playlist.user.displayAvatarURL({ + dynamic: true + })) + .setTitle(`${client.allEmojis.check_mark} **Playlist added to the Queue!**`) + .setDescription(`<:queue:893912259535966238> Playlist: [\`${playlist.name}\`](${playlist.url ? playlist.url : ""}) - \`${playlist.songs.length} Música${playlist.songs.length > 0 ? "s" : ""}\``) + .addField(`<:duration:893938822386163723> **Tempo estimado:**`, `\`${queue.songs.length - - playlist.songs.length} song${queue.songs.length > 0 ? "s" : ""}\` - \`${(Math.floor((queue.duration - playlist.duration) / 60 * 100) / 100).toString().replace(".", ":")}\``) + .addField(`<:queue:893912259535966238> **Duração da fila:**`, `\`${queue.formattedDuration}\``) + ] + })) + // DisTubeOptions.searchSongs = true + .on(`searchResult`, (message, result) => { + let i = 0 + message.channel.send(`**Escolha uma opção abaixo**\n${result.map((song) => `**${++i}**. ${song.name} - \`${song.formattedDuration}\``).join(`\n`)}\n*Digite qualquer outra coisa ou aguarde 60 segundos para cancelar*`) + }) + // DisTubeOptions.searchSongs = true + .on(`searchCancel`, message => message.channel.send(`Pesquisa cancelada`).catch((e)=>console.log(e))) + .on(`error`, (channel, e) => { + channel.send(`Um erro encontrado: ${e}`).catch((e)=>console.log(e)) + console.error(e) + }) + .on(`empty`, channel => channel.send(`O canal de voz está vazio! Saindo do canal...`).catch((e)=>console.log(e))) + .on(`searchNoResult`, message => message.channel.send(`nenhum resultado encontrado!`).catch((e)=>console.log(e))) + .on(`finishSong`, (queue, song) => { + var embed = new MessageEmbed().setColor(ee.color) + .setAuthor(`${song.name}`, "https://images-ext-2.discordapp.net/external/Q16BMFNhO29X2_DgKf3tJk2YOsC0jQ0yu6qPyxqwO9w/https/media.discordapp.net/attachments/883978730261860383/883978741892649000/847032838998196234.png", song.url) + .setDescription(`Veja a [fila no **DASHBOARD** ao vivo!](${require("../dashboard/settings.json").website.domain}/${queue.id})`) + .setThumbnail(`https://img.youtube.com/vi/${song.id}/mqdefault.jpg`) + .setFooter(` ${song.user.tag}\n⛔️ A MÚSICA ACABOU!`, song.user.displayAvatarURL({ + dynamic: true + })); + queue.textChannel.messages.fetch(PlayerMap.get(`currentmsg`)).then(currentSongPlayMsg=>{ + currentSongPlayMsg.edit({embeds: [embed], components: []}).catch((e) => { + console.log(e.stack ? String(e.stack).grey : String(e).grey) + }) + }).catch((e) => { + console.log(e.stack ? String(e.stack).grey : String(e).grey) + }) + }) + .on(`finish`, queue => { + queue.textChannel.send({ + embeds: [ + new MessageEmbed().setColor(ee.color).setFooter(ee.footertext, ee.footericon) + .setTitle("⛔️ SAINDO DO CANAL") + .setDescription("<:queue:893912259535966238> **Não há mais músicas restantes**") + .setTimestamp() + ] + }) + }) + .on(`initQueue`, queue => { + try { + client.settings.ensure(queue.id, { + defaultvolume: 50, + defaultautoplay: false, + defaultfilters: [`bassboost6`, `clear`] + }) + let data = client.settings.get(queue.id) + queue.autoplay = Boolean(data.defaultautoplay); + queue.volume = Number(data.defaultvolume); + queue.setFilter(data.defaultfilters); + } catch (error) { + console.error(error) + } + }); + } catch (e) { + console.log(String(e.stack).bgRed) + } + + function receiveQueueData(newQueue, newTrack) { + var djs = client.settings.get(newQueue.id, `djroles`); + if(!djs || !Array.isArray(djs)) djs = []; + else djs = djs.map(r => `<@&${r}>`); + if(djs.length == 0 ) djs = "`não configurado`"; + else djs.slice(0, 15).join(", "); + if(!newTrack) return new MessageEmbed().setColor(ee.wrongcolor).setTitle("NO SONG FOUND?!?!") + var embed = new MessageEmbed().setColor(ee.color) + .setDescription(`Veja a [fila no ** DASHBOARD ** ao vivo!](${require("../dashboard/settings.json").website.domain}/queue/${newQueue.id})`) + .addField(`<:required:893938878380122122> Requerido por:`, `>>> ${newTrack.user}`, true) + .addField(`<:duration:893938822386163723> Duração:`, `>>> \`${newQueue.formattedCurrentTime} / ${newTrack.formattedDuration}\``, true) + .addField(`<:queue:893912259535966238> Fila:`, `>>> \`${newQueue.songs.length} música(s)\`\n\`${newQueue.formattedDuration}\``, true) + .addField(`<:volume:893912366905954365> Volume:`, `>>> \`${newQueue.volume} %\``, true) + .addField(`<:autoplay1:893938933891756073> Loop:`, `>>> ${newQueue.repeatMode ? newQueue.repeatMode === 2 ? `${client.allEmojis.check_mark}\` Queue\`` : `${client.allEmojis.check_mark} \`Song\`` : `${client.allEmojis.x}`}`, true) + .addField(`<:autoplay:893912311729897544> Autoplay:`, `>>> ${newQueue.autoplay ? `${client.allEmojis.check_mark}` : `${client.allEmojis.x}`}`, true) + .addField(`<:download:893912200207548507> Baixar música:`, `>>> [\`Clique aqui\`](${newTrack.streamURL})`, true) + .addField(`<:filter:893938850311835658> Filtro${newQueue.filters.length > 0 ? "s": ""}:`, `>>> ${newQueue.filters && newQueue.filters.length > 0 ? `${newQueue.filters.map(f=>`\`${f}\``).join(`, `)}` : `${client.allEmojis.x}`}`, newQueue.filters.length > 1 ? false : true) + .addField(`<:dj:893912114203332729> CARGO-DJ${client.settings.get(newQueue.id, "djroles").length > 1 ? "s": ""}:`, `>>> ${djs}`, client.settings.get(newQueue.id, "djroles").length > 1 ? false : true) + .setAuthor(`${newTrack.name}`, `https://images-ext-1.discordapp.net/external/iAtXPtuThJzes9sxragLd-lwLt-oCMNsXYTSqumoenw/https/c.tenor.com/HJvqN2i4Zs4AAAAj/milk-and-mocha-cute.gif`, newTrack.url) + .setThumbnail(`https://img.youtube.com/vi/${newTrack.id}/mqdefault.jpg`) + .setFooter(` ${newTrack.user.tag}`, newTrack.user.displayAvatarURL({ + dynamic: true + })); + let skip = new MessageButton().setStyle('PRIMARY').setCustomId('1').setEmoji(`<:next:893930822267195453>`).setLabel(`Pular`) + let stop = new MessageButton().setStyle('DANGER').setCustomId('2').setEmoji(`<:stop:893931070410604594>`).setLabel(`Parar`) + let pause = new MessageButton().setStyle('PRIMARY').setCustomId('3').setEmoji('<:pause:893930949149097985>').setLabel(`Pausar`) + let autoplay = new MessageButton().setStyle('PRIMARY').setCustomId('4').setEmoji('<:autoplay2:893968830286692402>').setLabel(`Autoplay`) + let shuffle = new MessageButton().setStyle('PRIMARY').setCustomId('5').setEmoji('<:shuffle1:893972682633261076>').setLabel(`Aleátorio`) + if (!newQueue.playing) { + pause = pause.setStyle('DANGER').setEmoji('<:play:893931043571249174>').setLabel(`Despausar`) + } + if (newQueue.autoplay) { + autoplay = autoplay.setStyle('SECONDARY') + } + let songloop = new MessageButton().setStyle('PRIMARY').setCustomId('6').setEmoji(`<:fila:893969838983229461>`).setLabel(`Música`) + let queueloop = new MessageButton().setStyle('PRIMARY').setCustomId('7').setEmoji(`<:random:893968760078217236>`).setLabel(`Fila`) + let forward = new MessageButton().setStyle('PRIMARY').setCustomId('8').setEmoji('<:avancar:893930980312760390>').setLabel(`+10 Seg`) + let rewind = new MessageButton().setStyle('PRIMARY').setCustomId('9').setEmoji('<:voltar:893930880307961886>').setLabel(`-10 Seg`) + let lyrics = new MessageButton().setStyle('PRIMARY').setCustomId('10').setEmoji('<:lirycs:893930920212586537>').setLabel(`Letra`).setDisabled(); + if (newQueue.repeatMode === 0) { + songloop = songloop.setStyle('PRIMARY') + queueloop = queueloop.setStyle('PRIMARY') + } + if (newQueue.repeatMode === 1) { + songloop = songloop.setStyle('SECONDARY') + queueloop = queueloop.setStyle('PRIMARY') + } + if (newQueue.repeatMode === 2) { + songloop = songloop.setStyle('PRIMARY') + queueloop = queueloop.setStyle('SECONDARY') + } + if (Math.floor(newQueue.currentTime) < 10) { + rewind = rewind.setDisabled() + } else { + rewind = rewind.setDisabled(false) + } + if (Math.floor((newTrack.duration - newQueue.currentTime)) <= 10) { + forward = forward.setDisabled() + } else { + forward = forward.setDisabled(false) + } + const row = new MessageActionRow().addComponents([skip, stop, pause, autoplay, shuffle]); + const row2 = new MessageActionRow().addComponents([songloop, queueloop, forward, rewind, lyrics]); + return { + embeds: [embed], + components: [row, row2] + }; + } +}; \ No newline at end of file diff --git a/handlers/events.js b/handlers/events.js new file mode 100644 index 0000000..acfb7db --- /dev/null +++ b/handlers/events.js @@ -0,0 +1,48 @@ +const fs = require("fs"); +const allevents = []; +module.exports = async (client) => { + try { + try { + const stringlength = 69; + console.log("\n") + console.log(` ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓`.bold.brightGreen) + console.log(` ┃ `.bold.brightGreen + " ".repeat(-1 + stringlength - ` ┃ `.length) + "┃".bold.brightGreen) + console.log(` ┃ `.bold.brightGreen + `Bem-vindo ao MANIPULADOR DE SERVIÇO!`.bold.brightGreen + " ".repeat(-1 + stringlength - ` ┃ `.length - `Bem-vindo ao MANIPULADOR DE SERVIÇO!`.length) + "┃".bold.brightGreen) + console.log(` ┃ `.bold.brightGreen + ` /-/ /-/`.bold.brightGreen + " ".repeat(-1 + stringlength - ` ┃ `.length - ` /-/ /-/`.length) + "┃".bold.brightGreen) + console.log(` ┃ `.bold.brightGreen + " ".repeat(-1 + stringlength - ` ┃ `.length) + "┃".bold.brightGreen) + console.log(` ┃ `.bold.brightGreen + ` /-/ /-/`.bold.brightGreen + " ".repeat(-1 + stringlength - ` ┃ `.length - ` /-/ /-/`.length) + " ┃".bold.brightGreen) + console.log(` ┃ `.bold.brightGreen + " ".repeat(-1 + stringlength - ` ┃ `.length) + "┃".bold.brightGreen) + console.log(` ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛`.bold.brightGreen) + } catch { + /* */ } + let amount = 0; + const load_dir = (dir) => { + const event_files = fs.readdirSync(`./events/${dir}`).filter((file) => file.endsWith(".js")); + for (const file of event_files) { + try { + const event = require(`../events/${dir}/${file}`) + let eventName = file.split(".")[0]; + allevents.push(eventName); + client.on(eventName, event.bind(null, client)); + amount++; + } catch (e) { + console.log(e) + } + } + } + await ["client", "guild"].forEach(e => load_dir(e)); + console.log(`${amount} Eventos carregados`.brightGreen); + try { + const stringlength2 = 69; + console.log("\n") + console.log(` ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓`.bold.yellow) + console.log(` ┃ `.bold.yellow + " ".repeat(-1 + stringlength2 - ` ┃ `.length) + "┃".bold.yellow) + console.log(` ┃ `.bold.yellow + `Logando no bot...`.bold.yellow + " ".repeat(-1 + stringlength2 - ` ┃ `.length - `Logando no bot...`.length) + "┃".bold.yellow) + console.log(` ┃ `.bold.yellow + " ".repeat(-1 + stringlength2 - ` ┃ `.length) + "┃".bold.yellow) + console.log(` ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛`.bold.yellow) + } catch { + /* */ } + } catch (e) { + console.log(String(e.stack).bgRed) + } +}; \ No newline at end of file diff --git a/handlers/functions.js b/handlers/functions.js new file mode 100644 index 0000000..cf1150b --- /dev/null +++ b/handlers/functions.js @@ -0,0 +1,789 @@ +const { + MessageEmbed, + Collection + } = require("discord.js"); + const Discord = require("discord.js") + const config = require("../botconfig/config.json"); + const ee = require("../botconfig/embed.json"); + const settings = require("../botconfig/settings.json"); + //EXPORT ALL FUNCTIONS + module.exports.nFormatter = nFormatter; + module.exports.change_status = change_status; + module.exports.shuffle = shuffle; + module.exports.formatDate = formatDate; + module.exports.delay = delay; + module.exports.getRandomInt = getRandomInt; + module.exports.duration = duration; + module.exports.getRandomNum = getRandomNum; + module.exports.createBar = createBar; + module.exports.format = format; + module.exports.swap_pages = swap_pages; + module.exports.swap_pages2 = swap_pages2; + module.exports.escapeRegex = escapeRegex; + module.exports.arrayMove = arrayMove; + module.exports.isValidURL = isValidURL; + module.exports.GetUser = GetUser; + module.exports.GetRole = GetRole; + module.exports.GetGlobalUser = GetGlobalUser; + module.exports.parseMilliseconds = parseMilliseconds; + module.exports.onCoolDown = onCoolDown; + +module.exports.formatDate = formatDate; +module.exports.customplaylistembed = customplaylistembed; +module.exports.lyricsEmbed = lyricsEmbed; +module.exports.check_if_dj = check_if_dj; + +function check_if_dj(client, member, song) { + //if no message added return + if(!client) return false; + //get the adminroles + var roleid = client.settings.get(member.guild.id, `djroles`) + //if no dj roles return false, so that it continues + if (String(roleid) == "") return false; + + //define variables + var isdj = false; + + //loop through the roles + for (let i = 0; i < roleid.length; i++) { + //if the role does not exist, then skip this current loop run + if (!member.guild.roles.cache.get(roleid[i])) continue; + //if he has role set var to true + if (member.roles.cache.has(roleid[i])) isdj = true; + //add the role to the string + } + //if no dj and not an admin, return the string + if (!isdj && !member.permissions.has("ADMINISTRATOR") && song.user.id != member.id) + return roleid.map(i=>`<@&${i}>`).join(", "); + //if he is a dj or admin, then return false, which will continue the cmd + else + return false; +} + +function customplaylistembed(lyrics, song) { + if (!lyrics) lyrics = "Nenhuma música na lista de reprodução!"; + try { + let embeds = []; + let k = 1000; + for (let i = 0; i < lyrics.length; i += 1000) { + const current = lyrics.slice(i, k); + k += 1000; + const embed = new Discord.MessageEmbed() + .setTitle("Lista de reprodução personalizada") + .setColor(config.colors.yes) + .setDescription(current) + embeds.push(embed); + } + return embeds; + } catch (error) { + console.log(error) + } +} + +function lyricsEmbed(lyrics, song) { + try { + let embeds = []; + let k = 1000; + for (let i = 0; i < lyrics.length; i += 1000) { + const current = lyrics.slice(i, k); + k += 1000; + const embed = new Discord.MessageEmbed() + .setTitle("Letra - " + song.name) + .setURL(song.url) + .setThumbnail(song.thumbnail) + .setFooter(`Música solicitada por: ${song.user.tag}`, song.user.displayAvatarURL({dynamic: true})) + .setColor(ee.color) + .setDescription(current) + embeds.push(embed); + } + return embeds; + } catch (error) { + console.log(error) + } +} + module.exports.replacemsg = replacedefaultmessages + /** + * + * @param {*} text The Text that should be replaced, usually from /botconfig/settings.json + * @param {*} options Those Options are what are needed for the replaceMent! Valid ones are: { + * timeLeft: "", + * commandmemberpermissions: { memberpermissions: [] }, + * commandalloweduserids: { alloweduserids: [] }, + * commandrequiredroles: { requiredroles: [] }, + * commandname: { name: "" }, + * commandaliases: { aliases: [] }, + * prefix: "", + * errormessage: { message: "" } + * errorstack: { stack: STACK } + * error: ERRORTYPE + * } + * @returns STRING + */ + function replacedefaultmessages(text, o = {}){ + if(!text || text == undefined || text == null) throw "Nenhum texto para a mensagem de padrão substituído adicionado como primeiro parâmetro"; + const options = Object(o) + if(!options || options == undefined || options == null) return String(text) + return String(text) + .replace(/%{timeleft}%/gi, options && options.timeLeft ? options.timeLeft.toFixed(1) : "%{timeleft}%") + .replace(/%{commandname}%/gi, options && options.command && options.command.name ? options.command.name : "%{commandname}%") + .replace(/%{commandaliases}%/gi, options && options.command && options.command.aliases ? options.command.aliases.map(v => `\`${v}\``).join(",") : "%{commandaliases}%") + .replace(/%{prefix}%/gi, options && options.prefix ? options.prefix : "%{prefix}%") + .replace(/%{commandmemberpermissions}%/gi, options && options.command && options.command.memberpermissions ? options.command.memberpermissions.map(v => `\`${v}\``).join(",") : "%{commandmemberpermissions}%") + .replace(/%{commandalloweduserids}%/gi, options && options.command &&options.command.alloweduserids ? options.command.alloweduserids.map(v => `<@${v}>`).join(",") : "%{commandalloweduserids}%") + .replace(/%{commandrequiredroles}%/gi, options && options.command &&options.command.requiredroles ? options.command.requiredroles.map(v => `<@&${v}>`).join(",") : "%{commandrequiredroles}%") + .replace(/%{errormessage}%/gi, options && options.error && options.error.message ? options.error.message : options && options.error ? options.error : "%{errormessage}%") + .replace(/%{errorstack}%/gi, options && options.error && options.error.stack ? options.error.stack : options && options.error && options.error.message ? options.error.message : options && options.error ? options.error : "%{errorstack}%") + .replace(/%{error}%/gi, options && options.error ? options.error : "%{error}%") + + } + + /** + * + * @param {*} message A DiscordMessage, with the client, information + * @param {*} command The Command with the command.name + * @returns BOOLEAN + */ + +function onCoolDown(message, command) { + if(!message || !message.client) throw "Nenhuma mensagem com um DiscordClient válido concedido como primeiro parâmetro"; + if(!command || !command.name) throw "Nenhum comando com um nome válido concedido como segundo parâmetro"; + const client = message.client; + if (!client.cooldowns.has(command.name)) { //if its not in the cooldown, set it too there + client.cooldowns.set(command.name, new Collection()); + } + const now = Date.now(); //get the current time + const timestamps = client.cooldowns.get(command.name); //get the timestamp of the last used commands + const cooldownAmount = (command.cooldown || settings.default_cooldown_in_sec) * 1000; //get the cooldownamount of the command, if there is no cooldown there will be automatically 1 sec cooldown, so you cannot spam it^^ + if (timestamps.has(message.member.id)) { //if the user is on cooldown + const expirationTime = timestamps.get(message.member.id) + cooldownAmount; //get the amount of time he needs to wait until he can run the cmd again + if (now < expirationTime) { //if he is still on cooldonw + const timeLeft = (expirationTime - now) / 1000; //get the lefttime + //return true + return timeLeft + } + else { + //if he is not on cooldown, set it to the cooldown + timestamps.set(message.member.id, now); + //set a timeout function with the cooldown, so it gets deleted later on again + setTimeout(() => timestamps.delete(message.member.id), cooldownAmount); + //return false aka not on cooldown + return false; + } + } + else { + //if he is not on cooldown, set it to the cooldown + timestamps.set(message.member.id, now); + //set a timeout function with the cooldown, so it gets deleted later on again + setTimeout(() => timestamps.delete(message.member.id), cooldownAmount); + //return false aka not on cooldown + return false; + } + } + + /** + * + * @param {*} milliseconds NUMBER | TIME IN MILLISECONDS + * @returns Object of Formatted Time in Days to nanoseconds + */ + function parseMilliseconds(milliseconds) { + if (typeof milliseconds !== 'number') { + throw new TypeError('Expected a number'); + } + + return { + days: Math.trunc(milliseconds / 86400000), + hours: Math.trunc(milliseconds / 3600000) % 24, + minutes: Math.trunc(milliseconds / 60000) % 60, + seconds: Math.trunc(milliseconds / 1000) % 60, + milliseconds: Math.trunc(milliseconds) % 1000, + microseconds: Math.trunc(milliseconds * 1000) % 1000, + nanoseconds: Math.trunc(milliseconds * 1e6) % 1000 + }; + } + + /** + * + * @param {*} string A WHOLE TEXT, checks if there is a URL IN IT + * @returns BOOLEAN/THE URL + */ + function isValidURL(string) { + const args = string.split(" "); + let url; + for(const arg of args){ + try { + url = new URL(arg); + url = url.protocol === "http:" || url.protocol === "https:"; + break; + } catch (_) { + url = false; + } + } + return url; + }; + + /** + * + * @param {*} message a DISCORDMESSAGE with the Content and guild and client information + * @param {*} arg //a argument, for search for example + * @returns BOOLEAN/DISCORDUSER + */ + function GetUser(message, arg){ + var errormessage = ":x: Não consegui encontrar esse usuário..."; + return new Promise(async (resolve, reject) => { + var args = arg, client = message.client; + if(!client || !message) return reject("CLIENTE NÃO ESTÁ DEFINIDO") + if(!args || args == null || args == undefined) args = message.content.trim().split(/ +/).slice(1); + let user = message.mentions.users.first(); + if(!user && args[0] && args[0].length == 18) { + user = await client.users.fetch(args[0]) + if(!user) return reject(errormessage) + return resolve(user); + } + else if(!user && args[0]){ + let alluser = message.guild.members.cache.map(member=> String(member.user.tag).toLowerCase()) + user = alluser.find(user => user.startsWith(args.join(" ").toLowerCase())) + user = message.guild.members.cache.find(me => String(me.user.tag).toLowerCase() == user) + if(!user || user == null || !user.id) { + alluser = message.guild.members.cache.map(member => String(member.displayName + "#" + member.user.discriminator).toLowerCase()) + user = alluser.find(user => user.startsWith(args.join(" ").toLowerCase())) + user = message.guild.members.cache.find(me => String(me.displayName + "#" + me.user.discriminator).toLowerCase() == user) + if(!user || user == null || !user.id) return reject(errormessage) + } + user = await client.users.fetch(user.user.id) + if(!user) return reject(errormessage) + return resolve(user); + } + else { + user = message.mentions.users.first() || message.author; + return resolve(user); + } + }) + } + + /** + * + * @param {*} message a DISCORDMESSAGE with the Content and guild and client information + * @param {*} arg //a argument, for search for example + * @returns BOOLEAN/GUILDROLE + */ + function GetRole(message, arg){ + var errormessage = ":x: Eu falhei em encontrar esse cargo..."; + return new Promise(async (resolve, reject) => { + var args = arg, client = message.client; + if(!client || !message) return reject("CLIENTE NÃO ESTÁ DEFINIDO") + if(!args || args == null || args == undefined) args = message.content.trim().split(/ +/).slice(1); + let user = message.mentions.roles.filter(role=>role.guild.id==message.guild.id).first(); + if(!user && args[0] && args[0].length == 18) { + user = message.guild.roles.cache.get(args[0]) + if(!user) return reject(errormessage) + return resolve(user); + } + else if(!user && args[0]){ + let alluser = message.guild.roles.cache.map(role => String(role.name).toLowerCase()) + user = alluser.find(r => r.split(" ").join("").includes(args.join("").toLowerCase())) + user = message.guild.roles.cache.find(role => String(role.name).toLowerCase() === user) + if(!user) return reject(errormessage) + return resolve(user); + } + else { + user = message.mentions.roles.filter(role=>role.guild.id==message.guild.id).first(); + if(!user) return reject(errormessage) + return resolve(user); + } + }) + } + + + /** + * + * @param {*} message a DISCORDMESSAGE with the Content and guild and client information + * @param {*} arg //a argument, for search for example + * @returns BOOLEAN/DISCORDUSER + */ + function GetGlobalUser(message, arg){ + var errormessage = ":x: Não consegui encontrar esse usuário..."; + return new Promise(async (resolve, reject) => { + var args = arg, client = message.client; + if(!client || !message) return reject("CLIENTE NÃO ESTÁ DEFINIDO") + if(!args || args == null || args == undefined) args = message.content.trim().split(/ +/).slice(1); + let user = message.mentions.users.first(); + if(!user && args[0] && args[0].length == 18) { + user = await client.users.fetch(args[0]) + if(!user) return reject(errormessage) + return resolve(user); + } + else if(!user && args[0]){ + let alluser = [], allmembers = []; + var guilds = Array.from(client.guilds.cache.values()) + for(const g of guilds){ + var members = Array.from(g.members.cache.values()); + for(const m of members) { alluser.push(m.user.tag); allmembers.push(m); } + } + user = alluser.find(user => user.startsWith(args.join(" ").toLowerCase())) + user = allmembers.find(me => String(me.user.tag).toLowerCase() == user) + if(!user || user == null || !user.id) { + user = alluser.find(user => user.startsWith(args.join(" ").toLowerCase())) + user = allmembers.find(me => String(me.displayName + "#" + me.user.discriminator).toLowerCase() == user) + if(!user || user == null || !user.id) return reject(errormessage) + } + user = await client.users.fetch(user.user.id) + if(!user) return reject(errormessage) + return resolve(user); + } + else { + user = message.mentions.users.first() || message.author; + return resolve(user); + } + }) + } + + /** + * + * @param {*} array Shuffles a given array (mix) + * @returns ARRAY + */ + function shuffle(array) { + try { + var j, x, i; + for (i = array.length - 1; i > 0; i--) { + j = Math.floor(Math.random() * (i + 1)); + x = array[i]; + array[i] = array[j]; + array[j] = x; + } + return array; + } catch (e) { + console.log(String(e.stack).bgRed) + } + } + + /** + * + * @param {*} date Date format (Date.now()) + * @returns Formatted Date + */ + function formatDate(date) { + try { + return new Intl.DateTimeFormat("pt-BR").format(date); + } catch (e) { + console.log(String(e.stack).bgRed) + return false; + } + } + + /** + * + * @param {*} duration Number | Time in Milliseconds + * @returns Object of Formatted Time in Days to milliseconds + */ + function parseDuration(duration) { + let remain = duration + let days = Math.floor(remain / (1000 * 60 * 60 * 24)) + remain = remain % (1000 * 60 * 60 * 24) + + let hours = Math.floor(remain / (1000 * 60 * 60)) + remain = remain % (1000 * 60 * 60) + + let minutes = Math.floor(remain / (1000 * 60)) + remain = remain % (1000 * 60) + + let seconds = Math.floor(remain / (1000)) + remain = remain % (1000) + + let milliseconds = remain + + return { + days, + hours, + minutes, + seconds, + milliseconds + }; + } + + /** + * + * @param {*} o Object of Time from days to nanoseconds/milliseconds + * @param {*} useMilli Optional Boolean parameter, if it should use milliseconds or not in the showof + * @returns Formatted Time + */ + function formatTime(o, useMilli = false) { + let parts = [] + if (o.days) { + let ret = o.days + ' Dia' + if (o.days !== 1) { + ret += 's' + } + parts.push(ret) + } + if (o.hours) { + let ret = o.hours + ' Hr' + if (o.hours !== 1) { + ret += 's' + } + parts.push(ret) + } + if (o.minutes) { + let ret = o.minutes + ' Min' + if (o.minutes !== 1) { + ret += 's' + } + parts.push(ret) + + } + if (o.seconds) { + let ret = o.seconds + ' Seg' + if (o.seconds !== 1) { + ret += 's' + } + parts.push(ret) + } + if (useMilli && o.milliseconds) { + let ret = o.milliseconds + ' ms' + parts.push(ret) + } + if (parts.length === 0) { + return 'instantly' + } else { + return parts + } + } + + /** + * + * @param {*} duration Number | Time in Millisceonds + * @param {*} useMilli Optional Boolean parameter, if it should use milliseconds or not in the showof + * @returns Formatted Time + */ + function duration(duration, useMilli = false) { + let time = parseDuration(duration) + return formatTime(time, useMilli) + } + + /** + * + * @param {*} delayInms Number | Time in Milliseconds + * @returns Promise, waiting for the given Milliseconds + */ + function delay(delayInms) { + try { + return new Promise((resolve) => { + setTimeout(() => { + resolve(2); + }, delayInms); + }); + } catch (e) { + console.log(String(e.stack).bgRed) + } + } + + /** + * + * @param {*} max Number | 0 - MAX + * @returns Number + */ + function getRandomInt(max) { + try { + return Math.floor(Math.random() * Math.floor(max)); + } catch (e) { + console.log(String(e.stack).bgRed) + } + } + + /** + * + * @param {*} min Number | min - max + * @param {*} max Number | min - max + * @returns Number + */ + function getRandomNum(min, max) { + try { + return Math.floor(Math.random() * Math.floor((max - min) + min)); + } catch (e) { + console.log(String(e.stack).bgRed) + } + } + + /** + * + * @param {*} total Number | Time in Milliseconds + * @param {*} current Number | Time in Milliseconds | Current Music Position + * @param {*} size Number | Amount of Letters in the Bar (SIZE) Default is: 25 + * @param {*} line EMOJI | the default line is: "▬" + * @param {*} slider EMOJI | the default slider is: "🔷" + * @returns STRING a BAR [▬▬▬▬▬🔷▬▬▬▬▬▬▬▬] + */ + function createBar(total, current, size = 25, line = "▬", slider = "🔷") { + try { + if (!total) throw "TEMPO MÁXIMO EXCEDIDO"; + if (!current) return `**[${mover}${line.repeat(size - 1)}]**`; + let bar = current > total + ? [line.repeat(size / 2 * 2), (current / total) * 100] + : [line.repeat(Math.round(size / 2 * (current / total))).replace(/.$/, slider) + + line.repeat(size - Math.round(size * (current / total)) + 1), current / total]; + if (!String(bar).includes(mover)) { + return `**[${mover}${line.repeat(size - 1)}]**`; + } else{ + return `**[${bar[0]}]**`; + } + } catch (e) { + console.log(String(e.stack).bgRed) + } + } + + /** + * + * @param {*} millis Number | Time in Milliseconds + * @returns Formatted time in: HH:MM:SS HH only if bigger then 0 + */ + function format(millis) { + try { + var h = Math.floor(millis / 3600000), + m = Math.floor(millis / 60000), + s = ((millis % 60000) / 1000).toFixed(0); + if (h < 1) return (m < 10 ? "0" : "") + m + ":" + (s < 10 ? "0" : "") + s + " | " + (Math.floor(millis / 1000)) + " Segundos"; + else return (h < 10 ? "0" : "") + h + ":" + (m < 10 ? "0" : "") + m + ":" + (s < 10 ? "0" : "") + s + " | " + (Math.floor(millis / 1000)) + " Segundos"; + } catch (e) { + console.log(String(e.stack).bgRed) + } + } + + /** + * + * @param {*} str String of message, not replacing pings + * @returns Only the Pinged message + */ + function escapeRegex(str) { + try { + return str.replace(/[.*+?^${}()|[\]\\]/g, `\\$&`); + } catch (e) { + console.log(String(e.stack).bgRed) + } + } + + /** + * + * @param {*} array ARRAY | Complete Array to work with + * @param {*} from NUMBER | Position of first ITEM + * @param {*} to NUMBER | Position where to move it to + * @returns ARRAY | the Moved Array + */ + function arrayMove(array, from, to) { + try { + array = [...array]; + const startIndex = from < 0 ? array.length + from : from; + if (startIndex >= 0 && startIndex < array.length) { + const endIndex = to < 0 ? array.length + to : to; + const [item] = array.splice(from, 1); + array.splice(endIndex, 0, item); + } + return array; + } catch (e) { + console.log(String(e.stack).bgRed) + } + } + + /** + * + * @param {*} num Number + * @param {*} digits How many digits it should have: 10.231k == 3 + * @returns Formatted Number + */ + function nFormatter(num, digits = 2) { + const lookup = [ + { value: 1, symbol: "" }, + { value: 1e3, symbol: "k" }, + { value: 1e6, symbol: "M" }, + { value: 1e9, symbol: "G" }, + { value: 1e12, symbol: "T" }, + { value: 1e15, symbol: "P" }, + { value: 1e18, symbol: "E" } + ]; + const rx = /\.0+$|(\.[0-9]*[1-9])0+$/; + var item = lookup.slice().reverse().find(function(item) { + return num >= item.value; + }); + return item ? (num / item.value).toFixed(digits).replace(rx, "$1") + item.symbol : "0"; + } + + /** + * @param {*} message Discord Message with a DiscordChannel (TEXTCHANNEL) + * @param {*} desc A Description, STRING OR ARRAY + * @param {*} TITLE Title of the Embed + * @param {*} reactionemojis Emojis for swaping the pages, Default: ["⬅️", "⏹", "➡️"] | OPTIONAL + * @param {*} sliceamount If an Array is beeing used, it is the amount of items, per page, if a string then the amount of letters per page, Default Array: 15, Default String: 1000 | OPTIONAL + * @returns VOID, works by itself + */ + const { MessageButton, MessageActionRow } = require('discord.js') + async function swap_pages(client, message, description, TITLE) { + let prefix = config.prefix; + let cmduser = message.author; + + let currentPage = 0; + //GET ALL EMBEDS + let embeds = []; + //if input is an array + if (Array.isArray(description)) { + try { + let k = 20; + for (let i = 0; i < description.length; i += 20) { + const current = description.slice(i, k); + k += 20; + const embed = new MessageEmbed() + .setDescription(current) + .setTitle(TITLE) + .setColor(ee.color) + .setFooter(ee.footertext, ee.footericon) + embeds.push(embed); + } + embeds; + } catch {} + } else { + try { + let k = 1000; + for (let i = 0; i < description.length; i += 1000) { + const current = description.slice(i, k); + k += 1000; + const embed = new MessageEmbed() + .setDescription(current) + .setTitle(TITLE) + .setColor(ee.color) + .setFooter(ee.footertext, ee.footericon) + embeds.push(embed); + } + embeds; + } catch {} + } + if (embeds.length === 0) return message.channel.send({embeds: [new MessageEmbed() + .setTitle(`${emoji.msg.ERROR}Nenhum conteúdo adicionado à função SWAP PAGES`) + .setColor(ee.wrongcolor) + .setFooter(ee.footertext, ee.footericon)]}).catch(e => console.log("ISTO É PARA EVITAR UM CRASH")) + if (embeds.length === 1) return message.channel.send({embeds: [embeds[0]]}).catch(e => console.log("ISTO É PARA EVITAR UM CRASH")) + + let button_back = new MessageButton().setStyle('SUCCESS').setCustomId('1').setEmoji("833802907509719130").setLabel("Back") + let button_home = new MessageButton().setStyle('DANGER').setCustomId('2').setEmoji("🏠").setLabel("Home") + let button_forward = new MessageButton().setStyle('SUCCESS').setCustomId('3').setEmoji('832598861813776394').setLabel("Forward") + const allbuttons = [new MessageActionRow().addComponents([button_back, button_home, button_forward])] + //Send message with buttons + let swapmsg = await message.channel.send({ + content: `***Clique nos __Botões__ para trocar as páginas***`, + embeds: [embeds[0]], + components: allbuttons + }); + //create a collector for the thinggy + const collector = swapmsg.createMessageComponentCollector({filter: (i) => i.isButton() && i.user && i.user.id == cmduser.id && i.message.author.id == client.user.id, time: 180e3 }); //collector for 5 seconds + //array of all embeds, here simplified just 10 embeds with numbers 0 - 9 + collector.on('collect', async b => { + if(b.user.id !== message.author.id) + return b.reply(`<:declined:780403017160982538> **Apenas aquele que digitou $ {prefix} help tem permissão para reagir!**`, true) + //page forward + if(b.customId == "1") { + //b.reply("***Swapping a PAGE FORWARD***, *please wait 2 Seconds for the next Input*", true) + if (currentPage !== 0) { + currentPage -= 1 + await swapmsg.edit({embeds: [embeds[currentPage]], components: allbuttons}); + await b.deferUpdate(); + } else { + currentPage = embeds.length - 1 + await swapmsg.edit({embeds: [embeds[currentPage]], components: allbuttons}); + await b.deferUpdate(); + } + } + //go home + else if(b.customId == "2"){ + //b.reply("***Going Back home***, *please wait 2 Seconds for the next Input*", true) + currentPage = 0; + await swapmsg.edit({embeds: [embeds[currentPage]], components: allbuttons}); + await b.deferUpdate(); + } + //go forward + else if(b.customId == "3"){ + //b.reply("***Swapping a PAGE BACK***, *please wait 2 Seconds for the next Input*", true) + if (currentPage < embeds.length - 1) { + currentPage++; + await swapmsg.edit({embeds: [embeds[currentPage]], components: allbuttons}); + await b.deferUpdate(); + } else { + currentPage = 0 + await swapmsg.edit({embeds: [embeds[currentPage]], components: allbuttons}); + await b.deferUpdate(); + } + + } + }); + + + } + async function swap_pages2(client, message, embeds) { + let currentPage = 0; + let cmduser = message.author; + if (embeds.length === 1) return message.channel.send({embeds: [embeds[0]]}).catch(e => console.log("ISTO É PARA EVITAR UM CRASH")) + let button_back = new MessageButton().setStyle('SUCCESS').setCustomId('1').setEmoji("833802907509719130").setLabel("Back") + let button_home = new MessageButton().setStyle('DANGER').setCustomId('2').setEmoji("🏠").setLabel("Home") + let button_forward = new MessageButton().setStyle('SUCCESS').setCustomId('3').setEmoji('832598861813776394').setLabel("Forward") + const allbuttons = [new MessageActionRow().addComponents([button_back, button_home, button_forward])] + let prefix = client.settings.get(message.guild.id, "prefix"); + //Send message with buttons + let swapmsg = await message.channel.send({ + content: `***Clique nos __Botões__ para trocar as páginas***`, + embeds: [embeds[0]], + components: allbuttons + }); + //create a collector for the thinggy + const collector = swapmsg.createMessageComponentCollector({filter: (i) => i.isButton() && i.user && i.user.id == cmduser.id && i.message.author.id == client.user.id, time: 180e3 }); //collector for 5 seconds + //array of all embeds, here simplified just 10 embeds with numbers 0 - 9 + collector.on('collect', async b => { + if(b.user.id !== message.author.id) + return b.reply(`<:declined:780403017160982538> **Apenas aquele que digitou $ {prefix} help tem permissão para reagir!**`, true) + //page forward + if(b.customId == "1") { + //b.reply("***Swapping a PAGE FORWARD***, *please wait 2 Seconds for the next Input*", true) + if (currentPage !== 0) { + currentPage -= 1 + await swapmsg.edit({embeds: [embeds[currentPage]], components: allbuttons}); + await b.deferUpdate(); + } else { + currentPage = embeds.length - 1 + await swapmsg.edit({embeds: [embeds[currentPage]], components: allbuttons}); + await b.deferUpdate(); + } + } + //go home + else if(b.customId == "2"){ + //b.reply("***Going Back home***, *please wait 2 Seconds for the next Input*", true) + currentPage = 0; + await swapmsg.edit({embeds: [embeds[currentPage]], components: allbuttons}); + await b.deferUpdate(); + } + //go forward + else if(b.customId == "3"){ + //b.reply("***Swapping a PAGE BACK***, *please wait 2 Seconds for the next Input*", true) + if (currentPage < embeds.length - 1) { + currentPage++; + await swapmsg.edit({embeds: [embeds[currentPage]], components: allbuttons}); + await b.deferUpdate(); + } else { + currentPage = 0 + await swapmsg.edit({embeds: [embeds[currentPage]], components: allbuttons}); + await b.deferUpdate(); + } + + } + }); + + } + + /** + * + * @param {*} client Discord Client + * Function to Change the Status + */ + function change_status(client) { + try { + client.user.setActivity(`${config.prefix}help | ${client.guilds.cache.size} Guilda(s) | ${Math.ceil(client.users.cache.size)} Membros`, { + type: "PLAYING", + }); + } catch (e) { + console.log(String(e.stack).bgRed) + } + } \ No newline at end of file diff --git a/handlers/setups.js b/handlers/setups.js deleted file mode 100644 index 170b982..0000000 --- a/handlers/setups.js +++ /dev/null @@ -1,206 +0,0 @@ -const mongoose = require('mongoose'); -const mongoCurrency = require('discord-mongo-currency'); -const db = require("quick.db") -const config = require("../config.json") -const {prefix } = require('../config.json'); -const c = require('colors') -const emojis = ["👍", "👎", "❔", "🤔", "🙄", "❌"]; -const isPlaying = new Set(); -const { Client, MessageEmbed } = require("discord.js"); -const { Aki } = require("aki-api"); -console.log(c.brightRed("Carregando Configurações")) -const functions = require("../functions"); -module.exports = (client) => { - const guildonlycounter = new Map(); - let stateswitch = false; - -client.on("guildCreate", guild => { - guild.owner.send("Obrigado por me adicionar use k!help para ver meus comandos ou acesse meu Website https://kingbot.cf") - console.log(c.red(`Adicionado a uma nova guilda: ${guild.name} (id: ${guild.id}). A guilda contem ${guild.memberCount} membros!`)); -}); - - client.on('ready', () => { - console.log(c.green(`Logado em ${client.user.tag} atualmente em ${client.guilds.cache.size} Guildas`)) - const Guilds = - client.guilds.cache.array().map((G, I) => - `${I+1}. ${G.name} - ${G.id}`).join("\n"); - if (!Guilds) return console.log("Nenhuma Guilda"); - return console.log(c.red(Guilds)); -}); - -client.on("guildCreate", guild => { - - const { MessageEmbed } = require("discord.js"); - - const ID = "865255179788222485"; - - const channel = client.channels.cache.get(ID); - - const sowner = guild.owner.user; - - if (!channel) return; - - const embed = new MessageEmbed() - - .setTitle("**I Joined a Server!**") - - .addField(`**SERVER NAME**`, `\`\`\`${guild.name}\`\`\``) - - .addField(`**SERVER ID**`, `\`\`\`${guild.id}\`\`\``) - - .addField(`**SERVER OWNER**`, `\`\`\`${sowner.tag}\`\`\``) - - .addField(`**OWNER ID**`, `\`\`\`${sowner.id}\`\`\``) - - .addField(`**CREATED ON**`, `\`\`\`${guild.createdAt}\`\`\``) - - .addField(`**MEMBERS**`, `\`\`\`${guild.memberCount}\`\`\``) - - .setTimestamp() - - .setColor("32CD32") - - .setFooter(`Servers Count - ${client.guilds.cache.size}`); - - channel.send(embed); - -}); - - -client.on('ready', () => { - let status = [ - { name: `❓ Se você precisa de ajuda use ${prefix}help`, type: "PLAYING" }, - { name: `Me adicione usando ${prefix}convite`, type: "WATCHING" }, - { name: `para ${client.users.cache.size} usuários | ${client.guilds.cache.size} servidores e ${client.channels.cache.size} canais`, type: "STREAMING", url: "https://www.twitch.tv/nocopyrightsounds"} - - ]; - setInterval(() => { - let randomStatus = status[Math.floor(Math.random() * status.length)]; - client.user.setPresence({ activity: randomStatus }); - }, 10000 * 30); - client.user.setStatus('online').catch(console.err); - console.log(err) -}); - - client.on("guildCreate", guild => { - client.settings.delete(guild.id, "prefix"); - client.settings.delete(guild.id, "djroles"); - client.settings.delete(guild.id, "playingembed"); - client.settings.delete(guild.id, "playingchannel"); - client.settings.delete(guild.id, "botchannel"); - client.custom.delete(guild.id, "playlists"); - client.custom.ensure(guild.id, { - playlists: [], - }); - client.settings.ensure(guild.id, { - prefix: config.prefix, - djroles: [], - playingembed: "", - playingchannel: "", - botchannel: [], - }); - getAll(client, guild) - }) - //When a Channel got deleted, try to remove it from the BOTCHANNELS - client.on("channelDelete", function (channel) { - client.settings.remove(channel.guild.id, channel.id, `botchannel`); - }); - //When a Role got deleted, try to remove it from the DJROLES - client.on("roleDelete", function (role) { - client.settings.remove(role.guild.id, role.id, `djroles`); - }); - client.on("message", async message => { - client.custom.ensure(message.guild.id, { - playlists: [], - }); - client.custom2.ensure(message.author.id, { - myplaylists: [], - }); - client.infos.ensure("global", { - cmds: 0, - songs: 0, - filters: 0, - }) - client.settings.ensure(message.guild.id, { - prefix: config.prefix, - djroles: [], - playingembed: "", - playingchannel: "", - botchannel: [], - }); - if (message.author.bot) return; - if (!message.guild) return; - //create the database for the OWN user - client.custom2.ensure(message.author.id, { - myplaylists: [], - }); - - }); - const { - MessageEmbed - } = require("discord.js"); - const { - stripIndents - } = require("common-tags"); - - function getAll(client, guild) { - const embed = new MessageEmbed() - .setColor('#00bfff') - .setTitle('Menu de Ajuda - OBRIGADO POR ME CONVIDAR!') - .addField("**__BOT DE:__**", ` - >>> \`KingKiller®#1889\` [\`Website\`](https://kingbot.cf) [\`CONVITE\`](https://discord.com/oauth2/authorize?client_id=794291443454836766&permissions=37080128&scope=bot) - `) - .addField("**__Música - fontes suportadas__**", ` - >>> \`Youtube\`, \`Soundcloud\`, [\`Mais\`](https://links.musicium.eu), ... - `) - .setFooter(`Para ver as descrições dos comandos e o tipo de uso, use ${config.prefix}ajuda [CMD Name]`, client.user.displayAvatarURL()) - - const commands = (category) => { - return client.commands - .filter(cmd => cmd.category === category) - .map(cmd => `\`${cmd.name}\``) - .join(", "); - } - - const info = client.categories - .map(cat => stripIndents `**__${cat[0].toUpperCase() + cat.slice(1)}__** \n> ${commands(cat)}`) - .reduce((string, category) => string + "\n\n" + category); - const channel = guild.channels.cache.find( - channel => - channel.type === "text" && - channel.permissionsFor(guild.me).has("SEND_MESSAGES") - ); - return channel.send(embed.setDescription(`*use o Prefixo **\`${config.prefix}\`** na frente de CADA comando, para usá-lo corretamente!*\n` + info)); - } - client.on('voiceStateUpdate', (oldState, newState) => { - if (newState.id === client.user.id && oldState.serverDeaf === true && newState.serverDeaf === false) { - try { - const channel = newState.member.guild.channels.cache.find( - channel => - channel.type === "text" && - (channel.name.includes("cmd") || channel.name.includes("command") || channel.name.includes("bot")) && - channel.permissionsFor(newState.member.guild.me).has("SEND_MESSAGES") - ); - channel.send("Não ative meu som!, mutei meu som novamente! Isso protege os dados para que você tenha uma experiência mais rápida e suave") - newState.setDeaf(true); - } catch (error) { - try { - const channel = newState.member.guild.channels.cache.find( - channel => - channel.type === "text" && - channel.permissionsFor(newState.member.guild.me).has("SEND_MESSAGES") - ); - channel.send("Não ative meu som!, mutei meu som novamente! Isso protege os dados para que você tenha uma experiência mais rápida e suave") - newState.setDeaf(true); - } catch (error) { - newState.setDeaf(true); - } - } - } - }); - console.log(c.green("Configurações carregadas")) - mongoose.connect(process.env.Database, { - useUnifiedTopology: true, - useNewUrlParser: true, -}).then(console.log(c.yellow('Conectado ao MongoDB.'))) -} diff --git a/handlers/slashCommands.js b/handlers/slashCommands.js new file mode 100644 index 0000000..06a7a61 --- /dev/null +++ b/handlers/slashCommands.js @@ -0,0 +1,185 @@ +const { readdirSync, lstatSync } = require("fs"); +const { SlashCommandBuilder } = require('@discordjs/builders'); +const config = require("../botconfig/config.json"); +const dirSetup = [{ + "Folder": "Info", "CmdName": "info", + "CmdDescription": "Grant specific Information about something!" + },{ + "Folder": "Settings", "CmdName": "settings", + "CmdDescription": "Adjust the Settings of the Bot!" + },{ + "Folder": "Music", "CmdName": "music", + "CmdDescription": "Playing/Queuing Music" + },{ + "Folder": "Queue", "CmdName": "queue", + "CmdDescription": "Queue Commands" + },{ + "Folder": "Song", "CmdName": "song", + "CmdDescription": "Song specific Commands" + },{ + "Folder": "Filter", "CmdName": "filter", + "CmdDescription": "Add Filters to your Music" + }]; +module.exports = (client) => { + try { + let allCommands = []; + readdirSync("./slashCommands/").forEach((dir) => { + if(lstatSync(`./slashCommands/${dir}`).isDirectory()) { + const groupName = dir; + const cmdSetup = dirSetup.find(d=>d.Folder == dir); + //If its a valid cmdsetup + if(cmdSetup && cmdSetup.Folder) { + //Set the SubCommand as a Slash Builder + const subCommand = new SlashCommandBuilder().setName(String(cmdSetup.CmdName).replace(/\s+/g, '_').toLowerCase()).setDescription(String(cmdSetup.CmdDescription)); + //Now for each file in that subcommand, add a command! + const slashCommands = readdirSync(`./slashCommands/${dir}/`).filter((file) => file.endsWith(".js")); + for (let file of slashCommands) { + let pull = require(`../slashCommands/${dir}/${file}`); + if (pull.name && pull.description) { + subCommand + .addSubcommand((subcommand) => { + subcommand.setName(String(pull.name).toLowerCase()).setDescription(pull.description) + if(pull.options && pull.options.length > 0){ + for(const option of pull.options){ + if(option.User && option.User.name && option.User.description){ + subcommand.addUserOption((op) => + op.setName(String(option.User.name).replace(/\s+/g, '_').toLowerCase()).setDescription(option.User.description).setRequired(option.User.required) + ) + } else if(option.Integer && option.Integer.name && option.Integer.description){ + subcommand.addIntegerOption((op) => + op.setName(String(option.Integer.name).replace(/\s+/g, '_').toLowerCase()).setDescription(option.Integer.description).setRequired(option.Integer.required) + ) + } else if(option.String && option.String.name && option.String.description){ + subcommand.addStringOption((op) => + op.setName(String(option.String.name).replace(/\s+/g, '_').toLowerCase()).setDescription(option.String.description).setRequired(option.String.required) + ) + } else if(option.Channel && option.Channel.name && option.Channel.description){ + subcommand.addChannelOption((op) => + op.setName(String(option.Channel.name).replace(/\s+/g, '_').toLowerCase()).setDescription(option.Channel.description).setRequired(option.Channel.required) + ) + } else if(option.Role && option.Role.name && option.Role.description){ + subcommand.addRoleOption((op) => + op.setName(String(option.Role.name).replace(/\s+/g, '_').toLowerCase()).setDescription(option.Role.description).setRequired(option.Role.required) + ) + } else if(option.StringChoices && option.StringChoices.name && option.StringChoices.description && option.StringChoices.choices && option.StringChoices.choices.length > 0){ + subcommand.addStringOption((op) => + op.setName(String(option.StringChoices.name).replace(/\s+/g, '_').toLowerCase()).setDescription(option.StringChoices.description).setRequired(option.StringChoices.required) + .addChoices(option.StringChoices.choices.map(c=> [String(c[0]).replace(/\s+/g, '_').toLowerCase(),String(c[1])] )), + ) + } else if(option.IntChoices && option.IntChoices.name && option.IntChoices.description && option.IntChoices.choices && option.IntChoices.choices.length > 0){ + subcommand.addStringOption((op) => + op.setName(String(option.IntChoices.name).replace(/\s+/g, '_').toLowerCase()).setDescription(option.IntChoices.description).setRequired(option.IntChoices.required) + .addChoices(option.IntChoices.choices.map(c=> [String(c[0]).replace(/\s+/g, '_').toLowerCase(),parseInt(c[1])] )), + ) + } else { + console.log(`A Option is missing the Name or/and the Description of ${pull.name}`) + } + } + } + return subcommand; + }) + client.slashCommands.set(String(cmdSetup.CmdName).replace(/\s+/g, '_').toLowerCase() + pull.name, pull) + } else { + console.log(file, `error -> missing a help.name, or help.name is not a string.`.brightRed); + continue; + } + } + //add the subcommand to the array + allCommands.push(subCommand.toJSON()); + } + else { + return console.log(`The Subcommand-Folder ${dir} is not in the dirSetup Configuration!`); + } + } else { + let pull = require(`../slashCommands/${dir}`); + if (pull.name && pull.description) { + let Command = new SlashCommandBuilder().setName(String(pull.name).toLowerCase()).setDescription(pull.description); + if(pull.options && pull.options.length > 0){ + for(const option of pull.options){ + if(option.User && option.User.name && option.User.description){ + Command.addUserOption((op) => + op.setName(String(option.User.name).replace(/\s+/g, '_').toLowerCase()).setDescription(option.User.description).setRequired(option.User.required) + ) + } else if(option.Integer && option.Integer.name && option.Integer.description){ + Command.addIntegerOption((op) => + op.setName(String(option.Integer.name).replace(/\s+/g, '_').toLowerCase()).setDescription(option.Integer.description).setRequired(option.Integer.required) + ) + } else if(option.String && option.String.name && option.String.description){ + Command.addStringOption((op) => + op.setName(String(option.String.name).replace(/\s+/g, '_').toLowerCase()).setDescription(option.String.description).setRequired(option.String.required) + ) + } else if(option.Channel && option.Channel.name && option.Channel.description){ + Command.addChannelOption((op) => + op.setName(String(option.Channel.name).replace(/\s+/g, '_').toLowerCase()).setDescription(option.Channel.description).setRequired(option.Channel.required) + ) + } else if(option.Role && option.Role.name && option.Role.description){ + Command.addRoleOption((op) => + op.setName(String(option.Role.name).replace(/\s+/g, '_').toLowerCase()).setDescription(option.Role.description).setRequired(option.Role.required) + ) + } else if(option.StringChoices && option.StringChoices.name && option.StringChoices.description && option.StringChoices.choices && option.StringChoices.choices.length > 0){ + Command.addStringOption((op) => + op.setName(String(option.StringChoices.name).replace(/\s+/g, '_').toLowerCase()).setDescription(option.StringChoices.description).setRequired(option.StringChoices.required) + .addChoices(option.StringChoices.choices.map(c=> [String(c[0]).replace(/\s+/g, '_').toLowerCase(),String(c[1])] )), + ) + } else if(option.IntChoices && option.IntChoices.name && option.IntChoices.description && option.IntChoices.choices && option.IntChoices.choices.length > 0){ + Command.addStringOption((op) => + op.setName(String(option.IntChoices.name).replace(/\s+/g, '_').toLowerCase()).setDescription(option.IntChoices.description).setRequired(option.IntChoices.required) + .addChoices(option.IntChoices.choices.map(c=> [String(c[0]).replace(/\s+/g, '_').toLowerCase(),parseInt(c[1])] )), + ) + } else { + console.log(`A Option is missing the Name or/and the Description of ${pull.name}`) + } + } + } + allCommands.push(Command.toJSON()); + client.slashCommands.set("normal" + pull.name, pull) + } + else { + console.log(file, `error -> missing a help.name, or help.name is not a string.`.brightRed); + } + } + }); + + //Once the Bot is ready, add all Slas Commands to each guild + client.on("ready", () => { + if(config.loadSlashsGlobal){ + client.application.commands.set(allCommands) + .then(slashCommandsData => { + client.slashCommandsData = slashCommandsData; + console.log(`${slashCommandsData.size} slashCommands ${`(With ${slashCommandsData.map(d => d.options).flat().length} Subcommands)`.green} Loaded for all: ${`All possible Guilds`.underline}`.brightGreen); + console.log(`Because u are Using Global Settings, it can take up to 1 hour until the Commands are changed!`.bold.yellow) + }).catch((e)=>{}); + } else { + client.guilds.cache.map(g => g).forEach(async (guild) => { + try{ + await guild.commands.set([]).catch((e)=>{}); + guild.commands.set(allCommands) + .then(slashCommandsData => { + client.slashCommandsData = slashCommandsData; + console.log(`${slashCommandsData.size} slashCommands ${`(With ${slashCommandsData.map(d => d.options).flat().length} Subcommands)`.green} Loaded for: ${`${guild.name}`.underline}`.brightGreen); + }).catch((e)=>{}); + }catch (e){ + console.log(String(e).grey) + } + }); + } + }) + //DISABLE WHEN USING GLOBAL! + client.on("guildCreate", async (guild) => { + try{ + if(!config.loadSlashsGlobal){ + await guild.commands.set([]).catch((e)=>{}); + guild.commands.set(allCommands) + .then(slashCommandsData => { + console.log(`${slashCommandsData.size} slashCommands ${`(With ${slashCommandsData.map(d => d.options).flat().length} Subcommands)`.green} Loaded for: ${`${guild.name}`.underline}`.brightGreen); + }).catch((e)=>{}); + } + }catch (e){ + console.log(String(e).grey) + } + }) + + } catch (e) { + console.log(String(e.stack).bgRed) + } +}; \ No newline at end of file diff --git a/handlers/slashcommands.js b/handlers/slashcommands.js deleted file mode 100644 index 871944c..0000000 --- a/handlers/slashcommands.js +++ /dev/null @@ -1,183 +0,0 @@ -const config = require("../config.json") -const c = require('colors') -console.log(c.brightRed("CARREGANDO COMANDOS SLASH ...")) -const Discord = require("discord.js"); -module.exports = (client) => { - /////////////////////////////// - /////////SLASH COMMANDS//////// - /////////////////////////////// - client.on('ready', () => { - - //client.api.applications(client.user.id).guilds('guild id').commands.post({data: { für einen server VVVV ist für mehr als 1 server - client.api.applications(client.user.id).commands.post({ - data: { - name: "help", - description: "Shows you information for every cmd" - } - }); - client.api.applications(client.user.id).commands.post({ - data: { - name: "info", - description: "See some information about Musicium" - } - }); - client.api.applications(client.user.id).commands.post({ - - data: { - name: "invite", - description: "Invite the Bot to your Own server and get the ultimate music expierence" - } - }); - client.ws.on('INTERACTION_CREATE', async interaction => { - let prefix = await client.settings.get(interaction.guild_id, `prefix`); - if (prefix === null) prefix = config.prefix; - - const command = interaction.data.name.toLowerCase(); - const args = interaction.data.options; - const inviteembed = new Discord.MessageEmbed() - .setColor(config.colors.yes) - .setTitle("Invite me now!") - .setDescription(`[\`Click here\`](https://dc.musicium.eu) | [\`Website\`](https://musicium.eu) | :heart: Thanks for inviting!`) - .setFooter(client.user.username + " | Syntax: <>...must []...optional", client.user.displayAvatarURL()) - .setAuthor(interaction.member.user.username, client.user.displayAvatarURL(), "https://dc.musicium.eu") - let totalMembers = client.guilds.cache.reduce((c, g) => c + g.memberCount, 0); - let days = Math.floor(client.uptime / 86400000); - let hours = Math.floor(client.uptime / 3600000) % 24; - let minutes = Math.floor(client.uptime / 60000) % 60; - let seconds = Math.floor(client.uptime / 1000) % 60; - - const infoembed = new Discord.MessageEmbed() - .setAuthor( - `Information about the ${client.user.username} Bot`, - client.user.displayAvatarURL(), "https://dc.musicium.eu" - ) - .setColor(config.colors.yes) - .addFields({ - name: 'Bot tag', - value: `**\`${client.user.tag}\`**`, - inline: true, - }, { - name: 'Version', - value: `**\`7.0.0\`**`, - inline: true, - }, { - name: "Command prefix", - value: `**\`${prefix}\`**`, - inline: true, - }, - - { - name: 'Time since last restart', - value: `**\`${process.uptime().toFixed(2)}s\`**`, - inline: true, - }, { - name: 'Uptime', - value: `**\`${days}d\` \`${hours}h\` \`${minutes}m\` \`${seconds}s\`**`, - inline: true, - }, { - name: 'Server count', - value: `**\`${client.guilds.cache.size}\`**`, - inline: true, - }, { - name: 'Total members', - value: `**\`${totalMembers}\`**`, - inline: true, - }, { - name: 'Owner and Developer', - value: `**\`Tomato#6966\` <@442355791412854784>**`, - inline: true, - }, - ) - .addField("\u200b", ` - \u200b - `) - .addField("***BOT BY:***", ` - >>> <@442355791412854784> \`Tomato#6966\` [\`Website\`](https://musicium.eu) - `) - .addField("***SUPPORT:***", ` - >>> [\`Server\`](https://discord.gg/fS6qBSm) | [\`Musicium - Website\`](https://musicium.eu) | [\`Invite\`](https://dc.musicium.eu/) - `) - const helpembed = new Discord.MessageEmbed() - .setColor(config.colors.yes) - .setTitle(`Help Menu\nPrefix: \`${prefix}\``) - .addField("\u200b", "\u200b") - .addField("**BASSBOOST FILTER INFORMATION**", ` - >>> You can now change the gain of your Bassboost from \`1\`-\`20\`! Example: \`${prefix}bassboost 10\` *Makes a Bassboost with 10db Gain* - `) - .addField("**PREMADE CUSTOM PLAYLISTS**", ` - >>> there are several Custom playlists which you can play, each one has 75 songs! - - 1. Charts - 2. Christmas - 3. Jazz - 4. Blues - 5. Country - 6. Rock - *more coming soon* - play them by \`${prefix}playlist \` - `) - .addField("**RADIO STATIONS**", ` - >>> there are over 200 radio stations available, you can see them by typing \`${prefix}radio\` - and play them by \`${prefix}radio \` - `) - .addField("\u200b", "\u200b") - .addField("**__BOT BY:__**", ` - >>> <@442355791412854784> \`Tomato#6966\` [\`Website\`](https://musicium.eu) [\`INVITE\`](https://dc.musicium.eu) - `) - .addField("**__Music - Supported sources__**", ` - >>> \`Youtube\`, \`Spotify\`, \`Soundcloud\`, [\`More\`](https://links.musicium.eu), ... - `) - .setFooter(`To see command descriptions and usage type ${prefix}help [CMD Name]`, client.user.displayAvatarURL()) - - const commands = (category) => { - return client.commands - .filter(cmd => cmd.category === category) - .map(cmd => `\`${cmd.name}\``) - .join(", "); - } - - const info = client.categories - .map(cat => stripIndents `**__${cat[0].toUpperCase() + cat.slice(1)}__** \n> ${commands(cat)}`) - .reduce((string, category) => string + "\n\n" + category); - helpembed.setDescription("*use the Prefix infront of EACH command, to use it correctly!*\n" + info); - if (command == 'help') { - - - client.api.interactions(interaction.id, interaction.token).callback.post({ - data: { - type: 4, - data: await createAPIMessage(interaction, helpembed) - } - }); - } - if (command == 'invite') { - client.api.interactions(interaction.id, interaction.token).callback.post({ - data: { - type: 4, - data: await createAPIMessage(interaction, inviteembed) - } - }); - } - if (command == 'info') { - client.api.interactions(interaction.id, interaction.token).callback.post({ - data: { - type: 4, - data: await createAPIMessage(interaction, infoembed) - } - }); - } - }); - }); - - async function createAPIMessage(interaction, content) { - const apiMessage = await Discord.APIMessage.create(client.channels.resolve(interaction.channel_id), content) - .resolveData() - .resolveFiles(); - - return { - ...apiMessage.data, - files: apiMessage.files - }; - } - console.log(c.green('Comandos Slash carregados')); -} diff --git a/handlers/xp.js b/handlers/xp.js deleted file mode 100644 index 0a9ae5c..0000000 --- a/handlers/xp.js +++ /dev/null @@ -1,42 +0,0 @@ -const db = require("quick.db") - -class Util { - static getLevel(xp, extra = false) { - let level = 0; - - //WHILE LOOP - while(xp >= Util.getLevelxp(level)) { - xp -= Util.getLevelxp(level); - level++ - } - if(extra) return [level, xp]; - else return level; - } - - - static getLevelxp(level) { - return 5 * Math.pow(level, 2) + 50 * level + 100; - } - - static getInfo(exp) { - let [level, remxp] = Util.getLevel(exp, true); - let levelxp = Util.getLevelxp(level); - - return { level, remxp, levelxp} - } - - static addexp(message) { - let toadd = Math.floor(Math.random() * 3 + 3); - let oldxp = db.get(`xp_${message.author.id}_${message.guild.id}`) - let oldlvl = Util.getLevel(oldxp) - let newxp = oldxp = toadd; - let newlvl = Util.getLevel(newxp); - - - if(newlvl > oldlvl) - message.channel.send(`${message.author}, Você acabou de alcançar o nível ${newlvl}`) - db.add(`xp_${message.author.id}_${message.guild.id}`, toadd) - } -} - -module.exports = Util; \ No newline at end of file diff --git a/json.sqlite b/json.sqlite deleted file mode 100644 index 1ca100a..0000000 Binary files a/json.sqlite and /dev/null differ diff --git a/package-lock.json b/package-lock.json index 218e27a..f53ff8f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,74 +1,11 @@ { - "name": "Kingbot", - "version": "2.5.2", - "lockfileVersion": 1, "requires": true, + "lockfileVersion": 1, "dependencies": { "@aero/centra": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@aero/centra/-/centra-1.0.6.tgz", - "integrity": "sha512-e7sUh/VjugT8LsHb4/hcbmhaVVi9deWWPQnlMnU0RAnF8+iCdGdCcKvoHnDNl/ELykwjpbKpBYbWPx0yKZaDpw==" - }, - "@babel/code-frame": { - "version": "7.12.11", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", - "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", - "requires": { - "@babel/highlight": "^7.10.4" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.9", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.9.tgz", - "integrity": "sha512-pQYxPY0UP6IHISRitNe8bsijHex4TWZXi2HwKVsjPiltzlhse2znVcm9Ace510VT1kxIHjGJCZZQBX2gJDbo0g==" - }, - "@babel/highlight": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", - "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", - "requires": { - "@babel/helper-validator-identifier": "^7.14.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "dependencies": { - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" - } - } - }, - "@babel/runtime": { - "version": "7.14.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", - "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@canvacord/assets": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@canvacord/assets/-/assets-1.0.2.tgz", - "integrity": "sha512-76uLD27UDlfTxtgA7armbt6G9/X1NDqm/qjs9gxbWFVfcJxVdT3r3LlwaLp0NlRa5yMylCFf3WcOHufVjk60vw==" - }, - "@canvacord/emoji-parser": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@canvacord/emoji-parser/-/emoji-parser-1.0.1.tgz", - "integrity": "sha512-Lb3xatdd91MR9tU4sicgrxxKg+/rVD1zKTOh55bmVF2Ri5X8vHTV+jNHTvRzkomGpyepGM+7qA4xMvG8ZqtO8g==", - "requires": { - "twemoji-parser": "^13.0.0" - } + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@aero/centra/-/centra-1.0.7.tgz", + "integrity": "sha512-NI6TGmbaoGsudBkEQ1wFDuG6dyy83YpLInBs7YRYnDDQvJvslkBXfb5gTcSNFCkB0oWuzvU9ASHgogiY+VpMlw==" }, "@derhuerst/http-basic": { "version": "8.2.1", @@ -81,10 +18,22 @@ "parse-cache-control": "^1.0.1" } }, + "@discordjs/builders": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.6.0.tgz", + "integrity": "sha512-mH3Gx61LKk2CD05laCI9K5wp+a3NyASHDUGx83DGJFkqJlRlSV5WMJNY6RS37A5SjqDtGMF4wVR9jzFaqShe6Q==", + "requires": { + "@sindresorhus/is": "^4.0.1", + "discord-api-types": "^0.22.0", + "ow": "^0.27.0", + "ts-mixer": "^6.0.0", + "tslib": "^2.3.1" + } + }, "@discordjs/collection": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.1.6.tgz", - "integrity": "sha512-utRNxnd9kSS2qhyivo9lMlt5qgAUasH2gb7BEOn6p0efFh24gjGomHzWKMAPn2hEReOPQZCJaRKoURwRotKucQ==" + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@discordjs/collection/-/collection-0.2.1.tgz", + "integrity": "sha512-vhxqzzM8gkomw0TYRF3tgx7SwElzUlXT/Aa41O7mOcyN6wIJfj5JmDWaO5XGKsGSsNx7F3i5oIlrucCCWV1Nog==" }, "@discordjs/form-data": { "version": "3.0.1", @@ -97,448 +46,164 @@ } }, "@discordjs/node-pre-gyp": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.1.0.tgz", - "integrity": "sha512-6u3EbK2x+j9bM3iK9/pE7BWLxOXZ1PvcsbDo3ZBdPocu95qPHj8zCVsBBk3Cao7V6o8QpwxUyJl6oVJ6T3ZgAg==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@discordjs/node-pre-gyp/-/node-pre-gyp-0.4.1.tgz", + "integrity": "sha512-PLYLPG3R+m9QlMROOjdy2htQq54g6f9vRb1xPfZ97CL53yj0uNTfpB/jtY/AXY6OKNtZtrre5SKjei8Hcc44HQ==", "requires": { "detect-libc": "^1.0.3", - "mkdirp": "^0.5.5", - "needle": "^2.4.1", - "nopt": "^4.0.3", - "npm-packlist": "^1.4.8", - "npmlog": "^4.1.2", - "rc": "^1.2.8", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.1", + "nopt": "^5.0.0", + "npmlog": "^5.0.0", "rimraf": "^3.0.2", - "semver": "^7.3.0", - "tar": "^6.0.2" - } - }, - "@discordjs/opus": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@discordjs/opus/-/opus-0.3.3.tgz", - "integrity": "sha512-n3hUs4RY0K8cz8vJ2GiZE4EdJlexoxs1vGsaft5lZlAnU6wsZfncpv4px+HVOMKN8ddtjriGfsrG4lVkAyZcmQ==", - "requires": { - "@discordjs/node-pre-gyp": "^0.1.0", - "node-addon-api": "^3.0.2" - } - }, - "@distube/youtube-dl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@distube/youtube-dl/-/youtube-dl-1.0.4.tgz", - "integrity": "sha512-dvspiNhCIry/LPm9EkHPgGk8bTBfrENH282jNzwz5EAnn+xZF+wCDk9033fnVBY5RA1sPKSUol2MeQHgRD5/zQ==", - "requires": { - "execa": "~5.0.0", - "got": "~11.8.1", - "hh-mm-ss": "~1.2.0", - "mkdirp": "~1.0.4", - "streamify": "~1.0.0", - "universalify": "~2.0.0" + "semver": "^7.3.5", + "tar": "^6.1.8" }, "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - } - } - }, - "@distube/ytdl": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@distube/ytdl/-/ytdl-2.0.6.tgz", - "integrity": "sha512-O8rm4Uh/R+zTZoZj+F2qtFbYGi4peGMs7qHbYKb+9z5gZ2id/MGTXpXlSVVn+49nkff109AflaLSJykI2BRd8A==", - "requires": { - "prism-media": "^1.2.9" - } - }, - "@distube/ytpl": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/@distube/ytpl/-/ytpl-1.0.12.tgz", - "integrity": "sha512-Iv6qZpUkyL+R2KQhfuvmYnqlMX+n8ts44aZ3hZUJI2dAV7lCZdsRs5MAf7oOSfZrTLL4GMNex8RGmBarm7iHtg==", - "requires": { - "miniget": "^4.2.1" - } - }, - "@distube/ytsr": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@distube/ytsr/-/ytsr-1.1.2.tgz", - "integrity": "sha512-MPhXdKeI474fXGgbsrUL9tSv39I7kh6gNOfs9Kine4aeEv1zjg6gVaXwbju3NeplwkSBT62TvILB8X42Zd2CLw==", - "requires": { - "miniget": "^4.2.1" - } - }, - "@eslint/eslintrc": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", - "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", - "requires": { - "ajv": "^6.12.4", - "debug": "^4.1.1", - "espree": "^7.3.0", - "globals": "^13.9.0", - "ignore": "^4.0.6", - "import-fresh": "^3.2.1", - "js-yaml": "^3.13.1", - "minimatch": "^3.0.4", - "strip-json-comments": "^3.1.1" - }, - "dependencies": { - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, + "gauge": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.1.tgz", + "integrity": "sha512-6STz6KdQgxO4S/ko+AbjlFGGdGcknluoqU+79GOFCDqqyYj5OanQf9AjxwN0jCidtT+ziPMmPSt9E4hfQ0CwIQ==", + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1 || ^2.0.0", + "strip-ansi": "^3.0.1 || ^4.0.0", + "wide-align": "^1.1.2" + } + }, + "node-fetch": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } } } }, - "@humanwhocodes/config-array": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", - "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", - "requires": { - "@humanwhocodes/object-schema": "^1.2.0", - "debug": "^4.1.1", - "minimatch": "^3.0.4" - } - }, - "@humanwhocodes/object-schema": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", - "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==" - }, - "@iamtraction/google-translate": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@iamtraction/google-translate/-/google-translate-1.1.2.tgz", - "integrity": "sha512-z30o1rz2b7JTTqmy/MSQjwfz59++qrBpTXGHWQrqxPW1mTW5pLEMM2FymxCyJcg6alogKgSLT2RVrjuvuNCxVA==", - "requires": { - "got": "^11.8.1" - } - }, - "@jimp/bmp": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.16.1.tgz", - "integrity": "sha512-iwyNYQeBawrdg/f24x3pQ5rEx+/GwjZcCXd3Kgc+ZUd+Ivia7sIqBsOnDaMZdKCBPlfW364ekexnlOqyVa0NWg==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "bmp-js": "^0.1.0" - } - }, - "@jimp/core": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.16.1.tgz", - "integrity": "sha512-la7kQia31V6kQ4q1kI/uLimu8FXx7imWVajDGtwUG8fzePLWDFJyZl0fdIXVCL1JW2nBcRHidUot6jvlRDi2+g==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "any-base": "^1.1.0", - "buffer": "^5.2.0", - "exif-parser": "^0.1.12", - "file-type": "^9.0.0", - "load-bmfont": "^1.3.1", - "mkdirp": "^0.5.1", - "phin": "^2.9.1", - "pixelmatch": "^4.0.2", - "tinycolor2": "^1.4.1" - } - }, - "@jimp/custom": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.16.1.tgz", - "integrity": "sha512-DNUAHNSiUI/j9hmbatD6WN/EBIyeq4AO0frl5ETtt51VN1SvE4t4v83ZA/V6ikxEf3hxLju4tQ5Pc3zmZkN/3A==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/core": "^0.16.1" - } - }, - "@jimp/gif": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.16.1.tgz", - "integrity": "sha512-r/1+GzIW1D5zrP4tNrfW+3y4vqD935WBXSc8X/wm23QTY9aJO9Lw6PEdzpYCEY+SOklIFKaJYUAq/Nvgm/9ryw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "gifwrap": "^0.9.2", - "omggif": "^1.0.9" - } - }, - "@jimp/jpeg": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.16.1.tgz", - "integrity": "sha512-8352zrdlCCLFdZ/J+JjBslDvml+fS3Z8gttdml0We759PnnZGqrnPRhkOEOJbNUlE+dD4ckLeIe6NPxlS/7U+w==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "jpeg-js": "0.4.2" - } - }, - "@jimp/plugin-blit": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.16.1.tgz", - "integrity": "sha512-fKFNARm32RoLSokJ8WZXHHH2CGzz6ire2n1Jh6u+XQLhk9TweT1DcLHIXwQMh8oR12KgjbgsMGvrMVlVknmOAg==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-blur": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.16.1.tgz", - "integrity": "sha512-1WhuLGGj9MypFKRcPvmW45ht7nXkOKu+lg3n2VBzIB7r4kKNVchuI59bXaCYQumOLEqVK7JdB4glaDAbCQCLyw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-circle": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.16.1.tgz", - "integrity": "sha512-JK7yi1CIU7/XL8hdahjcbGA3V7c+F+Iw+mhMQhLEi7Q0tCnZ69YJBTamMiNg3fWPVfMuvWJJKOBRVpwNTuaZRg==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-color": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.16.1.tgz", - "integrity": "sha512-9yQttBAO5SEFj7S6nJK54f+1BnuBG4c28q+iyzm1JjtnehjqMg6Ljw4gCSDCvoCQ3jBSYHN66pmwTV74SU1B7A==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "tinycolor2": "^1.4.1" - } - }, - "@jimp/plugin-contain": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.16.1.tgz", - "integrity": "sha512-44F3dUIjBDHN+Ym/vEfg+jtjMjAqd2uw9nssN67/n4FdpuZUVs7E7wadKY1RRNuJO+WgcD5aDQcsvurXMETQTg==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-cover": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.16.1.tgz", - "integrity": "sha512-YztWCIldBAVo0zxcQXR+a/uk3/TtYnpKU2CanOPJ7baIuDlWPsG+YE4xTsswZZc12H9Kl7CiziEbDtvF9kwA/Q==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-crop": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.16.1.tgz", - "integrity": "sha512-UQdva9oQzCVadkyo3T5Tv2CUZbf0klm2cD4cWMlASuTOYgaGaFHhT9st+kmfvXjKL8q3STkBu/zUPV6PbuV3ew==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-displace": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.16.1.tgz", - "integrity": "sha512-iVAWuz2+G6Heu8gVZksUz+4hQYpR4R0R/RtBzpWEl8ItBe7O6QjORAkhxzg+WdYLL2A/Yd4ekTpvK0/qW8hTVw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-dither": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.16.1.tgz", - "integrity": "sha512-tADKVd+HDC9EhJRUDwMvzBXPz4GLoU6s5P7xkVq46tskExYSptgj5713J5Thj3NMgH9Rsqu22jNg1H/7tr3V9Q==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-fisheye": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.16.1.tgz", - "integrity": "sha512-BWHnc5hVobviTyIRHhIy9VxI1ACf4CeSuCfURB6JZm87YuyvgQh5aX5UDKtOz/3haMHXBLP61ZBxlNpMD8CG4A==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-flip": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.16.1.tgz", - "integrity": "sha512-KdxTf0zErfZ8DyHkImDTnQBuHby+a5YFdoKI/G3GpBl3qxLBvC+PWkS2F/iN3H7wszP7/TKxTEvWL927pypT0w==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-gaussian": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.16.1.tgz", - "integrity": "sha512-u9n4wjskh3N1mSqketbL6tVcLU2S5TEaFPR40K6TDv4phPLZALi1Of7reUmYpVm8mBDHt1I6kGhuCJiWvzfGyg==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-invert": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.16.1.tgz", - "integrity": "sha512-2DKuyVXANH8WDpW9NG+PYFbehzJfweZszFYyxcaewaPLN0GxvxVLOGOPP1NuUTcHkOdMFbE0nHDuB7f+sYF/2w==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-mask": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.16.1.tgz", - "integrity": "sha512-snfiqHlVuj4bSFS0v96vo2PpqCDMe4JB+O++sMo5jF5mvGcGL6AIeLo8cYqPNpdO6BZpBJ8MY5El0Veckhr39Q==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-normalize": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.16.1.tgz", - "integrity": "sha512-dOQfIOvGLKDKXPU8xXWzaUeB0nvkosHw6Xg1WhS1Z5Q0PazByhaxOQkSKgUryNN/H+X7UdbDvlyh/yHf3ITRaw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-print": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.16.1.tgz", - "integrity": "sha512-ceWgYN40jbN4cWRxixym+csyVymvrryuKBQ+zoIvN5iE6OyS+2d7Mn4zlNgumSczb9GGyZZESIgVcBDA1ezq0Q==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "load-bmfont": "^1.4.0" - } - }, - "@jimp/plugin-resize": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.16.1.tgz", - "integrity": "sha512-u4JBLdRI7dargC04p2Ha24kofQBk3vhaf0q8FwSYgnCRwxfvh2RxvhJZk9H7Q91JZp6wgjz/SjvEAYjGCEgAwQ==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-rotate": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.16.1.tgz", - "integrity": "sha512-ZUU415gDQ0VjYutmVgAYYxC9Og9ixu2jAGMCU54mSMfuIlmohYfwARQmI7h4QB84M76c9hVLdONWjuo+rip/zg==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-scale": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.16.1.tgz", - "integrity": "sha512-jM2QlgThIDIc4rcyughD5O7sOYezxdafg/2Xtd1csfK3z6fba3asxDwthqPZAgitrLgiKBDp6XfzC07Y/CefUw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" - } - }, - "@jimp/plugin-shadow": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.16.1.tgz", - "integrity": "sha512-MeD2Is17oKzXLnsphAa1sDstTu6nxscugxAEk3ji0GV1FohCvpHBcec0nAq6/czg4WzqfDts+fcPfC79qWmqrA==", + "@discordjs/opus": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@discordjs/opus/-/opus-0.6.0.tgz", + "integrity": "sha512-Xuw8OP9BJgObEBs/SgxixnKj+y+w9st45uOAJ+cGegUGwxAIR4J7sQt3Y1J3G9SGGe82+MTxvy7sg1/QUkigcg==", "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@discordjs/node-pre-gyp": "^0.4.1", + "node-addon-api": "^4.0.0" } }, - "@jimp/plugin-threshold": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.16.1.tgz", - "integrity": "sha512-iGW8U/wiCSR0+6syrPioVGoSzQFt4Z91SsCRbgNKTAk7D+XQv6OI78jvvYg4o0c2FOlwGhqz147HZV5utoSLxA==", + "@discordjs/voice": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@discordjs/voice/-/voice-0.6.0.tgz", + "integrity": "sha512-DF2fZAnB8gX3Qz5BEWPOUl565ptpda1uVmXJije4iK5aQrECfkqc6XcI+wzbGaNvzsH1Wb76NPzxngsEw8bblw==", "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1" + "@types/ws": "^7.4.4", + "discord-api-types": "^0.22.0", + "prism-media": "^1.3.1", + "tiny-typed-emitter": "^2.0.3", + "ws": "^7.4.4" } }, - "@jimp/plugins": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.16.1.tgz", - "integrity": "sha512-c+lCqa25b+4q6mJZSetlxhMoYuiltyS+ValLzdwK/47+aYsq+kcJNl+TuxIEKf59yr9+5rkbpsPkZHLF/V7FFA==", + "@distube/soundcloud": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@distube/soundcloud/-/soundcloud-0.2.2.tgz", + "integrity": "sha512-N5bBP+KmJ3QmcZBn/LPnk+oMl5AIOwSvB5rfyuKhKn6sRaxMdI0VmyKgAbnZz17vS3LLRAKAr4BFYleflTpRhA==", "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/plugin-blit": "^0.16.1", - "@jimp/plugin-blur": "^0.16.1", - "@jimp/plugin-circle": "^0.16.1", - "@jimp/plugin-color": "^0.16.1", - "@jimp/plugin-contain": "^0.16.1", - "@jimp/plugin-cover": "^0.16.1", - "@jimp/plugin-crop": "^0.16.1", - "@jimp/plugin-displace": "^0.16.1", - "@jimp/plugin-dither": "^0.16.1", - "@jimp/plugin-fisheye": "^0.16.1", - "@jimp/plugin-flip": "^0.16.1", - "@jimp/plugin-gaussian": "^0.16.1", - "@jimp/plugin-invert": "^0.16.1", - "@jimp/plugin-mask": "^0.16.1", - "@jimp/plugin-normalize": "^0.16.1", - "@jimp/plugin-print": "^0.16.1", - "@jimp/plugin-resize": "^0.16.1", - "@jimp/plugin-rotate": "^0.16.1", - "@jimp/plugin-scale": "^0.16.1", - "@jimp/plugin-shadow": "^0.16.1", - "@jimp/plugin-threshold": "^0.16.1", - "timm": "^1.6.1" + "soundcloud.ts": "^0.4.1" } }, - "@jimp/png": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.16.1.tgz", - "integrity": "sha512-iyWoCxEBTW0OUWWn6SveD4LePW89kO7ZOy5sCfYeDM/oTPLpR8iMIGvZpZUz1b8kvzFr27vPst4E5rJhGjwsdw==", + "@distube/spotify": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@distube/spotify/-/spotify-0.6.3.tgz", + "integrity": "sha512-C8Wwz8EhKYy7+bueezEl9zyZpmWI9g6kH/BAsX6Z5ECT8/7x6NVpnG/0Wx8+p7PrhUCEM4F/B4K04QyIx+nxgA==", "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.16.1", - "pngjs": "^3.3.3" + "spotify-uri": "^2.2.0", + "spotify-url-info": "^2.2.3", + "spotify-web-api-node": "^5.0.2" } }, - "@jimp/tiff": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.16.1.tgz", - "integrity": "sha512-3K3+xpJS79RmSkAvFMgqY5dhSB+/sxhwTFA9f4AVHUK0oKW+u6r52Z1L0tMXHnpbAdR9EJ+xaAl2D4x19XShkQ==", - "requires": { - "@babel/runtime": "^7.7.2", - "utif": "^2.0.1" + "@distube/youtube-dl": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@distube/youtube-dl/-/youtube-dl-2.2.2.tgz", + "integrity": "sha512-r/+nt1Cvx6OIp0xI2NqtUMpVfavlmRN/7J379h7At6XAzfNMYn8dQcZZcgH0ErNE19rvFefQ0b0mGj/vwzp0kA==", + "requires": { + "dargs": "~7.0.0", + "execa": "~5.1.1", + "get-stream": "~6.0.1", + "got": "~11.8.2", + "is-unix": "~1.0.0", + "mkdirp": "~1.0.4", + "p-event": "~4.2.0", + "p-reflect": "~2.1.0" } }, - "@jimp/types": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.16.1.tgz", - "integrity": "sha512-g1w/+NfWqiVW4CaXSJyD28JQqZtm2eyKMWPhBBDCJN9nLCN12/Az0WFF3JUAktzdsEC2KRN2AqB1a2oMZBNgSQ==", + "@distube/ytdl-core": { + "version": "4.9.3", + "resolved": "https://registry.npmjs.org/@distube/ytdl-core/-/ytdl-core-4.9.3.tgz", + "integrity": "sha512-oj/XoIvY2Vc7eySHvbschqPNU4gFNkF9s5er1eljGzcBC5TP+ygt/TAo59yOJEZJe5gTsaIvbv/4W6IKCuBUPg==", "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/bmp": "^0.16.1", - "@jimp/gif": "^0.16.1", - "@jimp/jpeg": "^0.16.1", - "@jimp/png": "^0.16.1", - "@jimp/tiff": "^0.16.1", - "timm": "^1.6.1" + "m3u8stream": "^0.8.3", + "miniget": "^4.0.0", + "sax": "^1.1.3" } }, - "@jimp/utils": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.16.1.tgz", - "integrity": "sha512-8fULQjB0x4LzUSiSYG6ZtQl355sZjxbv8r9PPAuYHzS9sGiSHJQavNqK/nKnpDsVkU88/vRGcE7t3nMU0dEnVw==", + "@distube/ytpl": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@distube/ytpl/-/ytpl-1.0.12.tgz", + "integrity": "sha512-Iv6qZpUkyL+R2KQhfuvmYnqlMX+n8ts44aZ3hZUJI2dAV7lCZdsRs5MAf7oOSfZrTLL4GMNex8RGmBarm7iHtg==", "requires": { - "@babel/runtime": "^7.7.2", - "regenerator-runtime": "^0.13.3" + "miniget": "^4.2.1" } }, - "@k3rn31p4nic/google-translate-api": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@k3rn31p4nic/google-translate-api/-/google-translate-api-1.1.1.tgz", - "integrity": "sha512-vg3zLYXhUmdwrNxmoKOfYSJzB8lHKDnqR7L/SYQQKCYkxsj2syK/cJMAcK5fQC0hfwgexxUaWhR2p2gGEe3nVw==", + "@distube/ytsr": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@distube/ytsr/-/ytsr-1.1.5.tgz", + "integrity": "sha512-nSYsB+UYw0FXSivJ49MGkES41Gfg5rgavil9nOHra0yCsGiY4qsDzpoFVjCmbpKQ6GDUq4Z/8LOwZakgpH3N1A==", "requires": { - "got": "^11.1.1" + "miniget": "^4.2.1" } }, "@ksoft/api": { @@ -550,31 +215,28 @@ "flatted": "^2.0.1" } }, + "@sapphire/async-queue": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@sapphire/async-queue/-/async-queue-1.1.4.tgz", + "integrity": "sha512-fFrlF/uWpGOX5djw5Mu2Hnnrunao75WGey0sP0J3jnhmrJ5TAPzHYOmytD5iN/+pMxS+f+u/gezqHa9tPhRHEA==" + }, "@sindresorhus/is": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.0.1.tgz", "integrity": "sha512-Qm9hBEBu18wt1PO2flE7LPb30BHMQt1eQgbV76YntdNk73XZGpn3izvGTYxbGgzXKgbCjiia0uxTd3aTNQrY/g==" }, "@szmarczak/http-timer": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.5.tgz", - "integrity": "sha512-PyRA9sm1Yayuj5OIoJ1hGt2YISX45w9WcFbh6ddT0Z/0yaFxOtGLInr4jUfU1EAFVs0Yfyfev4RNwBlUaHdlDQ==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "requires": { "defer-to-connect": "^2.0.0" } }, - "@types/bson": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/bson/-/bson-4.0.5.tgz", - "integrity": "sha512-vVLwMUqhYJSQ/WKcE60eFqcyuWse5fGH+NMAXHuKrUAPoryq3ATxk5o4bgYNtg5aOM4APVg7Hnb3ASqUYG0PKg==", - "requires": { - "@types/node": "*" - } - }, "@types/cacheable-request": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.1.tgz", - "integrity": "sha512-ykFq2zmBGOCbpIXtoVbz4SKY5QriWPh3AjyU4G74RYbtt5yOc5OfaY75ftjg7mikMOla1CTGpX3lLbuJh8DTrQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.2.tgz", + "integrity": "sha512-B3xVo+dlKM6nnKTcmm5ZtY/OL8bOAOd2Olee9M1zft65ox50OzjEHW91sDiU9j6cvW8Ejg1/Qkf4xd2kugApUA==", "requires": { "@types/http-cache-semantics": "*", "@types/keyv": "*", @@ -583,31 +245,22 @@ } }, "@types/http-cache-semantics": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.0.tgz", - "integrity": "sha512-c3Xy026kOF7QOTn00hbIllV1dLR9hG9NkSrLQgCVs8NF6sBU+VGWjD3wLPhmh1TYAc7ugCFsvHYMN4VcBN1U1A==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" }, "@types/keyv": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.1.tgz", - "integrity": "sha512-MPtoySlAZQ37VoLaPcTHCu1RWJ4llDkULYZIzOYxlhxBqYPB0RsRlmMU0R6tahtFe27mIdkHV+551ZWV4PLmVw==", - "requires": { - "@types/node": "*" - } - }, - "@types/mongodb": { - "version": "3.6.20", - "resolved": "https://registry.npmjs.org/@types/mongodb/-/mongodb-3.6.20.tgz", - "integrity": "sha512-WcdpPJCakFzcWWD9juKoZbRtQxKIMYF/JIAM4JrNHrMcnJL6/a2NWjXxW7fo9hxboxxkg+icff8d7+WIEvKgYQ==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.3.tgz", + "integrity": "sha512-FXCJgyyN3ivVgRoml4h94G/p3kY+u/B86La+QptcqJaWtBWtmc6TtkNfS40n9bIvyLteHh7zXOtgbobORKPbDg==", "requires": { - "@types/bson": "*", "@types/node": "*" } }, "@types/node": { - "version": "15.12.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.12.5.tgz", - "integrity": "sha512-se3yX7UHv5Bscf8f1ERKvQOD6sTyycH3hdaoozvaLxgUiY5lIGEeH37AD0G0Qi9kPqihPn0HOfd2yaIEN9VwEg==" + "version": "16.7.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.7.13.tgz", + "integrity": "sha512-pLUPDn+YG3FYEt/pHI74HmnJOWzeR+tOIQzUx93pi9M7D8OE7PSLr97HboXwk5F+JS+TLtWuzCOW97AHjmOXXA==" }, "@types/responselike": { "version": "1.0.0", @@ -617,17 +270,26 @@ "@types/node": "*" } }, - "@ungap/url-search-params": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@ungap/url-search-params/-/url-search-params-0.2.2.tgz", - "integrity": "sha512-qQsguKXZVKdCixOHX9jqnX/K/1HekPDpGKyEcXHT+zR6EjGA7S4boSuelL4uuPv6YfhN0n8c4UxW+v/Z3gM2iw==" + "@types/webidl-conversions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", + "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" }, - "@weky/inlinereply": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/@weky/inlinereply/-/inlinereply-0.0.0.tgz", - "integrity": "sha512-wUecLX4CR87PiFbH9d264zcfnyXxZbhr30NIJBjJ96U5tHdQzyOpMPInQmU8mq2hOuC6keEM3pFiXa2B75tYDA==", + "@types/whatwg-url": { + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz", + "integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==", + "requires": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "@types/ws": { + "version": "7.4.7", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-7.4.7.tgz", + "integrity": "sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==", "requires": { - "discord.js": "^12.5.3" + "@types/node": "*" } }, "abbrev": { @@ -635,14 +297,6 @@ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "requires": { - "event-target-shim": "^5.0.0" - } - }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -652,16 +306,6 @@ "negotiator": "0.6.2" } }, - "acorn": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" - }, - "acorn-jsx": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", - "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==" - }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -670,38 +314,25 @@ "debug": "4" } }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, "aki-api": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/aki-api/-/aki-api-5.2.1.tgz", - "integrity": "sha512-hKncCXEBsP6JOkaUoXVQtLlIZw8VQsWroZNEjtNWW+CVWt6zmXrKEDJtZ00ycg4TzQemRZPH6PhvJnP9Lq3lIw==", + "version": "6.0.8", + "resolved": "https://registry.npmjs.org/aki-api/-/aki-api-6.0.8.tgz", + "integrity": "sha512-fOMHSPfcyT2WFrf2wsQf5GNpwCSJzWA7+YO3DU8j8wOS16I10lmpIxXkdx3rCiWfmhD6kXVdUaEGJ4DKkiPbMA==", "requires": { - "axios": "^0.21.1" - } - }, - "alexa-bot-api": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/alexa-bot-api/-/alexa-bot-api-2.0.5.tgz", - "integrity": "sha512-e4TBYBDl56HioC9JgJI4j7bTidX6d+CP18VFrRAxzjMn+xexxx/MPh8ymcuId9CtyP4IQ2PyKJplYOqUxH7NCw==", - "requires": { - "node-fetch": "^2.6.1" + "axios": "^0.21.1", + "https-proxy-agent": "^5.0.0" + }, + "dependencies": { + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + } } }, - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==" - }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -715,31 +346,47 @@ "color-convert": "^1.9.0" } }, - "any-base": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", - "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" - }, "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "array-flatten": { @@ -747,50 +394,22 @@ "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "ascii-table": { - "version": "0.0.9", - "resolved": "https://registry.npmjs.org/ascii-table/-/ascii-table-0.0.9.tgz", - "integrity": "sha1-BqZgTWpV1L9BqaR9mHLXp42jHnM=" - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=" - }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==" + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=" }, "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" - }, - "aws4": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", - "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==" - }, "axios": { - "version": "0.21.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.2.tgz", - "integrity": "sha512-87otirqUw3e8CzHTMO+/9kh/FSgXt/eVDvipijwDtEuwbkySWZ9SBm6VEubmJ/kLKEoLQV/POhxXFb66bfekfg==", + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.22.0.tgz", + "integrity": "sha512-Z0U3uhqQeg1oNcihswf4ZD57O3NrR1+ZXhxaROaWpDmsDTx7T2HNBV2ulBtie2hwJptu8UvgnJoK+BIqdzh/1w==", "requires": { - "follow-redirects": "^1.14.0" + "follow-redirects": "^1.14.4" } }, "balanced-match": { @@ -803,35 +422,15 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "requires": { - "tweetnacl": "^0.14.3" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - } - } - }, - "bent": { - "version": "7.3.12", - "resolved": "https://registry.npmjs.org/bent/-/bent-7.3.12.tgz", - "integrity": "sha512-T3yrKnVGB63zRuoco/7Ybl7BwwGZR0lceoVG5XmQyMIH9s19SV5m+a8qam4if0zQuAmOQTyPTPmsQBdAorGK3w==", - "requires": { - "bytesish": "^0.4.1", - "caseless": "~0.12.0", - "is-stream": "^2.0.0" - } + "base64url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/base64url/-/base64url-3.0.1.tgz", + "integrity": "sha512-ir1UPr3dkwexU7FdV8qBBbNDRUhMmIekYMFZfi+C/sLNnRESKPl23nB9b2pltqfOQNnGzsDdId90AEtG5tCx4A==" }, "better-sqlite3": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-7.4.1.tgz", - "integrity": "sha512-sk1kW3PsWE7W7G9qbi5TQxCROlQVR8YWlp4srbyrwN5DrLeamKfrm3JExwOiNSAYyJv8cw5/2HOfvF/ipZj4qg==", + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/better-sqlite3/-/better-sqlite3-7.4.3.tgz", + "integrity": "sha512-07bKjClZg/f4KMVRkzWtoIvazVPcF1gsvVKVIXlxwleC2DxuIhnra3KCMlUT1rFeRYXXckot2a46UciF2d9KLw==", "requires": { "bindings": "^1.5.0", "prebuild-install": "^6.0.1", @@ -846,14 +445,6 @@ "file-uri-to-path": "1.0.0" } }, - "biskviit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/biskviit/-/biskviit-1.0.1.tgz", - "integrity": "sha1-A3oM1LcbnjMf2QoRIt4X3EnkIKc=", - "requires": { - "psl": "^1.1.7" - } - }, "bl": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", @@ -862,30 +453,8 @@ "buffer": "^5.5.0", "inherits": "^2.0.4", "readable-stream": "^3.4.0" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, - "bluebird": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", - "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" - }, - "bmp-js": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", - "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" - }, "body-parser": { "version": "1.19.0", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", @@ -923,19 +492,10 @@ } } }, - "boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=" - }, - "booru": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/booru/-/booru-2.4.0.tgz", - "integrity": "sha512-CYawPyAd4l7JA5tq4HmTbu9xAB146aFyQ2xfhU+lHvg28+fsIP8XD2Al/VY9rgQqdE78EvaR2Lvc1AhbsSdSbA==", - "requires": { - "fast-xml-parser": "^3.17.4", - "node-fetch": "^2.6.1" - } + "bootstrap-icons": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/bootstrap-icons/-/bootstrap-icons-1.6.1.tgz", + "integrity": "sha512-MNpF89+njCdVJePDRbCd2DrUusqIyNsPlBrdKqBEXAvFZpwb+Gc8k2VlyF2ueiDQn1PoeTSg9UqQNgx8tGqHAA==" }, "brace-expansion": { "version": "1.1.11", @@ -947,9 +507,12 @@ } }, "bson": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.6.tgz", - "integrity": "sha512-EvVNVeGo4tHxwi8L6bPj3y3itEvStdwvvlojVxxbyYfoaxJ6keLgrTuKdyfEAszFK+H3olzBuafE0yoh0D1gdg==" + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.5.2.tgz", + "integrity": "sha512-8CEMJpwc7qlQtrn2rney38jQSEeMar847lz0LyitwRmVknAW8iHXrzW4fTjHfyWm0E3sukyD/zppdH+QU1QefA==", + "requires": { + "buffer": "^5.6.0" + } }, "buffer": { "version": "5.7.1", @@ -960,26 +523,16 @@ "ieee754": "^1.1.13" } }, - "buffer-equal": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", - "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" - }, "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "bytes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, - "bytesish": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/bytesish/-/bytesish-0.4.4.tgz", - "integrity": "sha512-i4uu6M4zuMUiyfZN4RU2+i9+peJh//pXhd9x1oSe1LBkZ3LEbCoygu8W0bXTukU1Jme2txKuotpCZRaC3FLxcQ==" - }, "cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", @@ -1023,135 +576,80 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" }, - "canvacord": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/canvacord/-/canvacord-5.2.1.tgz", - "integrity": "sha512-vauEvj3QEDNyza6laa4C5cKiOSld/O+Uvjr8uzD+ANUxaWtprHE6372J7oXMqrjPEsOd4XAwKuy5zlVPe4a7OQ==", - "requires": { - "@canvacord/assets": "^1.0.2", - "@canvacord/emoji-parser": "^1.0.1", - "canvas": "^2.7.0", - "gifencoder": "^2.0.1", - "moment": "^2.29.1", - "moment-duration-format": "^2.3.2" - } - }, "canvas": { "version": "2.8.0", "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.8.0.tgz", "integrity": "sha512-gLTi17X8WY9Cf5GZ2Yns8T5lfBOcGgFehDFb+JQwDqdOoBOcECS9ZWMEAqMSVcMYwXD659J8NyzjRY/2aE+C2Q==", "requires": { - "@mapbox/node-pre-gyp": "^1.0.0", - "nan": "^2.14.0", - "simple-get": "^3.0.3" - }, - "dependencies": { - "@mapbox/node-pre-gyp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.5.tgz", - "integrity": "sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA==", - "requires": { - "detect-libc": "^1.0.3", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.1", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "rimraf": "^3.0.2", - "semver": "^7.3.4", - "tar": "^6.1.0" - } - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "requires": { - "abbrev": "1" - } - } - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.14.0", + "simple-get": "^3.0.3" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "@mapbox/node-pre-gyp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.5.tgz", + "integrity": "sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA==", "requires": { - "color-convert": "^2.0.1" + "detect-libc": "^1.0.3", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.1", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "rimraf": "^3.0.2", + "semver": "^7.3.4", + "tar": "^6.1.0" } }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node-fetch": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", "requires": { - "color-name": "~1.1.4" + "whatwg-url": "^5.0.0" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", "requires": { - "has-flag": "^4.0.0" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } } } }, - "cheerio": { - "version": "1.0.0-rc.10", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.10.tgz", - "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", - "requires": { - "cheerio-select": "^1.5.0", - "dom-serializer": "^1.3.2", - "domhandler": "^4.2.0", - "htmlparser2": "^6.1.0", - "parse5": "^6.0.1", - "parse5-htmlparser2-tree-adapter": "^6.0.1", - "tslib": "^2.2.0" - } + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=" }, - "cheerio-select": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-1.5.0.tgz", - "integrity": "sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg==", + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "css-select": "^4.1.3", - "css-what": "^5.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0", - "domutils": "^2.7.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "clone-response": { "version": "1.0.2", @@ -1159,13 +657,6 @@ "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", "requires": { "mimic-response": "^1.0.0" - }, - "dependencies": { - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - } } }, "code-point-at": { @@ -1186,6 +677,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, "colors": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz", @@ -1199,16 +695,6 @@ "delayed-stream": "~1.0.0" } }, - "common-tags": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/common-tags/-/common-tags-1.8.0.tgz", - "integrity": "sha512-6P6g0uetGpW/sdyUy/iQQCbFF0kWVMSIVSyYz7Zgjcgh8mgw8PQzDNZeyZ5DQ2gM7LBoZPHmnjz8rUthkBG5tw==" - }, - "complex.js": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/complex.js/-/complex.js-2.0.13.tgz", - "integrity": "sha512-UEWd3G3/kd3lJmsdLsDh9qfinJlujL4hIFn3Vo4/G5eqehPsgCHf2CLhFs77tVkOp2stt/jbNit7Q1XFANFltA==" - }, "component-emitter": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", @@ -1228,6 +714,35 @@ "inherits": "^2.0.3", "readable-stream": "^2.2.2", "typedarray": "^0.0.6" + }, + "dependencies": { + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } } }, "console-control-strings": { @@ -1241,6 +756,13 @@ "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "requires": { "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } } }, "content-type": { @@ -1264,9 +786,9 @@ "integrity": "sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA==" }, "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" }, "cpu-stat": { "version": "2.0.1", @@ -1279,6 +801,13 @@ "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", "requires": { "node-fetch": "2.6.1" + }, + "dependencies": { + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + } } }, "cross-spawn": { @@ -1291,30 +820,10 @@ "which": "^2.0.1" } }, - "css-select": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.1.3.tgz", - "integrity": "sha512-gT3wBNd9Nj49rAbmtFHj1cljIAOLYSX1nZ8CB7TBO3INYckygm5B7LISU/szY//YmdiSLbJvDLOx9VnMVpMBxA==", - "requires": { - "boolbase": "^1.0.0", - "css-what": "^5.0.0", - "domhandler": "^4.2.0", - "domutils": "^2.6.0", - "nth-check": "^2.0.0" - } - }, - "css-what": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-5.0.1.tgz", - "integrity": "sha512-FYDTSHb/7KXsWICVsxdmiExPjCfRC4qRFBdVwv7Ax9hMnvMmEjP9RfxTEZ3qPZGmADDn2vAKSo9UcN1jKVYscg==" - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "requires": { - "assert-plus": "^1.0.0" - } + "dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==" }, "data-uri-to-buffer": { "version": "3.0.1", @@ -1322,9 +831,9 @@ "integrity": "sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==" }, "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { "ms": "2.1.2" }, @@ -1336,17 +845,19 @@ } } }, - "decimal.js": { - "version": "10.3.1", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.3.1.tgz", - "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==" - }, "decompress-response": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", - "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "requires": { - "mimic-response": "^2.0.0" + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + } } }, "deep-extend": { @@ -1354,24 +865,6 @@ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" }, - "deep-is": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" - }, - "deepmerge": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", - "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==" - }, - "deezer-public-api": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/deezer-public-api/-/deezer-public-api-1.0.4.tgz", - "integrity": "sha512-OFJeOU1ArGjgW4+eNpqkKh3SYTg9hjc3vVe3BRWOxFk1lMTM6J2Zk1kkilt74VWtMGMFpFFkUvL+D3nbHd6BnQ==", - "requires": { - "node-fetch": "2.6.1" - } - }, "defer-to-connect": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", @@ -1388,9 +881,9 @@ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "denque": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.0.tgz", - "integrity": "sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ==" + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", + "integrity": "sha512-XwE+iZ4D6ZUB7mfYRMb5wByE8L74HCn30FBN7sWnXksWc1LO1bPDl67pBR9o/kC4z/xSNAwkMYcGgqDV3BE3Hw==" }, "depd": { "version": "1.1.2", @@ -1407,142 +900,97 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, - "discord-buttons": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/discord-buttons/-/discord-buttons-4.0.0.tgz", - "integrity": "sha512-E/eQX4Ktj7nKwNDsTfCezBNCu73FtPWJfQcpKohfl0jct/ucMUO+7uhL2MhGsZr4SCfojk7OzccAznuntB564w==" - }, - "discord-giveaways": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/discord-giveaways/-/discord-giveaways-4.5.1.tgz", - "integrity": "sha512-aSOD7IiCqfJ2sU1GbdH0EP/xwuXZW/h7+8RH6LzgfZaYy2V89O0qKwbe52Dy2ToymAexPhEGpDKZHrm6Vd0Jqw==", - "requires": { - "deepmerge": "^4.2.2", - "serialize-javascript": "^5.0.1" - } - }, - "discord-mongo-currency": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/discord-mongo-currency/-/discord-mongo-currency-1.0.4.tgz", - "integrity": "sha512-YSD//h1UNgdIxqlTDC2Is3Abr11XS9NIfChN691Lz2AVtSiV2F5EQNX/RVcSn3bSYyHfbIDZTEma/cixoA8WSQ==", - "requires": { - "mongoose": "^5.10.0" - } + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" }, - "discord-ytdl-core": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/discord-ytdl-core/-/discord-ytdl-core-5.0.4.tgz", - "integrity": "sha512-O+G9wuCw5TERR9iHZFMYnYQbs/ZGudDc9cxa1OKSV5TdcBYrHGS1JqvE90ZvSQ6SmS4XvqtOf/Okls6yiGJ3sg==", - "requires": { - "prism-media": "^1.2.9" - } + "discord-api-types": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/discord-api-types/-/discord-api-types-0.22.0.tgz", + "integrity": "sha512-l8yD/2zRbZItUQpy7ZxBJwaLX/Bs2TGaCthRppk8Sw24LOIWg12t9JEreezPoYD0SQcC2htNNo27kYEpYW/Srg==" }, "discord.js": { - "version": "12.5.3", - "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-12.5.3.tgz", - "integrity": "sha512-D3nkOa/pCkNyn6jLZnAiJApw2N9XrIsXUAdThf01i7yrEuqUmDGc7/CexVWwEcgbQR97XQ+mcnqJpmJ/92B4Aw==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/discord.js/-/discord.js-13.1.0.tgz", + "integrity": "sha512-gxO4CXKdHpqA+WKG+f5RNnd3srTDj5uFJHgOathksDE90YNq/Qijkd2WlMgTTMS6AJoEnHxI7G9eDQHCuZ+xDA==", "requires": { - "@discordjs/collection": "^0.1.6", + "@discordjs/builders": "^0.5.0", + "@discordjs/collection": "^0.2.1", "@discordjs/form-data": "^3.0.1", - "abort-controller": "^3.0.0", + "@sapphire/async-queue": "^1.1.4", + "@types/ws": "^7.4.7", + "discord-api-types": "^0.22.0", "node-fetch": "^2.6.1", - "prism-media": "^1.2.9", - "setimmediate": "^1.0.5", - "tweetnacl": "^1.0.3", - "ws": "^7.4.4" - } - }, - "discord.js-menu": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/discord.js-menu/-/discord.js-menu-2.3.1.tgz", - "integrity": "sha512-qcADrhSmFmbBCyj/TMX3Ys7NgdKbvLczFGEOr+4bJcidrsH/GexysuMzBvnTVwke+Qu2O7gqwwoGlvemiI++KQ==", - "requires": { - "discord.js": "^12.5.1" - } - }, - "discord.js-pagination": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/discord.js-pagination/-/discord.js-pagination-1.0.3.tgz", - "integrity": "sha512-n6wuNo3CclZdwRfc5LMInjcrN23iKnKQTtlpX3VXGRtNofawBeQroYhl7xotSmpkIlL2Uqwo13T11+hHdNJ/bQ==" - }, - "discord.js-search": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/discord.js-search/-/discord.js-search-1.0.1.tgz", - "integrity": "sha512-nd1eQLGtfxUTHfjUP6ua04wGnQveK0qwCfcqvO53BLZ2DHMaGFe7DiWOKud6c+OhJvYFT4N+PN/DVNMg8pssJQ==", - "requires": { - "semver": "^7.3.4" + "ws": "^7.5.1" + }, + "dependencies": { + "@discordjs/builders": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@discordjs/builders/-/builders-0.5.0.tgz", + "integrity": "sha512-HP5y4Rqw68o61Qv4qM5tVmDbWi4mdTFftqIOGRo33SNPpLJ1Ga3KEIR2ibKofkmsoQhEpLmopD1AZDs3cKpHuw==", + "requires": { + "@sindresorhus/is": "^4.0.1", + "discord-api-types": "^0.22.0", + "ow": "^0.27.0", + "ts-mixer": "^6.0.0", + "tslib": "^2.3.0" + } + }, + "node-fetch": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.5.tgz", + "integrity": "sha512-mmlIVHJEu5rnIxgEgez6b9GgWXbkZj5YZ7fx+2r94a2E+Uirsp6HsPTPlomfdHtpt/B0cdKviwkoaM6pyvUOpQ==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } } }, "distube": { - "version": "2.8.15", - "resolved": "https://registry.npmjs.org/distube/-/distube-2.8.15.tgz", - "integrity": "sha512-g8uL2IrVX0CJxguhiEn0ARpSMZfKnrC4Z1Nw8bQSMVN6P8k1kJqR7gtme3SvxuRcf6ygBQUQDD2/sjRQiuBToQ==", - "requires": { - "@distube/youtube-dl": "^1.0.4", - "@distube/ytdl": "^2.0.6", - "@distube/ytpl": "^1.0.11", - "@distube/ytsr": "^1.1.0", - "ytdl-core": "^4.8.2" - } - }, - "doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "requires": { - "esutils": "^2.0.2" - } - }, - "dom-serializer": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", - "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - } - }, - "dom-walk": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", - "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" - }, - "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==" - }, - "domhandler": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", - "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", - "requires": { - "domelementtype": "^2.2.0" - } - }, - "domutils": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", - "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", - "requires": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" + "version": "3.0.0-beta.38", + "resolved": "https://registry.npmjs.org/distube/-/distube-3.0.0-beta.38.tgz", + "integrity": "sha512-3Gli41VGfI5bk7XJOeN+ZMwTcEx4Vopj7xWJIewUU6m43Wo56y8ilNVqoOfgEz6Bin2PI54gIMHpMUQmLKA0cw==", + "requires": { + "@distube/youtube-dl": "^2.2.2", + "@distube/ytdl-core": "^4.9.3", + "@distube/ytpl": "^1.0.12", + "@distube/ytsr": "^1.1.5", + "prism-media": "github:distubejs/prism-media", + "tiny-typed-emitter": "^2.1.0" + }, + "dependencies": { + "prism-media": { + "version": "github:distubejs/prism-media#5317c4c6273669f6286d7f30c019307a1941c202", + "from": "github:distubejs/prism-media" + } } }, - "dotenv": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.6.0.tgz", - "integrity": "sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "is-obj": "^2.0.0" } }, "ee-first": { @@ -1550,24 +998,19 @@ "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "ejs": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", + "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", + "requires": { + "jake": "^10.6.1" + } }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" }, - "encoding": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz", - "integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=", - "requires": { - "iconv-lite": "~0.4.13" - } - }, "end-of-stream": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", @@ -1577,9 +1020,9 @@ } }, "enmap": { - "version": "5.8.5", - "resolved": "https://registry.npmjs.org/enmap/-/enmap-5.8.5.tgz", - "integrity": "sha512-9J1U7Ah2M6Q62K2lrVCMVijMfL9nxOQKoOl7yeahq1qMFt8904SWSTAPH2mVb/+sZ1l2R5xyxxMTvOHWdrQBSg==", + "version": "5.8.7", + "resolved": "https://registry.npmjs.org/enmap/-/enmap-5.8.7.tgz", + "integrity": "sha512-JmTRK0hFjatxz6tWN+E4IzuMz5rxKjQvweRXzlmhrgAa66b96DAySW3YRb5p0drpJ7ZLt1WX+PWIpnHDH134jQ==", "requires": { "better-sqlite3": "^7.1.0", "lodash": "^4.17.20", @@ -1587,19 +1030,6 @@ "serialize-javascript": "^5.0.1" } }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" - }, "env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -1610,188 +1040,20 @@ "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" }, - "escape-latex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/escape-latex/-/escape-latex-1.2.0.tgz", - "integrity": "sha512-nV5aVWW1K0wEiUIEdZ4erkGGH8mDxGyxSeqPzRNtWP7ataw+/olFObw7hujFWlVjNsaDFw5VZ5NzVSIqRgfTiw==" - }, "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" - }, - "eslint": { - "version": "7.32.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", - "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", - "requires": { - "@babel/code-frame": "7.12.11", - "@eslint/eslintrc": "^0.4.3", - "@humanwhocodes/config-array": "^0.5.0", - "ajv": "^6.10.0", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.0.1", - "doctrine": "^3.0.0", - "enquirer": "^2.3.5", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^5.1.1", - "eslint-utils": "^2.1.0", - "eslint-visitor-keys": "^2.0.0", - "espree": "^7.3.1", - "esquery": "^1.4.0", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "functional-red-black-tree": "^1.0.1", - "glob-parent": "^5.1.2", - "globals": "^13.6.0", - "ignore": "^4.0.6", - "import-fresh": "^3.0.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "js-yaml": "^3.13.1", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.0.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.1", - "progress": "^2.0.0", - "regexpp": "^3.1.0", - "semver": "^7.2.1", - "strip-ansi": "^6.0.0", - "strip-json-comments": "^3.1.0", - "table": "^6.0.9", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" - } - } - }, - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - } - }, - "eslint-utils": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", - "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", - "requires": { - "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - } - } - }, - "eslint-visitor-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", - "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==" - }, - "espree": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", - "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", - "requires": { - "acorn": "^7.4.0", - "acorn-jsx": "^5.3.1", - "eslint-visitor-keys": "^1.3.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" - } - } - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - }, - "esquery": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", - "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "requires": { - "estraverse": "^5.1.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - } - } - }, - "esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", - "requires": { - "estraverse": "^5.2.0" - }, - "dependencies": { - "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==" - } - } - }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" - }, - "esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" - }, "execa": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.1.tgz", - "integrity": "sha512-4hFTjFbFzQa3aCLobpbPJR/U+VoL1wdV5ozOWjeet0AWDeYr9UFGM1eUFWHX+VtOWFq4p0xXUXfW1YxUaP4fpw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -1804,11 +1066,6 @@ "strip-final-newline": "^2.0.0" } }, - "exif-parser": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", - "integrity": "sha1-WKnS1ywCwfbwKg70qRZicrd2CSI=" - }, "expand-template": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", @@ -1868,58 +1125,72 @@ "version": "6.7.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" } } }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" - }, - "fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" + "express-session": { + "version": "1.17.2", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.2.tgz", + "integrity": "sha512-mPcYcLA0lvh7D4Oqr5aNJFMtBMKPLl++OKKxkHzZ0U0oDq1rpKBnkR5f5vCHR26VeArlTOEF9td4x5IjICksRQ==", + "requires": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "dependencies": { + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + } + } }, - "fast-safe-stringify": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz", - "integrity": "sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA==" + "eyes": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/eyes/-/eyes-0.1.8.tgz", + "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" }, - "fast-xml-parser": { - "version": "3.19.0", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-3.19.0.tgz", - "integrity": "sha512-4pXwmBplsCPv8FOY1WRakF970TjNGnGnfbOnLqjlYvMiF1SR3yOHyxMR/YCXpPTOspNF5gwudqktIP4VsWkvBg==" + "fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, - "fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha1-CoJ58Gvjf58Ou1Z1YKMKSA2lmi4=", + "fetch-blob": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-3.1.2.tgz", + "integrity": "sha512-hunJbvy/6OLjCD0uuhLdp0mMPzP/yd2ssd1t2FCJsaA7wkWhpbp9xfuNVpv7Ll4jFhzp6T4LAupSiV9uOeg0VQ==", "requires": { - "biskviit": "1.0.1", - "encoding": "0.1.12" + "web-streams-polyfill": "^3.0.3" } }, - "fetch-blob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fetch-blob/-/fetch-blob-2.1.2.tgz", - "integrity": "sha512-YKqtUDwqLyfyMnmbw8XD6Q8j9i/HggKtPEI+pZ1+8bvheBu78biSmNaXWusx1TauGqtUUGx/cBb1mKdq2rLYow==" - }, "ffmpeg-static": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/ffmpeg-static/-/ffmpeg-static-4.4.0.tgz", @@ -1931,29 +1202,19 @@ "progress": "^2.0.3" } }, - "figlet": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.5.0.tgz", - "integrity": "sha512-ZQJM4aifMpz6H19AW1VqvZ7l4pOE9p7i/3LyxgO2kp+PO/VcDYNqIHEMtkccqIhTXMKci4kjueJr/iCQEaT/Ww==" - }, - "file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", - "requires": { - "flat-cache": "^3.0.4" - } - }, - "file-type": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", - "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" - }, "file-uri-to-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==" }, + "filelist": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", + "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "requires": { + "minimatch": "^3.0.4" + } + }, "finalhandler": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", @@ -1983,22 +1244,6 @@ } } }, - "flat-cache": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", - "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", - "requires": { - "flatted": "^3.1.0", - "rimraf": "^3.0.2" - }, - "dependencies": { - "flatted": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", - "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==" - } - } - }, "flatted": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", @@ -2009,18 +1254,13 @@ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.4.tgz", "integrity": "sha512-zwGkiSXC1MUJG/qmeIFH2HBJx9u0V46QGUe3YR1fXG8bXQxq7fLj0RjLZQ5nubr9qNJUZrH+xUcwXEoXNpfS+g==" }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=" - }, "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, @@ -2034,11 +1274,6 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, - "fraction.js": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.1.tgz", - "integrity": "sha512-MHOhvvxHTfRFpF1geTK9czMIZ6xclsEor2wkIGYYq+PxcQqT7vStJqjhe6S1TenZrMZzo+wlqOufBDVepUEgPg==" - }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -2067,11 +1302,6 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=" - }, "gauge": { "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", @@ -2102,31 +1332,6 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "requires": { - "assert-plus": "^1.0.0" - } - }, - "gifencoder": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/gifencoder/-/gifencoder-2.0.1.tgz", - "integrity": "sha512-x19DcyWY10SkshBpokqFOo/HBht9GB75evRYvaLMbez9p+yB/o+kt0fK9AwW59nFiAMs2UUQsjv1lX/hvu9Ong==", - "requires": { - "canvas": "^2.2.0" - } - }, - "gifwrap": { - "version": "0.9.2", - "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.9.2.tgz", - "integrity": "sha512-fcIswrPaiCDAyO8xnWvHSZdWChjKXUanKKpAiWWJ/UTkEi/aYKn5+90e7DE820zbEaVR9CE2y4z9bzhQijZ0BA==", - "requires": { - "image-q": "^1.1.1", - "omggif": "^1.0.10" - } - }, "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", @@ -2145,31 +1350,6 @@ "path-is-absolute": "^1.0.0" } }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "requires": { - "is-glob": "^4.0.1" - } - }, - "global": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", - "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", - "requires": { - "min-document": "^2.19.0", - "process": "^0.11.10" - } - }, - "globals": { - "version": "13.10.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", - "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", - "requires": { - "type-fest": "^0.20.2" - } - }, "got": { "version": "11.8.2", "resolved": "https://registry.npmjs.org/got/-/got-11.8.2.tgz", @@ -2186,35 +1366,6 @@ "lowercase-keys": "^2.0.0", "p-cancelable": "^2.0.0", "responselike": "^2.0.0" - }, - "dependencies": { - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "requires": { - "mimic-response": "^3.1.0" - } - }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" - } - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=" - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" } }, "has": { @@ -2240,34 +1391,15 @@ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, - "hh-mm-ss": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/hh-mm-ss/-/hh-mm-ss-1.2.0.tgz", - "integrity": "sha512-f4I9Hz1dLpX/3mrEs7yq30+FiuO3tt5NWAqAGeBTaoeoBfB8vhcQ3BphuDc5DjZb/K809agqrAaFlP0jhEU/8w==", - "requires": { - "zero-fill": "^2.2.3" - } - }, "himalaya": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/himalaya/-/himalaya-1.1.0.tgz", "integrity": "sha512-LLase1dHCRMel68/HZTFft0N0wti0epHr3nNY7ynpLbyZpmrKMQ8YIpiOV77TM97cNpC8Wb2n6f66IRggwdWPw==" }, - "html-entities": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.3.2.tgz", - "integrity": "sha512-c3Ab/url5ksaT0WyleslpBEthOzWhrjQbg75y7XUsfSzi3Dgzt0l8w5e7DylRn15MTlMMD58dTfzddNS2kcAjQ==" - }, - "htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "requires": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } + "http": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/http/-/http-0.0.1-security.tgz", + "integrity": "sha512-RnDvP10Ty9FxqOtPZuxtebw1j4L/WiqNMDtuc1YMH1XQm5TgDRaR1G9u8upL6KD1bXHSp9eSXo/ED+8Q7FAr+g==" }, "http-cache-semantics": { "version": "4.1.0", @@ -2308,16 +1440,6 @@ } } }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, "http2-wrapper": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", @@ -2354,48 +1476,6 @@ "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, - "ignore": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" - }, - "ignore-walk": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", - "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", - "requires": { - "minimatch": "^3.0.4" - } - }, - "image-q": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/image-q/-/image-q-1.1.1.tgz", - "integrity": "sha1-/IQJlmRGC5DKhi2TALa/u7+/gFY=" - }, - "imdb-api": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/imdb-api/-/imdb-api-4.4.1.tgz", - "integrity": "sha512-bd2beJWHLDlB7iGsCNcGfQR0ioDCgUdOo42vDP/laTdEHrkzp7Dnj4ysXBp74mBJj1AMZntdoeBbmwEBpfamEg==", - "requires": { - "@ungap/url-search-params": "^0.2.2", - "ky": "^0.24.0", - "ky-universal": "^0.8.2" - } - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -2420,11 +1500,6 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" - }, "is-fullwidth-code-point": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", @@ -2433,28 +1508,20 @@ "number-is-nan": "^1.0.0" } }, - "is-function": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", - "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" - }, - "is-glob": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", - "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", - "requires": { - "is-extglob": "^2.1.1" - } + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" }, "is-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", - "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, - "is-typedarray": { + "is-unix": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "resolved": "https://registry.npmjs.org/is-unix/-/is-unix-1.0.0.tgz", + "integrity": "sha1-YUdtuMGVR4esXzJvOMY7zZ0d+9U=" }, "isarray": { "version": "1.0.0", @@ -2466,96 +1533,22 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=" - }, - "javascript-natural-sort": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/javascript-natural-sort/-/javascript-natural-sort-0.7.1.tgz", - "integrity": "sha1-+eIwPUUH9tdDVac2ZNFED7Wg71k=" - }, - "jimp": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.16.1.tgz", - "integrity": "sha512-+EKVxbR36Td7Hfd23wKGIeEyHbxShZDX6L8uJkgVW3ESA9GiTEPK08tG1XI2r/0w5Ch0HyJF5kPqF9K7EmGjaw==", - "requires": { - "@babel/runtime": "^7.7.2", - "@jimp/custom": "^0.16.1", - "@jimp/plugins": "^0.16.1", - "@jimp/types": "^0.16.1", - "regenerator-runtime": "^0.13.3" - } - }, - "jpeg-js": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.2.tgz", - "integrity": "sha512-+az2gi/hvex7eLTMTlbRLOhH6P6WFdk2ITI8HJsaH2VqYO0I594zXSYEP+tf4FW+8Cy68ScDXoAsQdyQanv3sw==" - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "js2xmlparser": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.1.tgz", - "integrity": "sha512-KrPTolcw6RocpYjdC7pL7v62e55q7qOMHvLX1UCLc5AAS8qeJ6nukarEJAF2KL2PZxlbGueEbINqZR2bDe/gUw==", + "jake": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", + "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", "requires": { - "xmlcreate": "^2.0.3" + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=" - }, "json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" - }, - "json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=" - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, "kareem": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", @@ -2569,53 +1562,17 @@ "json-buffer": "3.0.1" } }, - "ky": { - "version": "0.24.0", - "resolved": "https://registry.npmjs.org/ky/-/ky-0.24.0.tgz", - "integrity": "sha512-/vpuQguwV30jErrqLpoaU/YJAFALrUkqqWLILnSoBOj5/O/LKzro/pPNtxbLgY6m4w5XNM6YZ3v7/or8qLlFuw==" - }, - "ky-universal": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/ky-universal/-/ky-universal-0.8.2.tgz", - "integrity": "sha512-xe0JaOH9QeYxdyGLnzUOVGK4Z6FGvDVzcXFTdrYA1f33MZdEa45sUDaMBy98xQMcsd2XIBrTXRrRYnegcSdgVQ==", - "requires": { - "abort-controller": "^3.0.0", - "node-fetch": "3.0.0-beta.9" - }, - "dependencies": { - "node-fetch": { - "version": "3.0.0-beta.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0-beta.9.tgz", - "integrity": "sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==", - "requires": { - "data-uri-to-buffer": "^3.0.1", - "fetch-blob": "^2.1.1" - } - } - } - }, - "levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", - "requires": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - } + "libsodium": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/libsodium/-/libsodium-0.7.9.tgz", + "integrity": "sha512-gfeADtR4D/CM0oRUviKBViMGXZDgnFdMKMzHsvBdqLBHd9ySi6EtYnmuhHVDDYgYpAO8eU8hEY+F8vIUAPh08A==" }, - "load-bmfont": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", - "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", + "libsodium-wrappers": { + "version": "0.7.9", + "resolved": "https://registry.npmjs.org/libsodium-wrappers/-/libsodium-wrappers-0.7.9.tgz", + "integrity": "sha512-9HaAeBGk1nKTRFRHkt7nzxqCvnkWTjn1pdjKgcUnZxj0FyOP4CnhgFhMdrFfgNsukijBGyBLpP2m2uKT1vuWhQ==", "requires": { - "buffer-equal": "0.0.1", - "mime": "^1.3.4", - "parse-bmfont-ascii": "^1.0.3", - "parse-bmfont-binary": "^1.0.5", - "parse-bmfont-xml": "^1.1.4", - "phin": "^2.9.1", - "xhr": "^2.0.1", - "xtend": "^4.0.0" + "libsodium": "^0.7.0" } }, "lodash": { @@ -2623,20 +1580,10 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "lodash.clonedeep": { + "lodash.isequal": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=" - }, - "lodash.merge": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", - "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==" - }, - "lodash.truncate": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", - "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=" + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, "lowercase-keys": { "version": "2.0.0", @@ -2675,44 +1622,6 @@ } } }, - "mal-scraper": { - "version": "2.11.3", - "resolved": "https://registry.npmjs.org/mal-scraper/-/mal-scraper-2.11.3.tgz", - "integrity": "sha512-OzWDPet6e0f7ijthlNoYEOSJH8ggVvJzm5aUXA7BACtL9np+7acQpnHou90vShOwCx4VR4ofkut5RO/oD2wOAg==", - "requires": { - "axios": "^0.21.1", - "cheerio": "^1.0.0-rc.3", - "js2xmlparser": "^4.0.0", - "match-sorter": "^4.0.2", - "request": "^2.88.0", - "xml2js": "^0.4.22" - } - }, - "match-sorter": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-4.2.1.tgz", - "integrity": "sha512-s+3h9TiZU9U1pWhIERHf8/f4LmBN6IXaRgo2CI17+XGByGS1GvG5VvXK9pcGyCjGe3WM3mSYRC3ipGrd5UEVgw==", - "requires": { - "@babel/runtime": "^7.10.5", - "remove-accents": "0.4.2" - } - }, - "mathjs": { - "version": "9.4.3", - "resolved": "https://registry.npmjs.org/mathjs/-/mathjs-9.4.3.tgz", - "integrity": "sha512-UgIalR0ICCu1Me4kVPEXb8Xtw7S62XMpP7qSXfImQsoIc1pOX/IxZkLw33VdFYlmXpma3zcRoMq5auwB2fg1AA==", - "requires": { - "@babel/runtime": "^7.14.6", - "complex.js": "^2.0.13", - "decimal.js": "^10.3.0", - "escape-latex": "^1.2.0", - "fraction.js": "^4.1.1", - "javascript-natural-sort": "^0.7.1", - "seedrandom": "^3.0.5", - "tiny-emitter": "^2.1.0", - "typed-function": "^2.0.0" - } - }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -2724,6 +1633,31 @@ "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", "optional": true }, + "memorystore": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/memorystore/-/memorystore-1.6.6.tgz", + "integrity": "sha512-EbLl1xg9+DlnjXkZK/eMUoWyhZ1IxcWMpSuFyqyA/Z4BNuH7BR+E0yC40WbLZZ6G8LxHiUZ2DPhqV8DR8+9UQQ==", + "requires": { + "debug": "^4.3.0", + "lru-cache": "^4.0.3" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + } + } + }, "merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", @@ -2740,21 +1674,21 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" }, "mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" + "version": "1.49.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz", + "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==" }, "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "version": "2.1.32", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz", + "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==", "requires": { - "mime-db": "1.48.0" + "mime-db": "1.49.0" } }, "mimic-fn": { @@ -2763,17 +1697,9 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "mimic-response": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", - "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" - }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "requires": { - "dom-walk": "^0.1.0" - } + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, "miniget": { "version": "4.2.1", @@ -2811,68 +1737,47 @@ } }, "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "requires": { - "minimist": "^1.2.5" - } + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" }, "mkdirp-classic": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, - "moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" - }, - "moment-duration-format": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/moment-duration-format/-/moment-duration-format-2.3.2.tgz", - "integrity": "sha512-cBMXjSW+fjOb4tyaVHuaVE/A5TqkukDWiOfxxAjY+PEqmmBQlLwn+8OzwPiG3brouXKY5Un4pBjAeB6UToXHaQ==" - }, "mongodb": { - "version": "3.6.11", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.6.11.tgz", - "integrity": "sha512-4Y4lTFHDHZZdgMaHmojtNAlqkvddX2QQBEN0K//GzxhGwlI9tZ9R0vhbjr1Decw+TF7qK0ZLjQT292XgHRRQgw==", - "requires": { - "bl": "^2.2.1", - "bson": "^1.1.4", - "denque": "^1.4.1", - "optional-require": "^1.0.3", - "safe-buffer": "^5.1.2", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.1.1.tgz", + "integrity": "sha512-fbACrWEyvr6yl0sSiCGV0sqEiBwTtDJ8iSojmkDjAfw9JnOZSAkUyv9seFSPYhPPKwxp1PDtyjvBNfMDz0WBLQ==", + "requires": { + "bson": "^4.5.1", + "denque": "^1.5.0", + "mongodb-connection-string-url": "^2.0.0", "saslprep": "^1.0.0" - }, - "dependencies": { - "bl": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.1.tgz", - "integrity": "sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g==", - "requires": { - "readable-stream": "^2.3.5", - "safe-buffer": "^5.1.1" - } - } + } + }, + "mongodb-connection-string-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.1.0.tgz", + "integrity": "sha512-Qf9Zw7KGiRljWvMrrUFDdVqo46KIEiDuCzvEN97rh/PcKzk2bd6n9KuzEwBwW9xo5glwx69y1mI6s+jFUD/aIQ==", + "requires": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^9.1.0" } }, "mongoose": { - "version": "5.13.7", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.13.7.tgz", - "integrity": "sha512-ADIvftZ+KfoTALMZ0n8HvBlezFhcUd73hQaHQDwQ+3X+JZlqE47fUy9yhFZ2SjT+qzmuaCcIXCfhewIc38t2fQ==", + "version": "6.0.7", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.0.7.tgz", + "integrity": "sha512-44STDcV6awu0zfo1Z3NyKPHZwfVrGU93/QgR0gYbt4bik/nEa7lI1RRGcq5oyGM0YE7l63i2j80v1OhvrlFvYw==", "requires": { - "@types/mongodb": "^3.5.27", - "bson": "^1.1.4", + "bson": "^4.2.2", "kareem": "2.3.2", - "mongodb": "3.6.11", - "mongoose-legacy-pluralize": "1.0.2", - "mpath": "0.8.3", - "mquery": "3.2.5", + "mongodb": "4.1.1", + "mpath": "0.8.4", + "mquery": "4.0.0", "ms": "2.1.2", - "optional-require": "1.0.x", "regexp-clone": "1.0.0", - "safe-buffer": "5.2.1", "sift": "13.5.2", "sliced": "1.0.1" }, @@ -2881,49 +1786,22 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" } } }, - "mongoose-legacy-pluralize": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz", - "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ==" - }, "mpath": { - "version": "0.8.3", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.3.tgz", - "integrity": "sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA==" + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", + "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==" }, "mquery": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.5.tgz", - "integrity": "sha512-VjOKHHgU84wij7IUoZzFRU07IAxd5kWJaDmyUzQlbjHjyoeK5TNeeo8ZsFDtTYnSgpW6n/nMNIHvE3u8Lbrf4A==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.0.tgz", + "integrity": "sha512-nGjm89lHja+T/b8cybAby6H0YgA4qYC/lx6UlwvHGqvTq8bDaNeCwl1sY8uRELrNbVWJzIihxVd+vphGGn1vBw==", "requires": { - "bluebird": "3.5.1", - "debug": "3.1.0", + "debug": "4.x", "regexp-clone": "^1.0.0", - "safe-buffer": "5.1.2", "sliced": "1.0.1" - }, - "dependencies": { - "debug": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", - "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", - "requires": { - "ms": "2.0.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - } } }, "ms": { @@ -2932,62 +1810,33 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "nan": { - "version": "2.14.2", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", - "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==" + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" }, "napi-build-utils": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, - "natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=" - }, - "needle": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.6.0.tgz", - "integrity": "sha512-KKYdza4heMsEfSWD7VPUIz3zX2XDwOyX2d+geb4vrERZMT5RMU6ujjaD+I5Yr54uZxQ2w6XRTAhHBbSCyovZBg==", - "requires": { - "debug": "^3.2.6", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "requires": { - "ms": "^2.1.1" - } - } - } - }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, - "nekos.life": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/nekos.life/-/nekos.life-2.0.7.tgz", - "integrity": "sha512-kL5sYOqaDTIdVH40YVrtWQPX60bGK3Ri/j2jnHugZ86lxc4xIytUmGelspFwKAs4TOHDSZh4jiJGGL8dQ55HNA==" - }, "node": { - "version": "16.6.1", - "resolved": "https://registry.npmjs.org/node/-/node-16.6.1.tgz", - "integrity": "sha512-qlIQ5vkAAMP+T1bYivwngIqZlUzerPSeaeAQVUvyQ2XZ8WN86ZUdzcpkW/iuEnP9paNcpAsA4p9yCsfrdjG7YQ==", + "version": "16.10.0", + "resolved": "https://registry.npmjs.org/node/-/node-16.10.0.tgz", + "integrity": "sha512-SXcqz3j4AOFMPPsd0bXDpQY95Xm8mnJ7PbBhJKEvp+aPYoVH38QAHha59EAuRaiASaSLWt5sP0oDCMzzaSmEAA==", + "dev": true, "requires": { "node-bin-setup": "^1.0.0" } }, "node-abi": { - "version": "2.30.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.0.tgz", - "integrity": "sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg==", + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz", + "integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==", "requires": { "semver": "^5.4.1" }, @@ -3000,27 +1849,31 @@ } }, "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.1.0.tgz", + "integrity": "sha512-Zz1o1BDX2VtduiAt6kgiUl8jX1Vm3NMboljFYKQJ6ee8AGfiTvM2mlZFI3xPbqjs80rCQgiVJI/DjQ/1QJ0HwA==" }, "node-bin-setup": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/node-bin-setup/-/node-bin-setup-1.0.6.tgz", - "integrity": "sha512-uPIxXNis1CRbv1DwqAxkgBk5NFV3s7cMN/Gf556jSw6jBvV7ca4F9lRL/8cALcZecRibeqU+5dFYqFFmzv5a0Q==" + "integrity": "sha512-uPIxXNis1CRbv1DwqAxkgBk5NFV3s7cMN/Gf556jSw6jBvV7ca4F9lRL/8cALcZecRibeqU+5dFYqFFmzv5a0Q==", + "dev": true }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-3.0.0.tgz", + "integrity": "sha512-bKMI+C7/T/SPU1lKnbQbwxptpCrG9ashG+VkytmXCPZyuM9jB6VU+hY0oi4lC8LxTtAeWdckNCTa3nrGsAdA3Q==", + "requires": { + "data-uri-to-buffer": "^3.0.1", + "fetch-blob": "^3.1.2" + } }, "nopt": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", - "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", "requires": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "1" } }, "normalize-url": { @@ -3028,29 +1881,6 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" }, - "npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "requires": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==" - }, - "npm-packlist": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", - "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1", - "npm-normalize-package-bin": "^1.0.1" - } - }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -3070,23 +1900,15 @@ "set-blocking": "~2.0.0" } }, - "nth-check": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.1.tgz", - "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", - "requires": { - "boolbase": "^1.0.0" - } - }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==" + "oauth": { + "version": "0.9.15", + "resolved": "https://registry.npmjs.org/oauth/-/oauth-0.9.15.tgz", + "integrity": "sha1-vR/vr2hslrdUda7VGWQS/2DPucE=" }, "object-assign": { "version": "4.1.1", @@ -3094,14 +1916,9 @@ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" }, "object-inspect": { - "version": "1.10.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.10.3.tgz", - "integrity": "sha512-e5mCJlSH7poANfC8z8S9s9S2IN5/4Zb3aZ33f5s8YqoazCFzNLloLU8r5VCG+G7WoqLvAAZoVMcy3tp/3X0Plw==" - }, - "omggif": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", - "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==" }, "on-change": { "version": "2.2.3", @@ -3116,6 +1933,11 @@ "ee-first": "1.1.1" } }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -3132,41 +1954,22 @@ "mimic-fn": "^2.1.0" } }, - "optional-require": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/optional-require/-/optional-require-1.0.3.tgz", - "integrity": "sha512-RV2Zp2MY2aeYK5G+B/Sps8lW5NHAzE5QClbFP15j+PWmP+T9PxlJXBOOLoSAdgwFvS4t0aMR4vpedMkbHfh0nA==" - }, - "optionator": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", - "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", - "requires": { - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0", - "word-wrap": "^1.2.3" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=" - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + "os": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/os/-/os-0.1.2.tgz", + "integrity": "sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ==" }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "ow": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/ow/-/ow-0.27.0.tgz", + "integrity": "sha512-SGnrGUbhn4VaUGdU0EJLMwZWSupPmF46hnTRII7aCLCrqixTAC5eKo8kI4/XXf1eaaI8YEVT+3FeGNJI9himAQ==", "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "@sindresorhus/is": "^4.0.1", + "callsites": "^3.1.0", + "dot-prop": "^6.0.1", + "lodash.isequal": "^4.5.0", + "type-fest": "^1.2.1", + "vali-date": "^1.0.0" } }, "p-cancelable": { @@ -3174,36 +1977,30 @@ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" }, - "pako": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", - "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "p-event": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-4.2.0.tgz", + "integrity": "sha512-KXatOjCRXXkSePPb1Nbi0p0m+gQAwdlbhi4wQKJPI1HsMQS9g+Sqp2o+QHziPr7eYJyOZet836KoHEVM1mwOrQ==", "requires": { - "callsites": "^3.0.0" + "p-timeout": "^3.1.0" } }, - "parse-bmfont-ascii": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", - "integrity": "sha1-Eaw8P/WPfCAgqyJ2kHkQjU36AoU=" + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" }, - "parse-bmfont-binary": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", - "integrity": "sha1-0Di0dtPp3Z2x4RoLDlOiJ5K2kAY=" + "p-reflect": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reflect/-/p-reflect-2.1.0.tgz", + "integrity": "sha512-paHV8NUz8zDHu5lhr/ngGWQiW067DK/+IbJ+RfZ4k+s8y4EKyYCz8pGYWjxCg35eHztpJAt+NUgvN4L+GCbPlg==" }, - "parse-bmfont-xml": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.4.tgz", - "integrity": "sha512-bjnliEOmGv3y1aMEfREMBJ9tfL3WR0i0CKPj61DnSLaoxWR3nLrsQrEbCId/8rF4NyRF0cCqisSVXyQYWM+mCQ==", + "p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "requires": { - "xml-parse-from-string": "^1.0.0", - "xml2js": "^0.4.5" + "p-finally": "^1.0.0" } }, "parse-cache-control": { @@ -3211,29 +2008,50 @@ "resolved": "https://registry.npmjs.org/parse-cache-control/-/parse-cache-control-1.0.1.tgz", "integrity": "sha1-juqz5U+laSD+Fro493+iGqzC104=" }, - "parse-headers": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.3.tgz", - "integrity": "sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA==" - }, - "parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, - "parse5-htmlparser2-tree-adapter": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", - "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", - "requires": { - "parse5": "^6.0.1" - } + "parse-ms": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-2.1.0.tgz", + "integrity": "sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==" }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "passport": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz", + "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==", + "requires": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + } + }, + "passport-discord": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/passport-discord/-/passport-discord-0.1.4.tgz", + "integrity": "sha512-VJWPYqSOmh7SaCLw/C+k1ZqCzJnn2frrmQRx1YrcPJ3MQ+Oa31XclbbmqFICSvl8xv3Fqd6YWQ4H4p1MpIN9rA==", + "requires": { + "passport-oauth2": "^1.5.0" + } + }, + "passport-oauth2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/passport-oauth2/-/passport-oauth2-1.6.0.tgz", + "integrity": "sha512-emXPLqLcVEcLFR/QvQXZcwLmfK8e9CqvMgmOFJxcNT3okSFMtUbRRKpY20x5euD+01uHsjjCa07DYboEeLXYiw==", + "requires": { + "base64url": "3.x.x", + "oauth": "0.9.x", + "passport-strategy": "1.x.x", + "uid2": "0.0.x", + "utils-merge": "1.x.x" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ=" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3249,33 +2067,15 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" - }, - "phin": { - "version": "2.9.3", - "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", - "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" - }, - "pixelmatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", - "integrity": "sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ=", - "requires": { - "pngjs": "^3.0.0" - } - }, - "pngjs": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", - "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10=" }, "prebuild-install": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.3.tgz", - "integrity": "sha512-iqqSR84tNYQUQHRXalSKdIaM8Ov1QxOVuBNWI7+BzZWv6Ih9k75wOnH1rGQ9WWTaaLkTpxWKIciOF0KyfM74+Q==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.4.tgz", + "integrity": "sha512-Z4vpywnK1lBg+zdPCVCsKq0xO66eEV9rWo2zrROGGiRS4JtueBOdlB1FnY8lcy7JsUud/Q3ijUxyWN26Ika0vQ==", "requires": { "detect-libc": "^1.0.3", "expand-template": "^2.0.3", @@ -3292,20 +2092,18 @@ "tunnel-agent": "^0.6.0" } }, - "prelude-ls": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", - "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" + "pretty-ms": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-7.0.1.tgz", + "integrity": "sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==", + "requires": { + "parse-ms": "^2.1.0" + } }, "prism-media": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.1.tgz", - "integrity": "sha512-nyYAa3KB4qteJIqdguKmwxTJgy55xxUtkJ3uRnOvO5jO+frci+9zpRXw6QZVcfDeva3S654fU9+26P2OSTzjHw==" - }, - "process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/prism-media/-/prism-media-1.3.2.tgz", + "integrity": "sha512-L6UsGHcT6i4wrQhFF1aPK+MNYgjRqR2tUoIqEY+CG1NqVkMjPRKzS37j9f8GiYPlD6wG9ruBj+q5Ax+bH8Ik1g==" }, "process-nextick-args": { "version": "2.0.1", @@ -3326,10 +2124,10 @@ "ipaddr.js": "1.9.1" } }, - "psl": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", - "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "pump": { "version": "3.0.0", @@ -3341,28 +2139,32 @@ } }, "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "requires": { + "side-channel": "^1.0.4" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=" }, "quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" }, - "quick.db": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/quick.db/-/quick.db-7.1.3.tgz", - "integrity": "sha512-0S1fVb9OAZGhkI4ZIc5Oe4yWMwhz20xSsziwd6+yGWKKMsPt+XOfj/gD5CesGxd2WdqBkZFBiP8ZqWDu55HLHA==", - "requires": { - "better-sqlite3": "^7.1.1", - "lodash": "^4.17.20" - } + "random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=" }, "randombytes": { "version": "2.1.0", @@ -3400,80 +2202,24 @@ } }, "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, - "regenerator-runtime": { - "version": "0.13.7", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" - }, "regexp-clone": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" }, - "regexpp": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", - "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==" - }, - "remove-accents": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.4.2.tgz", - "integrity": "sha1-CkPTqq4egNuRngeuJUsoXZ4ce7U=" - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, "resolve-alpn": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.1.2.tgz", - "integrity": "sha512-8OyfzhAtA32LVUsJSke3auIyINcwdh5l3cvYKdKO0nvsYSKuiLfTM5i78PJswFPT8y6cPW+L1v6/hE95chcpDA==" - }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" }, "responselike": { "version": "2.0.0", @@ -3492,9 +2238,9 @@ } }, "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, "safer-buffer": { "version": "2.1.2", @@ -3515,20 +2261,6 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, - "scrape-yt": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/scrape-yt/-/scrape-yt-1.4.8.tgz", - "integrity": "sha512-+fPLszuoY6/r5xYdMpP8afAmmz2FLnJqQs7uJILQFV9Q/NMa3YsUuv9DnfT0daxXFyPbLpAb5BQbOzhiU1m1lQ==", - "requires": { - "bent": "^7.3.0", - "cheerio": "^1.0.0-rc.3" - } - }, - "seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==" - }, "semver": { "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", @@ -3572,6 +2304,11 @@ } } }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, "ms": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", @@ -3598,16 +2335,19 @@ "send": "0.17.1" } }, + "session": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/session/-/session-0.1.0.tgz", + "integrity": "sha1-aumqbyYJO+Me0gBbzUJq6AqjoIU=", + "requires": { + "vows": "*" + } + }, "set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU=" - }, "setprototypeof": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", @@ -3659,43 +2399,20 @@ "decompress-response": "^4.2.0", "once": "^1.3.1", "simple-concat": "^1.0.0" - } - }, - "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" }, "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", "requires": { - "color-name": "~1.1.4" + "mimic-response": "^2.0.0" } }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" } } }, @@ -3704,53 +2421,22 @@ "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" }, - "snakecord": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/snakecord/-/snakecord-1.0.8.tgz", - "integrity": "sha512-KwD4Ni2o5F/isDlAVw2dSfy00scwzSScNgZmQ8tnsw/KJp26wrQazidg89n5RmvHxs+7qnVOl7TDgbYf5TWNzQ==", - "requires": { - "discord.js": "^12.4.1", - "eslint": "^7.25.0" - } - }, - "snekfetch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/snekfetch/-/snekfetch-4.0.4.tgz", - "integrity": "sha512-dyycG9fvwtSJqKPfMVOpXt+60qvMGe7vWLwOJDiSJaiAx+hs2EnFChG2bXCWn7ulz+zGzrHdN9/yeEb0YqEPww==" - }, - "something-random-on-discord": { - "version": "3.4.4", - "resolved": "https://registry.npmjs.org/something-random-on-discord/-/something-random-on-discord-3.4.4.tgz", - "integrity": "sha512-xyaSTJmKnG7ARvbp0H6wquFXzQjhB3gF4ZRLwOPpPQTIstBpolNdJCkGbx58MjMK3Wb6WnPlEjYAMNrFSv+L8Q==", + "soundcloud.ts": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/soundcloud.ts/-/soundcloud.ts-0.4.1.tgz", + "integrity": "sha512-Hgc9DvCeyiuZZc7pRhIxf6LqqzZAwFV0rQbdZce/9+Yy7YvYFRUyErK044jc+L8tKnXakQv4id+OEHViuxMgxA==", "requires": { "axios": "^0.21.1" - } - }, - "soundcloud-downloader": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/soundcloud-downloader/-/soundcloud-downloader-0.2.4.tgz", - "integrity": "sha512-ncXi9AC3Crs8azBBUw0u5n6RyJpuV3QhBPDkI8dik3e9r7l6L6mmmrdGgKITsOwEuj3rxoTdFvSAP4pv2VorRw==", - "requires": { - "@babel/runtime": "^7.10.3", - "axios": "^0.21.0", - "dotenv": "^8.2.0", - "m3u8stream": "^0.8.0", - "soundcloud-key-fetch": "^1.0.10" - } - }, - "soundcloud-key-fetch": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/soundcloud-key-fetch/-/soundcloud-key-fetch-1.0.11.tgz", - "integrity": "sha512-ofnXB3yeHGVKnFKEMBP/kIJzGu1SduQzJc+zmkPbKgelvYNsEU/aTGD0PlhmyZquaCkTGByF8CEPRrAnt7ki4g==" - }, - "soundcloud-scraper": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/soundcloud-scraper/-/soundcloud-scraper-4.0.6.tgz", - "integrity": "sha512-yhD6UukY3ZxSjSKRp7II+bBs3W5fU3cdavZueKm6bcGyD8QOXCzHTKrGSTq3zJ+EqkfBEMYVB7wWhh+HSxDmTA==", - "requires": { - "cheerio": "^1.0.0-rc.9", - "m3u8stream": "^0.8.3", - "node-fetch": "^2.6.1" + }, + "dependencies": { + "axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "requires": { + "follow-redirects": "^1.14.0" + } + } } }, "sparse-bitfield": { @@ -3777,40 +2463,12 @@ "spotify-uri": "~2.2.0" } }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "srod-v2": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/srod-v2/-/srod-v2-1.0.2.tgz", - "integrity": "sha512-bF871tXYNMYoxn74aQaZr2/aheLtzJTRDjBA4hT2ZWPkWM3DBfKmGGlmFdLsR7gmb32YDDVHJOniL36WdSp3wQ==", - "requires": { - "node-fetch": "^2.6.1" - } - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=" - } + "spotify-web-api-node": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/spotify-web-api-node/-/spotify-web-api-node-5.0.2.tgz", + "integrity": "sha512-r82dRWU9PMimHvHEzL0DwEJrzFk+SMCVfq249SLt3I7EFez7R+jeoKQd+M1//QcnjqlXPs2am4DFsGk8/GCsrA==", + "requires": { + "superagent": "^6.1.0" } }, "statuses": { @@ -3818,11 +2476,6 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, - "streamify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/streamify/-/streamify-1.0.0.tgz", - "integrity": "sha512-pe2ZoxE+ie5wAjRgKWb5Ur4R5Oa++eoQmHLqGGy4nQn/8BetJcpHkHXRuP3ZIJ/Ptl/rbd76fdn9aQJNys8cKA==" - }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -3834,11 +2487,11 @@ } }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" } }, "strip-ansi": { @@ -3875,41 +2528,6 @@ "qs": "^6.9.4", "readable-stream": "^3.6.0", "semver": "^7.3.2" - }, - "dependencies": { - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "mime": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", - "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==" - }, - "qs": { - "version": "6.10.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", - "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, "supports-color": { @@ -3920,65 +2538,6 @@ "has-flag": "^3.0.0" } }, - "table": { - "version": "6.7.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", - "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", - "requires": { - "ajv": "^8.0.1", - "lodash.clonedeep": "^4.5.0", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ajv": { - "version": "8.6.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", - "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "requires": { - "ansi-regex": "^5.0.0" - } - } - } - }, "tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -3992,10 +2551,10 @@ "yallist": "^4.0.0" }, "dependencies": { - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" } } }, @@ -4008,13 +2567,6 @@ "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.1.4" - }, - "dependencies": { - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" - } } }, "tar-stream": { @@ -4027,58 +2579,42 @@ "fs-constants": "^1.0.0", "inherits": "^2.0.3", "readable-stream": "^3.1.1" - }, - "dependencies": { - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - } } }, - "text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=" - }, - "timm": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", - "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" - }, - "tiny-emitter": { + "tiny-typed-emitter": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", - "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" - }, - "tinycolor2": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.4.2.tgz", - "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==" + "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", + "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==" }, "toidentifier": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", "requires": { - "psl": "^1.1.28", "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + } } }, + "ts-mixer": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ts-mixer/-/ts-mixer-6.0.0.tgz", + "integrity": "sha512-nXIb1fvdY5CBSrDIblLn73NW0qRDk5yJ0Sk1qPBF560OdJfQp9jhl+0tzcY09OZ9U+6GpeoI9RjwoIKFIoB9MQ==" + }, "tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz", + "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw==" }, "tunnel-agent": { "version": "0.6.0", @@ -4088,33 +2624,10 @@ "safe-buffer": "^5.0.1" } }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==" - }, - "twemoji-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/twemoji-parser/-/twemoji-parser-13.1.0.tgz", - "integrity": "sha512-AQOzLJpYlpWMy8n+0ATyKKZzWlZBJN+G0C+5lhX7Ftc2PeEVdUU/7ns2Pn2vVje26AIZ/OHwFoUbdv6YYD/wGg==" - }, - "txtgen": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/txtgen/-/txtgen-2.2.8.tgz", - "integrity": "sha512-b3wteOTrO1RPV1f6dhYaNz2G48a6dCH+pvTBRMdtjTWSeVBBE4rFypoc+2uT0F7OFSgBlOQefDuDvp9VYqA73g==" - }, - "type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", - "requires": { - "prelude-ls": "^1.2.1" - } - }, "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", + "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==" }, "type-is": { "version": "1.6.18", @@ -4125,40 +2638,36 @@ "mime-types": "~2.1.24" } }, - "typed-function": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/typed-function/-/typed-function-2.0.0.tgz", - "integrity": "sha512-Hhy1Iwo/e4AtLZNK10ewVVcP2UEs408DS35ubP825w/YgSBK1KVLwALvvIG4yX75QJrxjCpcWkzkVRB0BwwYlA==" - }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + "uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "requires": { + "random-bytes": "~1.0.0" + } + }, + "uid2": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/uid2/-/uid2-0.0.4.tgz", + "integrity": "sha512-IevTus0SbGwQzYh3+fRsAMTVVPOoIVufzacXcHPmdlle1jUpq7BRL+mw3dgeLanvGZdwwbWhRV6XrcFNdBmjWA==" }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "utif": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/utif/-/utif-2.0.1.tgz", - "integrity": "sha512-Z/S1fNKCicQTf375lIP9G8Sa1H/phcysstNrrSdZKj1f9g58J4NMgb5IgiEZN9/nLMPDwF0W7hdOe9Qq2IYoLg==", + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", "requires": { - "pako": "^1.0.5" + "punycode": "1.3.2", + "querystring": "0.2.0" } }, "util-deprecate": { @@ -4171,85 +2680,43 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" - }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + "vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=" }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "vows": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/vows/-/vows-0.8.3.tgz", + "integrity": "sha512-PVIxa/ovXhrw5gA3mz6M+ZF3PHlqX4tutR2p/y9NWPAaFVKcWBE8b2ktfr0opQM/qFmcOVWKjSCJVjnYOvjXhw==", "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" + "diff": "^4.0.1", + "eyes": "~0.1.6", + "glob": "^7.1.2" } }, - "weather-js": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/weather-js/-/weather-js-2.0.0.tgz", - "integrity": "sha1-DZvNsFpPhNBrm585kAKKYB6kofw=", - "requires": { - "request": "2.x.x", - "xml2js": "0.4.x" - } + "web-streams-polyfill": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.1.1.tgz", + "integrity": "sha512-Czi3fG883e96T4DLEPRvufrF2ydhOOW1+1a6c3gNjH2aIh50DNFBdfwh2AKoOf1rXvpvavAoA11Qdq9+BKjE0Q==" }, - "weky": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/weky/-/weky-3.1.2.tgz", - "integrity": "sha512-Dg9trCdZYrjnH5RmltiSqU6W/brinJqPck6lUEoruiJQ7u0DLKNldvrTl3xkkNnI8u8TuXqlK7p50HytO15Ahg==", + "webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==" + }, + "whatwg-url": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-9.1.0.tgz", + "integrity": "sha512-CQ0UcrPHyomtlOCot1TL77WyMIm/bCwrJ2D6AOKGwEczU9EpyoqAokfqrf/MioU9kHcMsmJZcg1egXix2KYEsA==", "requires": { - "@weky/inlinereply": "^0.0.0", - "axios": "^0.21.1", - "chalk": "^4.1.1", - "cheerio": "^1.0.0-rc.10", - "discord-buttons": "^4.0.0", - "discord.js": "^12.5.3", - "html-entities": "^2.3.2", - "mathjs": "^9.4.3", - "node-fetch": "^2.6.1", - "quick.db": "^7.1.3", - "string-width": "^2.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" - }, - "is-fullwidth-code-point": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" - }, - "string-width": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", - "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", - "requires": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - } - }, - "strip-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", - "requires": { - "ansi-regex": "^3.0.0" - } - } + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" } }, "which": { @@ -4268,88 +2735,20 @@ "string-width": "^1.0.2 || 2" } }, - "word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" - }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "ws": { - "version": "7.5.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.1.tgz", - "integrity": "sha512-2c6faOUH/nhoQN6abwMloF7Iyl0ZS2E9HGtsiLrWn0zOOMWlhtDmdf/uihDt6jnuCxgtwGBNy6Onsoy2s2O2Ow==" - }, - "xhr": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", - "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", - "requires": { - "global": "~4.4.0", - "is-function": "^1.0.1", - "parse-headers": "^2.0.0", - "xtend": "^4.0.0" - } - }, - "xml-parse-from-string": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", - "integrity": "sha1-qQKekp09vN7RafPG4oI42VpdWig=" - }, - "xml2js": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", - "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", - "requires": { - "sax": ">=0.6.0", - "xmlbuilder": "~11.0.0" - } - }, - "xmlbuilder": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", - "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" - }, - "xmlcreate": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.3.tgz", - "integrity": "sha512-HgS+X6zAztGa9zIK3Y3LXuJes33Lz9x+YyTxgrkIdabu2vqcGOWwdfCpf1hWLRrd553wd4QCDf6BBO6FfdsRiQ==" - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.4.tgz", + "integrity": "sha512-zP9z6GXm6zC27YtspwH99T3qTG7bBFv2VIkeHstMLrLlDJuzA7tQ5ls3OJ1hOGGCzTQPniNJoHXIAOS0Jljohg==" }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "youtube-sr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/youtube-sr/-/youtube-sr-2.0.5.tgz", - "integrity": "sha512-46aBX3ZCPa9zgZz1HsoeyZnFbBSUmwPYjxZuwcKRGDPCzaj9StBa6UUSnPAr39NTqULbeHGAkMpMRInL4x2+Rg==", - "requires": { - "node-fetch": "^2.6.1" - } - }, - "ytdl-core": { - "version": "4.8.3", - "resolved": "https://registry.npmjs.org/ytdl-core/-/ytdl-core-4.8.3.tgz", - "integrity": "sha512-cWCBeX4FCgjcKmuVK384MT582RIAakpUSeMF/NPVmhO8cWiG+LeQLnBordvLolb0iXYzfUvalgmycYAE5Sy6Xw==", - "requires": { - "m3u8stream": "^0.8.3", - "miniget": "^4.0.0", - "sax": "^1.1.3" - } - }, - "zero-fill": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/zero-fill/-/zero-fill-2.2.4.tgz", - "integrity": "sha512-/N5GEDauLHz2uGnuJXWO1Wfib4EC+q4yp9C1jojM7RubwEKADqIqMcYpETMm1lRop403fi3v1qTOdgDE8DIOdw==" } } } diff --git a/package.json b/package.json index 81262e5..cc8975b 100644 --- a/package.json +++ b/package.json @@ -1,105 +1,40 @@ { - "name": "Kingbot", - "version": "3.0.0", - "description": "The Ultimate BOT", - "main": "index.js", "dependencies": { - "@discordjs/opus": "^0.3.3", - "@iamtraction/google-translate": "^1.1.2", - "@k3rn31p4nic/google-translate-api": "^1.1.1", + "@discordjs/builders": "^0.6.0", + "@discordjs/opus": "^0.6.0", + "@discordjs/voice": "^0.6.0", + "@distube/soundcloud": "^0.2.2", + "@distube/spotify": "^0.6.3", "@ksoft/api": "^3.1.9", - "aki-api": "^5.2.1", - "alexa-bot-api": "^2.0.5", - "ascii-table": "^0.0.9", - "axios": "^0.21.2", - "booru": "^2.3.2", - "canvacord": "^5.2.1", - "canvas": "^2.6.1", + "aki-api": "^6.0.8", + "axios": "^0.22.0", + "body-parser": "^1.19.0", + "bootstrap-icons": "^1.6.1", + "canvas": "^2.8.0", "colors": "^1.4.0", - "common-tags": "^1.8.0", "cpu-stat": "^2.0.1", - "deezer-public-api": "^1.0.4", - "discord-buttons": "^4.0.0", - "discord-giveaways": "^4.5.1", - "discord-mongo-currency": "^1.0.4", - "discord-ytdl-core": "^5.0.4", - "discord.js": "^12.3.1", - "discord.js-menu": "^2.3.1", - "discord.js-pagination": "^1.0.3", - "discord.js-search": "^1.0.1", - "distube": "^2.8.7", - "enmap": "^5.8.2", + "discord.js": "^13.1.0", + "distube": "^3.0.0-beta.37", + "ejs": "^3.1.6", + "enmap": "^5.8.7", "express": "^4.17.1", - "fetch": "^1.1.0", - "ffmpeg-static": "^4.2.7", - "figlet": "^1.5.0", + "express-session": "^1.17.2", + "ffmpeg-static": "^4.4.0", + "http": "^0.0.1-security", "https-proxy-agent": "^5.0.0", - "imdb-api": "^4.4.1", - "jimp": "^0.16.1", - "mal-scraper": "^2.11.3", - "mathjs": "^9.4.3", - "moment": "^2.27.0", - "mongoose": "^5.13.7", + "libsodium-wrappers": "^0.7.9", + "memorystore": "^1.6.6", + "mongoose": "^6.0.7", "ms": "^2.1.3", - "nekos.life": "^2.0.7", - "node": "^16.6.1", - "node-fetch": "^2.6.1", - "quick.db": "^7.1.3", - "request": "^2.88.2", - "scrape-yt": "^1.4.8", - "snakecord": "^1.0.8", - "snekfetch": "^4.0.4", - "something-random-on-discord": "^3.4.4", - "soundcloud-downloader": "^0.2.2", - "soundcloud-key-fetch": "^1.0.11", - "soundcloud-scraper": "^4.0.1", - "spotify-url-info": "^2.2.0", - "srod-v2": "^1.0.2", - "superagent": "^6.1.0", - "txtgen": "^2.2.8", - "weather-js": "^2.0.0", - "weky": "^3.1.2", - "youtube-sr": "^2.0.5" + "node-fetch": "^3.0.0", + "os": "^0.1.2", + "passport": "^0.4.1", + "passport-discord": "^0.1.4", + "pretty-ms": "^7.0.1", + "session": "^0.1.0", + "url": "^0.11.0" }, - "devDependencies": {}, - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "start": "node index.js" - }, - "repository": { - "type": "git", - "url": "git+https://github.com/Programador-jr/King.git" - }, - "keywords": [ - "Kingbot", - "discord", - "discord-js", - "discord.js", - "discord-api", - "discord-music-bot", - "discord-bot", - "discordbot", - "youtube", - "music", - "hentai", - "nsfw", - "hentai-bot", - "hentai-sites", - "booru", - "booru-websites", - "music-bot", - "nodejs", - "npm", - "node-js", - "porn", - "multipurpose", - "gaming", - "utility" - ], - "author": "KingKiller®#1889", - "license": "MIT", - "bugs": { - "url": "https://github.com/Programador-jr/King/issues" - }, - "homepage": "https://github.com/Programador-jr/King#readme" + "devDependencies": { + "node": "^16.10.0" + } } diff --git a/playlists.json b/playlists.json deleted file mode 100644 index cc09be9..0000000 --- a/playlists.json +++ /dev/null @@ -1,464 +0,0 @@ -{ - "playlist1": [ - "https://www.youtube.com/watch?v=4NRXx6U8ABQ", - "https://www.youtube.com/watch?v=TmKh7lAwnBI", - "https://www.youtube.com/watch?v=q0hyYWKXF0Q", - "https://www.youtube.com/watch?v=QaXhVryxVBk", - "https://www.youtube.com/watch?v=GrAchTdepsU", - "https://www.youtube.com/watch?v=VlFxGiRGO_8", - "https://www.youtube.com/watch?v=2zToEPpFEN8", - "https://www.youtube.com/watch?v=pK060iUFWXg", - "https://www.youtube.com/watch?v=E07s5ZYygMg", - "https://www.youtube.com/watch?v=gdZLi9oWNZg", - "https://www.youtube.com/watch?v=tcYodQoapMg", - "https://www.youtube.com/watch?v=oygrmJFKYZY", - "https://www.youtube.com/watch?v=RUQl6YcMalg", - "https://www.youtube.com/watch?v=DyDfgMOUjCI", - "https://www.youtube.com/watch?v=jIoEaTN7GGo", - "https://www.youtube.com/watch?v=9vMLTcftlyI", - "https://www.youtube.com/watch?v=hsm4poTWjMs", - "https://www.youtube.com/watch?v=ucVUEmjKsko", - "https://www.youtube.com/watch?v=mUuyEX2M0gc", - "https://www.youtube.com/watch?v=-3HjrdC0dAk", - "https://www.youtube.com/watch?v=zABLecsR5UE", - "https://www.youtube.com/watch?v=2xWkATdMQms", - "https://www.youtube.com/watch?v=UceaB4D0jpo", - "https://www.youtube.com/watch?v=pok8H_KF1FA", - "https://www.youtube.com/watch?v=0opZqh_TprM", - "https://www.youtube.com/watch?v=QA48wTGbU7A", - "https://www.youtube.com/watch?v=QDeHafgpyQw", - "https://www.youtube.com/watch?v=4bP8wbt4SeA", - "https://www.youtube.com/watch?v=jZHLXzGwo5w", - "https://www.youtube.com/watch?v=KmDrdCKOp3k", - "https://www.youtube.com/watch?v=UrGS_6_HglU", - "https://www.youtube.com/watch?v=ywvkKvzhYEc", - "https://www.youtube.com/watch?v=whbidPR4nVA", - "https://www.youtube.com/watch?v=E07s5ZYygMg", - "https://www.youtube.com/watch?v=mqWq_48LxWQ", - "https://www.youtube.com/watch?v=gdZLi9oWNZg", - "https://www.youtube.com/watch?v=7ss-xmvLGFw", - "https://www.youtube.com/watch?v=0QoeB-nqOIQ", - "https://www.youtube.com/watch?v=ynqHvt9PCmo", - "https://www.youtube.com/watch?v=7YvAYIJSSZY", - "https://www.youtube.com/watch?v=uqsGUAM9WDk", - "https://www.youtube.com/watch?v=q0hyYWKXF0Q", - "https://www.youtube.com/watch?v=89S-RbszwJE", - "https://www.youtube.com/watch?v=-CVn3-3g_BI", - "https://www.youtube.com/watch?v=4NRXx6U8ABQ", - "https://www.youtube.com/watch?v=NPSvCJ9v7vI", - "https://www.youtube.com/watch?v=nbc7S3hWlgk", - "https://www.youtube.com/watch?v=NnuH5LAstCg", - "https://www.youtube.com/watch?v=vdb4XGVTHkE", - "https://www.youtube.com/watch?v=yg6Y_1_DJyI", - "https://www.youtube.com/watch?v=QDeHafgpyQw", - "https://www.youtube.com/watch?v=P3cffdsEXXw", - "https://www.youtube.com/watch?v=fHeQemJJQII", - "https://www.youtube.com/watch?v=9HwLgcLfLsg", - "https://www.youtube.com/watch?v=HiXZGbLRQrY", - "https://www.youtube.com/watch?v=2sFvGqTjlxM", - "https://www.youtube.com/watch?v=hDb_a5i-4IA", - "https://www.youtube.com/watch?v=UBsPNEVt0SM", - "https://www.youtube.com/watch?v=lznH7FZBBYs", - "https://www.youtube.com/watch?v=WvdYFFkOgAA", - "https://www.youtube.com/watch?v=yg6Y_1_DJyI", - "https://www.youtube.com/watch?v=ZLso2OV0lwk", - "https://www.youtube.com/watch?v=nBmNcLBaPUE", - "https://www.youtube.com/watch?v=ofmzX1nI7SE", - "https://www.youtube.com/watch?v=E8gmARGvPlI", - "https://www.youtube.com/watch?v=XnrRVa-cn2I", - "https://www.youtube.com/watch?v=5vheNbQlsyU", - "https://www.youtube.com/watch?v=4NRXx6U8ABQ", - "https://www.youtube.com/watch?v=UbYQErtM9Zk", - "https://www.youtube.com/watch?v=DDt3u2Ev1cI", - "https://www.youtube.com/watch?v=89S-RbszwJE", - "https://www.youtube.com/watch?v=soY8ewnLEuw", - "https://www.youtube.com/watch?v=N-PyWfVkjZc", - "https://www.youtube.com/watch?v=z1rYmzQ8C9Q", - "https://www.youtube.com/watch?v=Zr9EOFuuIk4" - ], - "playlist2": [ - "https://www.youtube.com/watch?v=aAkMkVFwAoo", - "https://www.youtube.com/watch?v=mN7LW0Y00kE", - "https://www.youtube.com/watch?v=E8gmARGvPlI", - "https://www.youtube.com/watch?v=bc0KhhjJP98", - "https://www.youtube.com/watch?v=t3HJgCcSUqQ", - "https://www.youtube.com/watch?v=QJ5DOWPGxwg", - "https://www.youtube.com/watch?v=nlR0MkrRklg", - "https://www.youtube.com/watch?v=Z0ajuTaHBtM", - "https://www.youtube.com/watch?v=gFtb3EtjEic", - "https://www.youtube.com/watch?v=V3EYjVPRClU", - "https://www.youtube.com/watch?v=3PgNPc-iFW8", - "https://www.youtube.com/watch?v=LUjn3RpkcKY", - "https://www.youtube.com/watch?v=w9QLn7gM-hY", - "https://www.youtube.com/watch?v=FT9nZacPK8A", - "https://www.youtube.com/watch?v=LRP8d7hhpoQ", - "https://www.youtube.com/watch?v=3KK6sMo8NBY", - "https://www.youtube.com/watch?v=sGlXYeiCz_4", - "https://www.youtube.com/watch?v=Mk_GmhD053E", - "https://www.youtube.com/watch?v=pu55DXQTz0I", - "https://www.youtube.com/watch?v=MaA7B9cu4kU", - "https://www.youtube.com/watch?v=2H5rusicEnc", - "https://www.youtube.com/watch?v=wtgGBgpNcIo", - "https://www.youtube.com/watch?v=MOzFdWIG8Es", - "https://www.youtube.com/watch?v=mN3rDTAdM2o", - "https://www.youtube.com/watch?v=g-OF7KGyDis", - "https://www.youtube.com/watch?v=DDt3u2Ev1cI", - "https://www.youtube.com/watch?v=aAkMkVFwAoo", - "https://www.youtube.com/watch?v=ah-U9ECRZog", - "https://www.youtube.com/watch?v=4WDlLA3l-7w", - "https://www.youtube.com/watch?v=E8gmARGvPlI", - "https://www.youtube.com/watch?v=N-PyWfVkjZc", - "https://www.youtube.com/watch?v=wtgGBgpNcIo", - "https://www.youtube.com/watch?v=eUXrFmHvHpw", - "https://www.youtube.com/watch?v=bOgbn805DUA", - "https://www.youtube.com/watch?v=RNm6BrZJphE", - "https://www.youtube.com/watch?v=y8pTFwksO7s", - "https://www.youtube.com/watch?v=HExTTGqXl9Y", - "https://www.youtube.com/watch?v=L1KEJzfsQEY", - "https://www.youtube.com/watch?v=G2bx3FzgJ6o", - "https://www.youtube.com/watch?v=OJdDnVyYM3s", - "https://www.youtube.com/watch?v=o10drRI3VQ0", - "https://www.youtube.com/watch?v=qw2TD91Nytg", - "https://www.youtube.com/watch?v=YnvzsZCJjZ0", - "https://www.youtube.com/watch?v=QJ5DOWPGxwg", - "https://www.youtube.com/watch?v=nlR0MkrRklg", - "https://www.youtube.com/watch?v=ozXb10fOi2A", - "https://www.youtube.com/watch?v=1FuF7H0uJww", - "https://www.youtube.com/watch?v=j3fSknbR7Y4", - "https://www.youtube.com/watch?v=cJUcvQnvRAU", - "https://www.youtube.com/watch?v=-Xo64Q2ucQ8", - "https://www.youtube.com/watch?v=aAkMkVFwAoo", - "https://www.youtube.com/watch?v=E8gmARGvPlI", - "https://www.youtube.com/watch?v=N-PyWfVkjZc", - "https://www.youtube.com/watch?v=BkoYgN3N1KQ", - "https://www.youtube.com/watch?v=gFtb3EtjEic", - "https://www.youtube.com/watch?v=QJ5DOWPGxwg", - "https://www.youtube.com/watch?v=EM2Fnp_qnE8", - "https://www.youtube.com/watch?v=t3HJgCcSUqQ", - "https://www.youtube.com/watch?v=j-_1-uJ6Ml4", - "https://www.youtube.com/watch?v=IJPc7esgvsA", - "https://www.youtube.com/watch?v=j3fSknbR7Y4", - "https://www.youtube.com/watch?v=i7X3uzZv900", - "https://www.youtube.com/watch?v=XZTzai1H9DM", - "https://www.youtube.com/watch?v=IbRtGMm96F8", - "https://www.youtube.com/watch?v=nlR0MkrRklg", - "https://www.youtube.com/watch?v=dDFX8KVKRoI", - "https://www.youtube.com/watch?v=BpfHSqLXePI", - "https://www.youtube.com/watch?v=DDt3u2Ev1cI", - "https://www.youtube.com/watch?v=Dkq3LD-4pmM", - "https://www.youtube.com/watch?v=bOgbn805DUA", - "https://www.youtube.com/watch?v=b9XNyeeJZ2k", - "https://www.youtube.com/watch?v=ARq6uYSsUq0", - "https://www.youtube.com/watch?v=MKdndMXIVXw", - "https://www.youtube.com/watch?v=flA5ndOyZbI", - "https://www.youtube.com/watch?v=2HkJHApgKqw" - ], - "playlist3": [ - "https://www.youtube.com/watch?v=w9QLn7gM-hY", - "https://www.youtube.com/watch?v=1FuF7H0uJww", - "https://www.youtube.com/watch?v=XZTzai1H9DM", - "https://www.youtube.com/watch?v=oIKt5p3UmXg", - "https://www.youtube.com/watch?v=Mk_GmhD053E", - "https://www.youtube.com/watch?v=OyfX8Jv43fM", - "https://www.youtube.com/watch?v=2sTvdeLQsMM", - "https://www.youtube.com/watch?v=nEH7_2c644Q", - "https://www.youtube.com/watch?v=sI7_TGZaOIE", - "https://www.youtube.com/watch?v=PITCmngiMfA", - "https://www.youtube.com/watch?v=CYOUcV7nlN8", - "https://www.youtube.com/watch?v=7_euSS86dvE", - "https://www.youtube.com/watch?v=5QFKKap5V3U", - "https://www.youtube.com/watch?v=8i0f2SY7spM", - "https://www.youtube.com/watch?v=APRNe_3tzdg", - "https://www.youtube.com/watch?v=nmioEzAZCVc", - "https://www.youtube.com/watch?v=PITCmngiMfA", - "https://www.youtube.com/watch?v=N6p6LRtQ2WY", - "https://www.youtube.com/watch?v=OsyxFkYZ-aU", - "https://www.youtube.com/watch?v=ah-U9ECRZog", - "https://www.youtube.com/watch?v=1omwKkLOg4Y", - "https://www.youtube.com/watch?v=FhTnDaEmA5k", - "https://www.youtube.com/watch?v=5co2QEG8LJo", - "https://www.youtube.com/watch?v=WyQa7L5yn6M", - "https://www.youtube.com/watch?v=-5TgkgQhFuU", - "https://www.youtube.com/watch?v=tT4d1LQy4es", - "https://www.youtube.com/watch?v=cjkFG6bHGNc", - "https://www.youtube.com/watch?v=m09z8l8nuf0", - "https://www.youtube.com/watch?v=T5tmqv1PrdE", - "https://www.youtube.com/watch?v=9gbpUPgVnSE", - "https://www.youtube.com/watch?v=hTdwFYxv_ro", - "https://www.youtube.com/watch?v=Ury8t1TOPlE", - "https://www.youtube.com/watch?v=nP-8dzS1_rM", - "https://www.youtube.com/watch?v=_J0ZpJMQjDo", - "https://www.youtube.com/watch?v=Xd_FyCEiRZ0", - "https://www.youtube.com/watch?v=YbJOTdZBX1g", - "https://www.youtube.com/watch?v=t062tjKmK_I", - "https://www.youtube.com/watch?v=Wc4tT-55ZzI", - "https://www.youtube.com/watch?v=jCTF5P1MTYs", - "https://www.youtube.com/watch?v=gcE1avXFJb4", - "https://www.youtube.com/watch?v=tMmMTdc7RE0", - "https://www.youtube.com/watch?v=AYeZx7oZztk", - "https://www.youtube.com/watch?v=-yg7aZpIXRI", - "https://www.youtube.com/watch?v=oslMFOeFoLI", - "https://www.youtube.com/watch?v=WlQaDDMctpQ", - "https://www.youtube.com/watch?v=G-i8HYi1QH0", - "https://www.youtube.com/watch?v=k94zDsJ-JMU", - "https://www.youtube.com/watch?v=hNUcQOsaMcc", - "https://www.youtube.com/watch?v=xGVdAlxlp18", - "https://www.youtube.com/watch?v=E5bMVF9Tov8", - "https://www.youtube.com/watch?v=2s02qPFXyDE", - "https://www.youtube.com/watch?v=dHlTiidSOXs", - "https://www.youtube.com/watch?v=zv_Exm15HsA", - "https://www.youtube.com/watch?v=1efvGRa63OU", - "https://www.youtube.com/watch?v=_JdSDCWmT6M", - "https://www.youtube.com/watch?v=zJySsufaoFc", - "https://www.youtube.com/watch?v=3jGz0u12KeA", - "https://www.youtube.com/watch?v=VNU_Vl6fxI8", - "https://www.youtube.com/watch?v=ZOnCPHT38rM", - "https://www.youtube.com/watch?v=LhhT8Lrd7ss", - "https://www.youtube.com/watch?v=66Xw063lsVU", - "https://www.youtube.com/watch?v=OSye8OO5TkM", - "https://www.youtube.com/watch?v=AZmAgoir1Tc", - "https://www.youtube.com/watch?v=__XjQLGpSfg", - "https://www.youtube.com/watch?v=0pSFxNXVbeg", - "https://www.youtube.com/watch?v=Ttx9UvFLpPo", - "https://www.youtube.com/watch?v=XeLaiL9tk68", - "https://www.youtube.com/watch?v=Ts_FOvwWXB4", - "https://www.youtube.com/watch?v=S33PzzeozpU", - "https://www.youtube.com/watch?v=aFDU8fogj4A", - "https://www.youtube.com/watch?v=k3EBweMNjpo", - "https://www.youtube.com/watch?v=6QImCMjW-PM", - "https://www.youtube.com/watch?v=R0rKB_bsUNg", - "https://www.youtube.com/watch?v=xf6aq2XPwkI", - "https://www.youtube.com/watch?v=SORD03t7nlo" - ], - "playlist4": [ - "https://www.youtube.com/watch?v=lCv13D538Mk", - "https://www.youtube.com/watch?v=TnlPtaPxXfc", - "https://www.youtube.com/watch?v=hkT4SyZRGqQ", - "https://www.youtube.com/watch?v=WsglxKjDAyk", - "https://www.youtube.com/watch?v=FC3_D4PVlF8", - "https://www.youtube.com/watch?v=mxGt80WR9Y0", - "https://www.youtube.com/watch?v=_Ixip0K2r10", - "https://www.youtube.com/watch?v=wV9OcYhk4CU", - "https://www.youtube.com/watch?v=5Sy19X0xxrM", - "https://www.youtube.com/watch?v=FYH8DsU2WCk", - "https://www.youtube.com/watch?v=2Py37G9qsfY", - "https://www.youtube.com/watch?v=wJbJlQX5NUs", - "https://www.youtube.com/watch?v=ICJs1CxCRt0", - "https://www.youtube.com/watch?v=nLN72sR9w0M", - "https://www.youtube.com/watch?v=xzifETmt42s", - "https://www.youtube.com/watch?v=EGxsCCuZtr8", - "https://www.youtube.com/watch?v=foYYz3BECRw", - "https://www.youtube.com/watch?v=6d_wxEz1Cbg", - "https://www.youtube.com/watch?v=SgXSomPE_FY", - "https://www.youtube.com/watch?v=NZOT3CL8A7w", - "https://www.youtube.com/watch?v=BSZFjOffTyc", - "https://www.youtube.com/watch?v=D3pMwP2eSbY", - "https://www.youtube.com/watch?v=dfQ7ieF7w4Y", - "https://www.youtube.com/watch?v=kXVO_BYcxgM", - "https://www.youtube.com/watch?v=i0gDX_DjUUg", - "https://www.youtube.com/watch?v=sD8lVdXzUpk", - "https://www.youtube.com/watch?v=bdp5ce2WA0k", - "https://www.youtube.com/watch?v=NNh7xyLwwLc", - "https://www.youtube.com/watch?v=qDQpZT3GhDg", - "https://www.youtube.com/watch?v=VapN6Rphsyc", - "https://www.youtube.com/watch?v=450p7goxZqg", - "https://www.youtube.com/watch?v=EjRAa5KFmKU", - "https://www.youtube.com/watch?v=GfAb0gNPy6s", - "https://www.youtube.com/watch?v=EY0jGIMeFmM", - "https://www.youtube.com/watch?v=pTaQ-pqzPU4", - "https://www.youtube.com/watch?v=VEgkBetZY-M", - "https://www.youtube.com/watch?v=gaw4cGO5H-k", - "https://www.youtube.com/watch?v=A9ew7glBHy0", - "https://www.youtube.com/watch?v=LG_RNIJsJOs", - "https://www.youtube.com/watch?v=3xpcBx1Gm-c", - "https://www.youtube.com/watch?v=s5EwGijmqKc", - "https://www.youtube.com/watch?v=dUmkz95E7mw", - "https://www.youtube.com/watch?v=EWHTLC5zbL4", - "https://www.youtube.com/watch?v=Fno4WS1u1lw", - "https://www.youtube.com/watch?v=HerK3uylDrk", - "https://www.youtube.com/watch?v=eMJOGhOrgrU", - "https://www.youtube.com/watch?v=ZIq2y9LxBME", - "https://www.youtube.com/watch?v=FQlAEiCb8m0", - "https://www.youtube.com/watch?v=CTzRHq_cH5E", - "https://www.youtube.com/watch?v=JN6vCdmOV-Q", - "https://www.youtube.com/watch?v=aOZqcIRttf8", - "https://www.youtube.com/watch?v=iZBTvwdXq3c", - "https://www.youtube.com/watch?v=6d_wxEz1Cbg", - "https://www.youtube.com/watch?v=2Py37G9qsfY", - "https://www.youtube.com/watch?v=SgXSomPE_FY", - "https://www.youtube.com/watch?v=JUY1MfxUW1Y", - "https://www.youtube.com/watch?v=U5QKpsVzndc", - "https://www.youtube.com/watch?v=_TTqjLv0PYI", - "https://www.youtube.com/watch?v=bd2hhAsSYeo", - "https://www.youtube.com/watch?v=p3cKJ42HAd0", - "https://www.youtube.com/watch?v=-eHJ12Vhpyc", - "https://www.youtube.com/watch?v=YshFGcYHp2A", - "https://www.youtube.com/watch?v=bSfqNEvykv0", - "https://www.youtube.com/watch?v=fzyBSNtlvr0", - "https://www.youtube.com/watch?v=euJ22UqLD5Y", - "https://www.youtube.com/watch?v=ntqlTG40inU", - "https://www.youtube.com/watch?v=QkjyMGFfju8", - "https://www.youtube.com/watch?v=u9sq3ME0JHQ", - "https://www.youtube.com/watch?v=6TWdLqER014", - "https://www.youtube.com/watch?v=dkpgz3uQ58U", - "https://www.youtube.com/watch?v=YoagldK69U0", - "https://www.youtube.com/watch?v=Yd60nI4sa9A", - "https://www.youtube.com/watch?v=Vrs0XgnXsxk", - "https://www.youtube.com/watch?v=UESD9eRIshQ", - "https://www.youtube.com/watch?v=n2_X4VTCoEo" - ], - "playlist5": [ - "https://www.youtube.com/watch?v=GNWw2NFo_ec", - "https://www.youtube.com/watch?v=fAqH0xCwcQM", - "https://www.youtube.com/watch?v=k1uUIJPD0Nk", - "https://www.youtube.com/watch?v=5g1knbuhvEg", - "https://www.youtube.com/watch?v=a2YniybuNGs", - "https://www.youtube.com/watch?v=LBJQEJKBq-k", - "https://www.youtube.com/watch?v=--XdhfJKjEk", - "https://www.youtube.com/watch?v=6wJs8NnmY0k", - "https://www.youtube.com/watch?v=U130wnpi-C0", - "https://www.youtube.com/watch?v=uxEfEJ2lbNc", - "https://www.youtube.com/watch?v=-UjPbiYOybs", - "https://www.youtube.com/watch?v=YoDVuv9JwYk", - "https://www.youtube.com/watch?v=xd0TGfZSACI", - "https://www.youtube.com/watch?v=UIKAATw2VlY", - "https://www.youtube.com/watch?v=wOwblaKmyVw", - "https://www.youtube.com/watch?v=PuxYe1TtFjk", - "https://www.youtube.com/watch?v=3hEfcawx6Fc", - "https://www.youtube.com/watch?v=whZlAx5zVEI", - "https://www.youtube.com/watch?v=W3Wnagn58bU", - "https://www.youtube.com/watch?v=P_XOAxrutqw", - "https://www.youtube.com/watch?v=fBYELKChWzY", - "https://www.youtube.com/watch?v=U1Jf4B6z1Gk", - "https://www.youtube.com/watch?v=RacxNskxySo", - "https://www.youtube.com/watch?v=yQCuxYyNORY", - "https://www.youtube.com/watch?v=mKPSf4reTeY", - "https://www.youtube.com/watch?v=yc5AWImplfE", - "https://www.youtube.com/watch?v=y-pU-DHEVaU", - "https://www.youtube.com/watch?v=eWVETOwR2qo", - "https://www.youtube.com/watch?v=sh7BZf7D5Bw", - "https://www.youtube.com/watch?v=9I51JXpcLwk", - "https://www.youtube.com/watch?v=vK4qMcLV_0Q", - "https://www.youtube.com/watch?v=hg43Hhqa_zU", - "https://www.youtube.com/watch?v=7hx4gdlfamo", - "https://www.youtube.com/watch?v=7D-6nklMMbM", - "https://www.youtube.com/watch?v=7GtzB8cfkh0", - "https://www.youtube.com/watch?v=ZYRfUoR9Q4Y", - "https://www.youtube.com/watch?v=UaNGtgYwSsU", - "https://www.youtube.com/watch?v=JA644rSZX1A", - "https://www.youtube.com/watch?v=9BtZx5J38_0", - "https://www.youtube.com/watch?v=mNlswqBZ7u4", - "https://www.youtube.com/watch?v=0Rm22EhiVtU", - "https://www.youtube.com/watch?v=54OtWleMQeQ", - "https://www.youtube.com/watch?v=CD8bW1rWqOA", - "https://www.youtube.com/watch?v=j8-vNclkTDU", - "https://www.youtube.com/watch?v=LlY90lG_Fuw", - "https://www.youtube.com/watch?v=GQOd_oQeH1w", - "https://www.youtube.com/watch?v=FNNwcAPiZzY", - "https://www.youtube.com/watch?v=7iQRbb_wGyA", - "https://www.youtube.com/watch?v=XI7YzUKE_wI", - "https://www.youtube.com/watch?v=d7PXihC9548", - "https://www.youtube.com/watch?v=8e7S8l4s1OM", - "https://www.youtube.com/watch?v=Xbaoi-lifOM", - "https://www.youtube.com/watch?v=U-6rBX7p500", - "https://www.youtube.com/watch?v=4t8WI3bW8NA", - "https://www.youtube.com/watch?v=CpkZfkxdj2c", - "https://www.youtube.com/watch?v=Sayh8ZASxk8", - "https://www.youtube.com/watch?v=77RmU8QcM4k", - "https://www.youtube.com/watch?v=M-1Nj69JS5Q", - "https://www.youtube.com/watch?v=aKgjaT_jCjk", - "https://www.youtube.com/watch?v=0G2EZb3n71A", - "https://www.youtube.com/watch?v=hjPLkPsLxc4", - "https://www.youtube.com/watch?v=t-ouxPhYy7Y", - "https://www.youtube.com/watch?v=PV8KWCBs-Ts", - "https://www.youtube.com/watch?v=Ddfyc9GJLVY", - "https://www.youtube.com/watch?v=UcLSjQx8GXA", - "https://www.youtube.com/watch?v=z1HeUX_Ej2o", - "https://www.youtube.com/watch?v=ZZfkdBYnePg", - "https://www.youtube.com/watch?v=lAFaC_ZBN7U", - "https://www.youtube.com/watch?v=TySehkDfWco", - "https://www.youtube.com/watch?v=0HO_tNU8iGs", - "https://www.youtube.com/watch?v=QCwuH0S2exc", - "https://www.youtube.com/watch?v=E-urw9c82EA", - "https://www.youtube.com/watch?v=QXiHZSMS09E", - "https://www.youtube.com/watch?v=ZHuv0hO-D7w", - "https://www.youtube.com/watch?v=sF0DV0MsYrQ" - ], - "playlist6": [ - "https://www.youtube.com/watch?v=pAgnJDJN4VA", - "https://www.youtube.com/watch?v=o1tj2zJ2Wvg", - "https://www.youtube.com/watch?v=ec0XKhAHR5I", - "https://www.youtube.com/watch?v=O4irXQhgMqg", - "https://www.youtube.com/watch?v=0fAQhSRLQnM", - "https://www.youtube.com/watch?v=hTWKbfoikeg", - "https://www.youtube.com/watch?v=tAGnKpE4NCI", - "https://www.youtube.com/watch?v=y8OtzJtp-EM", - "https://www.youtube.com/watch?v=Ae829mFAGGE", - "https://www.youtube.com/watch?v=54LEywabkl4", - "https://www.youtube.com/watch?v=Vrf7bnwFo8M", - "https://www.youtube.com/watch?v=D0W1v0kOELA", - "https://www.youtube.com/watch?v=811QZGDysx0", - "https://www.youtube.com/watch?v=gBiNR9SY7Gw", - "https://www.youtube.com/watch?v=0qanF-91aJo", - "https://www.youtube.com/watch?v=PKXN88tjeMY", - "https://www.youtube.com/watch?v=2IbPn5j2YKk", - "https://www.youtube.com/watch?v=z-GUjA67mdc", - "https://www.youtube.com/watch?v=KNIZofPB8ZM", - "https://www.youtube.com/watch?v=hnJ5Hp1VwBo", - "https://www.youtube.com/watch?v=iC8oP4Z_xPw", - "https://www.youtube.com/watch?v=My5YMXGbq_o", - "https://www.youtube.com/watch?v=MSSxnv1_J2g", - "https://www.youtube.com/watch?v=0J2QdDbelmY", - "https://www.youtube.com/watch?v=eVTXPUF4Oz4", - "https://www.youtube.com/watch?v=LHVRV-qzh-0", - "https://www.youtube.com/watch?v=_VU9DjQpvMQ", - "https://www.youtube.com/watch?v=IsJOkVwdaQQ", - "https://www.youtube.com/watch?v=OMOGaugKpzs", - "https://www.youtube.com/watch?v=dRnNpLOhn1Q", - "https://www.youtube.com/watch?v=rvUjjtZ_opk", - "https://www.youtube.com/watch?v=oRdxUFDoQe0", - "https://www.youtube.com/watch?v=kd9TlGDZGkI", - "https://www.youtube.com/watch?v=FTQbiNvZqaY", - "https://www.youtube.com/watch?v=d27gTrPPAyk", - "https://www.youtube.com/watch?v=EPOIS5taqA8", - "https://www.youtube.com/watch?v=eRhg7qPLeN8", - "https://www.youtube.com/watch?v=3vAqC9p94KA", - "https://www.youtube.com/watch?v=WyYC9qRlJxY", - "https://www.youtube.com/watch?v=lDK9QqIzhwk", - "https://www.youtube.com/watch?v=7aLiT3wXko0", - "https://www.youtube.com/watch?v=cbLh9tpbGss", - "https://www.youtube.com/watch?v=qlZqEFbVxgo", - "https://www.youtube.com/watch?v=ZHwVBirqD2s", - "https://www.youtube.com/watch?v=AnlIHaAkuTU", - "https://www.youtube.com/watch?v=LWmM2HfT-R0", - "https://www.youtube.com/watch?v=CdqoNKCCt7A", - "https://www.youtube.com/watch?v=9hR3YwTyU9Y", - "https://www.youtube.com/watch?v=9kp3N3wQPO0", - "https://www.youtube.com/watch?v=nKhN1t_7PEY", - "https://www.youtube.com/watch?v=2c1FqqNF7O8", - "https://www.youtube.com/watch?v=5oWyMakvQew", - "https://www.youtube.com/watch?v=cp42V938eBA", - "https://www.youtube.com/watch?v=Vt2YIpZWBqA", - "https://www.youtube.com/watch?v=ErrnMncR4dw", - "https://www.youtube.com/watch?v=ewt2ybYEI08", - "https://www.youtube.com/watch?v=wz1qXl9WoBU", - "https://www.youtube.com/watch?v=raWP9ds1o04", - "https://www.youtube.com/watch?v=f3vnmV6pPKI", - "https://www.youtube.com/watch?v=OtBHfxU2wmc", - "https://www.youtube.com/watch?v=J2VAefm330Q", - "https://www.youtube.com/watch?v=tH2w6Oxx0kQ", - "https://www.youtube.com/watch?v=dyihQtBes1I", - "https://www.youtube.com/watch?v=RgEo_sxwZ8g", - "https://www.youtube.com/watch?v=H7m1PO7wvYM", - "https://www.youtube.com/watch?v=A8pOVirjGF0", - "https://www.youtube.com/watch?v=EScNALt7IFM", - "https://www.youtube.com/watch?v=qmOLtTGvsbM", - "https://www.youtube.com/watch?v=6Uje4RDymuQ", - "https://www.youtube.com/watch?v=4HMw1eV2Qcs", - "https://www.youtube.com/watch?v=uWeqeQkjLto", - "https://www.youtube.com/watch?v=thZQr5bJEv0", - "https://www.youtube.com/watch?v=OJWJE0x7T4Q", - "https://www.youtube.com/watch?v=U3-XGqhN3h0", - "https://www.youtube.com/watch?v=U1yeC2wmtzw" - ] -} \ No newline at end of file diff --git a/radio.js b/radio.js deleted file mode 100644 index 5c55596..0000000 --- a/radio.js +++ /dev/null @@ -1,398 +0,0 @@ - //////////////////////////// - //////CONFIG LOAD/////////// - //////////////////////////// - const { - MessageEmbed - } = require("discord.js"); - const Discord = require("discord.js"); - const config = require("./config.json") - //all Estações de Radio - const { - Radiostations - } = require("./radiostations.json") - const radios = require("./radiostations.json") - const paginationEmbed = require("discord.js-pagination") - //////////////////////////// - //////COMMAND BEGIN///////// - //////////////////////////// - module.exports = async function (client, message, args) { - //get the prefix - let prefix = client.settings.get(message.guild.id, `prefix`); - if (prefix === null) prefix = config.prefix; //if not prefix set it to standard prefix in the config.json file - - //LINKS - if (!args[0]) - return stations(client, prefix, message); - - let { - channel - } = message.member.voice; - if (!channel) return message.reply("Please join a Channel first!") - - if (isNaN(args[0])) { - return message.reply( - new Discord.MessageEmbed() - .setColor("RED") - .setAuthor(`Error`, client.user.displayAvatarURL(), "https://24.musicium.eu") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setTitle(`Não é uma estação de rádio válida, use um número entre \`1\` e \`${Radiostations.length}\``) - ); - } - if (Number(args[1]) > 150) return message.reply("**Volume máximo é `150`!**") - if (Number(args[1]) < 1) return message.reply("**Volume mínimo é `1`!**") - let volume; - if (isNaN(args[1])) { - volume = 50; - } else { - volume = args[1] - } - let args2; - - if (Number([args[0]]) > 0 && Number(args[0]) <= 10) - args2 = radios.EU.United_Kingdom[Number(args[0]) - 1].split(` `); - else if (Number([args[0]]) > 10 && Number(args[0]) <= 20) - args2 = radios.EU.Austria[Number(args[0]) - 10 - 1].split(` `); - else if (Number([args[0]]) > 20 && Number(args[0]) <= 30) - args2 = radios.EU.Belgium[Number(args[0]) - 20 - 1].split(` `); - else if (Number([args[0]]) > 30 && Number(args[0]) <= 40) - args2 = radios.EU.Bosnia[Number(args[0]) - 30 - 1].split(` `); - else if (Number([args[0]]) > 40 && Number(args[0]) <= 50) - args2 = radios.EU.Czech[Number(args[0]) - 40 - 1].split(` `); - else if (Number([args[0]]) > 50 && Number(args[0]) <= 60) - args2 = radios.EU.Denmark[Number(args[0]) - 50 - 1].split(` `); - else if (Number([args[0]]) > 60 && Number(args[0]) <= 70) - args2 = radios.EU.Germany[Number(args[0]) - 60 - 1].split(` `); - else if (Number([args[0]]) > 70 && Number(args[0]) <= 80) - args2 = radios.EU.Hungary[Number(args[0]) - 70 - 1].split(` `); - else if (Number([args[0]]) > 80 && Number(args[0]) <= 90) - args2 = radios.EU.Ireland[Number(args[0]) - 80 - 1].split(` `); - else if (Number([args[0]]) > 90 && Number(args[0]) <= 100) - args2 = radios.EU.Italy[Number(args[0]) - 90 - 1].split(` `); - else if (Number([args[0]]) > 100 && Number(args[0]) <= 110) - args2 = radios.EU.Luxembourg[Number(args[0]) - 100 - 1].split(` `); - else if (Number([args[0]]) > 110 && Number(args[0]) <= 120) - args2 = radios.EU.Romania[Number(args[0]) - 110 - 1].split(` `); - else if (Number([args[0]]) > 120 && Number(args[0]) <= 130) - args2 = radios.EU.Serbia[Number(args[0]) - 120 - 1].split(` `); - else if (Number([args[0]]) > 130 && Number(args[0]) <= 140) - args2 = radios.EU.Spain[Number(args[0]) - 130 - 1].split(` `); - else if (Number([args[0]]) > 140 && Number(args[0]) <= 150) - args2 = radios.EU.Sweden[Number(args[0]) - 140 - 1].split(` `); - else if (Number([args[0]]) > 150 && Number(args[0]) <= 160) - args2 = radios.EU.TURKEY[Number(args[0]) - 150 - 1].split(` `); - else if (Number([args[0]]) > 160 && Number(args[0]) <= 170) - args2 = radios.EU.Ukraine[Number(args[0]) - 150 - 1].split(` `); - else if (Number([args[0]]) > 170 && Number(args[0]) <= (170 + 46)) - args2 = radios.OTHERS.request[Number(args[0]) - 160 - 1].split(` `); - else - return message.reply("Esta estação de rádio não foi encontrada") - - - const song = { - title: args2[0].replace("-", " "), - url: args2[1], - thumbnail: client.user.displayAvatarURL(), - }; - - message.reply( - new Discord.MessageEmbed() - .setTitle(song.title) - .setColor(config.colors.yes) - .setURL(song.url) - .setFooter(client.user.username, client.user.displayAvatarURL()) - ) - - //If not in the same channel return error - if (message.guild.me.connection && channel !== message.guild.me.voice.channel) - return message.reply(`Você deve estar no mesmo canal de voz que eu`); - - if (!volume) volume = 50 - - //try to join the Channel - let connection = await channel.join().catch(console.error); - //mute yourself - try { - await connection.voice.setSelfDeaf(true); - } catch {} - try { - await connection.voice.setDeaf(true); - } catch {} - - try { - const dispatcher = await connection.play(song.url); - await dispatcher.setVolumeLogarithmic(volume / 100) - dispatcher.on("end", end => { - channel.leave(); - }); - dispatcher.on("error", end => { - channel.leave(); - }); - } catch (error) { - console.error(error); - await channel.leave(); - } - - } - - - function stations(client, prefix, message) { - let amount = 0; - - let United_Kingdom = ""; - for (let i = 0; i < radios.EU.Germany.length; i++) { - United_Kingdom += `**${i+1+10*amount}** [${radios.EU.United_Kingdom[i].split(" ")[0].replace("-"," ")}](${radios.EU.United_Kingdom[i].split(" ")[1]})\n` - } - amount++; - - let austria = ""; - for (let i = 0; i < radios.EU.Austria.length; i++) { - austria += `**${i+1+10*amount}** [${radios.EU.Austria[i].split(" ")[0].replace("-"," ")}](${radios.EU.Austria[i].split(" ")[1]})\n` - } - - amount++; - let Belgium = ""; - for (let i = 0; i < radios.EU.Belgium.length; i++) { - Belgium += `**${i+1+10*amount}** [${radios.EU.Belgium[i].split(" ")[0].replace("-"," ")}](${radios.EU.Belgium[i].split(" ")[1]})\n` - } - - amount++; - let Bosnia = ""; - for (let i = 0; i < radios.EU.Bosnia.length; i++) { - Bosnia += `**${i+1+10*amount}** [${radios.EU.Bosnia[i].split(" ")[0].replace("-"," ")}](${radios.EU.Bosnia[i].split(" ")[1]})\n` - } - - amount++; - let Czech = ""; - for (let i = 0; i < radios.EU.Czech.length; i++) { - Czech += `**${i+1+10*amount}** [${radios.EU.Czech[i].split(" ")[0].replace("-"," ")}](${radios.EU.Czech[i].split(" ")[1]})\n` - } - - amount++; - let Denmark = ""; - for (let i = 0; i < radios.EU.Denmark.length; i++) { - Denmark += `**${i+1+10*amount}** [${radios.EU.Denmark[i].split(" ")[0].replace("-"," ")}](${radios.EU.Denmark[i].split(" ")[1]})\n` - } - - amount++; - let germany = ""; - for (let i = 0; i < radios.EU.Germany.length; i++) { - germany += `**${i+1+10*amount}** [${radios.EU.Germany[i].split(" ")[0].replace("-"," ")}](${radios.EU.Germany[i].split(" ")[1]})\n` - } - - amount++; - let Hungary = ""; - for (let i = 0; i < radios.EU.Hungary.length; i++) { - Hungary += `**${i+1+10*amount}** [${radios.EU.Hungary[i].split(" ")[0].replace("-"," ")}](${radios.EU.Hungary[i].split(" ")[1]})\n` - } - - amount++; - let Ireland = ""; - for (let i = 0; i < radios.EU.Ireland.length; i++) { - Ireland += `**${i+1+10*amount}** [${radios.EU.Ireland[i].split(" ")[0].replace("-"," ")}](${radios.EU.Ireland[i].split(" ")[1]})\n` - } - - amount++; - let Italy = ""; - for (let i = 0; i < radios.EU.Italy.length; i++) { - Italy += `**${i+1+10*amount}** [${radios.EU.Italy[i].split(" ")[0].replace("-"," ")}](${radios.EU.Italy[i].split(" ")[1]})\n` - } - - amount++; - let Luxembourg = ""; - for (let i = 0; i < radios.EU.Luxembourg.length; i++) { - Luxembourg += `**${i+1+10*amount}** [${radios.EU.Luxembourg[i].split(" ")[0].replace("-"," ")}](${radios.EU.Luxembourg[i].split(" ")[1]})\n` - } - - amount++; - let Romania = ""; - for (let i = 0; i < radios.EU.Romania.length; i++) { - Romania += `**${i+1+10*amount}** [${radios.EU.Romania[i].split(" ")[0].replace("-"," ")}](${radios.EU.Romania[i].split(" ")[1]})\n` - } - - amount++; - let Serbia = ""; - for (let i = 0; i < radios.EU.Serbia.length; i++) { - Serbia += `**${i+1+10*amount}** [${radios.EU.Serbia[i].split(" ")[0].replace("-"," ")}](${radios.EU.Serbia[i].split(" ")[1]})\n` - } - - amount++; - let Spain = ""; - for (let i = 0; i < radios.EU.Spain.length; i++) { - Spain += `**${i+1+10*amount}** [${radios.EU.Spain[i].split(" ")[0].replace("-"," ")}](${radios.EU.Spain[i].split(" ")[1]})\n` - } - - amount++; - let Sweden = ""; - for (let i = 0; i < radios.EU.Sweden.length; i++) { - Sweden += `**${i+1+10*amount}** [${radios.EU.Sweden[i].split(" ")[0].replace("-"," ")}](${radios.EU.Sweden[i].split(" ")[1]})\n` - } - - amount++; - let TURKEY = ""; - for (let i = 0; i < radios.EU.TURKEY.length; i++) { - TURKEY += `**${i+1+10*amount}** [${radios.EU.TURKEY[i].split(" ")[0].replace("-"," ")}](${radios.EU.TURKEY[i].split(" ")[1]})\n` - } - - amount++; - let Ukraine = ""; - for (let i = 0; i < radios.EU.Ukraine.length; i++) { - Ukraine += `**${i+1+10*amount}** [${radios.EU.Ukraine[i].split(" ")[0].replace("-"," ")}](${radios.EU.Ukraine[i].split(" ")[1]})\n` - } - - amount++; - let requests = ""; - for (let i = 0; i < radios.OTHERS.request.length; i++) { - requests += `**${i+1+10*amount}** [${radios.OTHERS.request[i].split(" ")[0].replace("-"," ")}](${radios.OTHERS.request[i].split(" ")[1]})\n` - } - const infoembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("130 Estações de radio", client.user.displayAvatarURL(), " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(` - \`\`\`Você verá estas estações de rádio para cada país:\`\`\` - - __***EU***__ - **Page 2:** \`Reino Unido\` - **Page 3:** \`Austria\` - **Page 4:** \`Bélgica\` - **Page 5:** \`Bosnia & Herzegovina\` - **Page 6:** \`Tcheco\` - **Page 7:** \`Dinamarca\` - **Page 8:** \`Alemanha\` - **Page 9:** \`Hungria\` - **Page 10:** \`Irlanda\` - **Page 11:** \`Italia\` - **Page 12:** \`Luxemburgo\` - **Page 13:** \`Romênia\` - **Page 14:** \`Sérvia\` - **Page 15:** \`Spanha\` - **Page 16:** \`Suécia\` - **Page 17:** \`Turquia\` - **Page 18:** \`Ucrânia\` - \`MAIS EM BREVE\` - - __**AMERICA**__ - \`EM BREVE\` - - __**PEDIDOS PERSONALIZADOS**__ - **Page 19:** \`10 primeiras solicitações personalizadas\` - - Se você quiser tocar uma estação de rádio, basta digitar: **\`${prefix}toque [Volume]\`** mas o volume é um número entre 1 e 150 e opcional! - por exemplo: **\`${prefix}play 12 50\`** -- Isso vai tocar a estação de rádio: ****com o volume **50**! - `) - - const United_Kingdomembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Reino Unido - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-united-kingdom_1f1ec-1f1e7.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(United_Kingdom) - const austriaembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Austria - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-austria_1f1e6-1f1f9.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(austria) - const Belgiumembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Bélgica - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-belgium_1f1e7-1f1ea.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(Belgium) - const Bosniaembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Bosnia & Herzegovina - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-bosnia-herzegovina_1f1e7-1f1e6.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(Bosnia) - const Czechembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Tcheco - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-czechia_1f1e8-1f1ff.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(Czech) - const Denmarkembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Dinamarca - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-denmark_1f1e9-1f1f0.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(Denmark) - const germanyembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Alemanha - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-germany_1f1e9-1f1ea.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(germany) - const Hungaryembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Hungria - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-hungary_1f1ed-1f1fa.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(Hungary) - const Irelandembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Irlanda - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-ireland_1f1ee-1f1ea.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(Ireland) - const Italyembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Italia - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-italy_1f1ee-1f1f9.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(Italy) - const Luxembourgembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Luxemburgo - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-luxembourg_1f1f1-1f1fa.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(Luxembourg) - const Romaniaembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Romênia - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-romania_1f1f7-1f1f4.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(Romania) - const Serbiaembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Sérvia - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-serbia_1f1f7-1f1f8.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(Serbia) - const Spainembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Romênia - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-spain_1f1ea-1f1f8.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(Spain) - const Swedenembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Suécia - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-sweden_1f1f8-1f1ea.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(Sweden) - const TURKEYembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Turquia - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-turkey_1f1f9-1f1f7.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(TURKEY) - const Ukraineembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Ucrânia - Estações de Radio", "https://emojipedia-us.s3.dualstack.us-west-1.amazonaws.com/thumbs/120/twitter/259/flag-ukraine_1f1fa-1f1e6.png", " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(Ukraine) - - const Reqeustembed = new Discord.MessageEmbed() - .setColor("#00BFFF") - .setAuthor("Requerido - Estações de Radio", client.user.displayAvatarURL(), " https://kingbot.cf") - .setFooter(client.user.username, client.user.displayAvatarURL()) - .setDescription(requests) - - pages = [ - infoembed, - United_Kingdomembed, - austriaembed, - Belgiumembed, - Bosniaembed, - Czechembed, - Denmarkembed, - germanyembed, - Hungaryembed, - Irelandembed, - Italyembed, - Luxembourgembed, - Romaniaembed, - Serbiaembed, - Spainembed, - Swedenembed, - TURKEYembed, - Ukraineembed, - Reqeustembed - ]; - return paginationEmbed(message, pages, ['⏪', '⏩'], 600000); - } \ No newline at end of file diff --git a/radiostations.json b/radiostations.json deleted file mode 100644 index 20f689d..0000000 --- a/radiostations.json +++ /dev/null @@ -1,320 +0,0 @@ -{ - - "Radiostations": [ - "Standard-Radio https://streams.ilovemusic.de/iloveradio14.mp3", - "Base-Radio.de https://baseradiode.stream.laut.fm/baseradiode", - "Chill-Radio https://streams.ilovemusic.de/iloveradio17.mp3", - "Dance-Radio https://streams.ilovemusic.de/iloveradio2.mp3", - "Deutsch-Rap-Radio https://streams.ilovemusic.de/iloveradio6.mp3", - "Greatest-hits-Radio https://streams.ilovemusic.de/iloveradio16.mp3", - "Hip-hop-Radio https://streams.ilovemusic.de/iloveradio3.mp3", - "Party-Radio https://streams.ilovemusic.de/iloveradio14.mp3", - "Us-Rap-Radio https://streams.ilovemusic.de/iloveradio13.mp3", - "X-Mas-Radio https://streams.ilovemusic.de/iloveradio8.mp3", - "Greatest-hits-Radio https://stream-mz.planetradio.co.uk/net2national.mp3", - "Absolut-Radio http://icy-e-bab-02-gos.sharp-stream.com/absoluteradio.mp3", - "Absolut-70s-Radio http://ais.absoluteradio.co.uk/absolute70s.mp3", - "Absolut-80s-Radio http://ais.absoluteradio.co.uk/absolute80s.mp3", - "Absolut-90s-Radio http://ais.absoluteradio.co.uk/absolute90s.mp3", - "Absolut-2000s-Radio http://ais.absoluteradio.co.uk/absolute00s.mp3", - "Absolut-Classic-Rock http://icy-e-bab-04-cr.sharp-stream.com/absoluteclassicrock.mp3", - - "Top-Radio http://loadbalancing.topradio.be/topradio.mp3", - - "88.6-Radio http://radio886.fluidstream.eu/886_live.mp3", - "Hitradio-Ö3 http://mp3stream7.apasf.apa.at:8000/.mp3", - - "NRJ-Radio http://cdn.nrjaudio.fm/audio1/fr/30001/mp3_128.mp3", - "Radio-France-Radio http://direct.fipradio.fr/live/fip-midfi.mp3", - - "Rai-Radio http://icestreaming.rai.it:80/1.mp3", - "Veronica-Radio http://icestreaming.rai.it:80/2.mp3", - - "ERR-Radio http://icecast.err.ee:80/vikerraadio.mp3", - "Tallin-Radio http://icecast.err.ee:80/raadiotallinn.mp3", - - "Color-Music-Radio http://icecast8.play.cz/color128.mp3", - "Helax-93.7-Radio http://ice.abradio.cz:8000/helax128.mp3", - - "Český-rozhlas-Radio http://icecast6.play.cz/cro2-128.mp3", - "Spin-Radio http://icecast4.play.cz/spin128.mp3", - - "BB-Radio http://icecast.omroep.nl/radio1-bb-mp3", - "538-Radio http://21223.live.streamtheworld.com/RADIO538.mp3", - - "radio90-cieszyn http://streams2.radio90.pl:8000/radio90_128kbps_stereo.mp3", - "Fama-Radio http://stream2.nadaje.com:8076/,stream.mp3" - ], - - "EU":{ - "United_Kingdom":[ - "Greatest-hits-Radio https://stream-mz.planetradio.co.uk/net2national.mp3", - "Absolut-Radio http://icy-e-bab-02-gos.sharp-stream.com/absoluteradio.mp3", - "Absolut-70s-Radio http://ais.absoluteradio.co.uk/absolute70s.mp3", - "Absolut-80s-Radio http://ais.absoluteradio.co.uk/absolute80s.mp3", - "Absolut-90s-Radio http://ais.absoluteradio.co.uk/absolute90s.mp3", - "Absolut-2000s-Radio http://ais.absoluteradio.co.uk/absolute00s.mp3", - "Absolut-Classic-Rock http://icy-e-bab-04-cr.sharp-stream.com/absoluteclassicrock.mp3", - "Variety-Online-Radio https://everestcast.shoutcastservices.com:1295/stream", - "BBC-World-Service http://sc11.iad.llnw.net/stream/bbcwssc_mp1_ws-eieuk_backup", - "LBC-RADIO http://icecast.thisisdax.com/LBC973" - ], - "Austria":[ - "Hitradio-Ö3 https://orf-live.ors-shoutcast.at/oe3-q1a", - "Radio-Arabella http://arabella.stream.kapper.net:8000/arabellavie", - "ENERGY-Austria http://streaming.streema.com/listen-nrj", - "Radio-88.6 https://radio886.fluidstream.eu/886_hardrock.mp3", - "Radio-Wien https://orf-live.ors-shoutcast.at/wie-q1a", - "Njoy http://94.136.28.9:8005/njoyradio-hd", - "Radio-Stephansdom http://radioklassikstephansdom.ice.infomaniak.ch/radioklassikstephansdom.mp3", - "Volksmusik http://167.86.97.222:8007/volksmusikpur", - "Fm4 https://orf-live.ors-shoutcast.at/fm4-q1a", - "Antenne http://streamplus20.leonex.de:24954/;;" - ], - "Belgium":[ - "Radio-Stad http://stream2.radiostad.org:8344/;;", - "La-Classica http://stream.laclassica.be:8023/stream", - "Joe-FM-Fm-96.7 http://playerservices.streamtheworld.com/api/livestream-redirect/JOE.mp3 ", - "Instrumentals-Forever http://184.75.223.178:8151/stream/;", - "VRT-Radio http://icecast.vrtcdn.be/ra2vlb-high.mp3", - "Nostalgie-FM-102.9 http://nostalgiewhatafeeling.ice.infomaniak.ch/nostalgiewhatafeeling-128.mp3", - "Studio-Brussel-FM-100.6 http://icecast.vrtcdn.be/stubru-high.mp3", - "RTBF-Class http://radios.rtbf.be/classic21-128.mp3/;", - "Q-Music http://playerservices.streamtheworld.com/api/livestream-redirect/QMUSICAAC.aac", - "Radio-Minerva http://icecast.movemedia.eu/minerva" - ], - "Bosnia":[ - "Big-Radio-Big-2 http://188.124.211.103:8100/big2", - "Novi-Radio-Bihac http://163.172.213.155:8119/stream", - "Radiopostaja-MIR-Medugorje http://213.133.102.58:23565/stream", - "RSG-Radio http://195.201.112.14:9000/;;", - "Radio-BIR http://188.40.62.20:8090/stream/;", - "Radio-Velkaton http://188.40.62.20:8044/;stream.mp3;", - "Radio-Odžak http://play.radioodzak.com:8000/;", - "USK-Radio http://radiousk.radioca.st:8034/stream/;", - "Radio-Bihać http://hydra.shoutca.st:8249/stream/;", - "Skala-Radio http://163.172.213.155:9049/;" - ], - "Czech":[ - "Rádio-Classic-FM https://icecast8.play.cz/classic128.mp3", - "RFE/RL-Radio-Farda http://stream.radiojar.com/cp13r2cpn3quv", - "Rádio-Čas http://icecast7.play.cz/casradio32.mp3", - "Radio-1-FM-91.9 http://icecast-u2.play.cz:8000/radio1-128.mp3", - "Radio-Blanik http://ice.abradio.cz/blanikfm128.mp3", - "Kiss-98-FM http://icecast4.play.cz/kiss128.mp3", - "Evropa-2-Maxximum-Muziky http://ice.actve.net/fm-evropa2-128", - "E2-Evropa-2 http://playerservices.streamtheworld.com/api/livestream-redirect/EVROPA2.mp3", - "Dance-Radio http://playerservices.streamtheworld.com/api/livestream-redirect/DANCEAAC.aac", - "Rádio-BEAT http://icecast2.play.cz/radiobeat128.mp3" - ], - "Denmark":[ - "Nordic-Lodge https://larry.torontocast.com:2095/stream", - "La-Salsa-Del-Tren-Del-Sabor http://81.196.107.46:50380/;", - "Skala.FM-Kolding https://webradio.skala.fm/kolding", - "Radio-Tango https://laut.fm/tangocopenhagen?autoplay=1", - "Specific-Radio http://stream.specific.dk/radio", - "DR-P4-Nordjylland http://live-icy.gss.dr.dk/A/A10H.mp3", - "Radio-Nordjyske http://stream.anr.dk/nordjyske", - "DR-P4-København http://live-icy.gss.dr.dk:8000/A/A08L.mp3", - "Radio-Alfa http://89.249.7.68:8050/alfa", - "902FM http://stream.wlmm.dk/902fmmp3/;" - ], - "Germany":[ - "TechnoBase http://mp3.stream.tb-group.fm/tb.mp3", - "RadioParty http://stream.laut.fm/radioparty", - "Base-Radio.de https://baseradiode.stream.laut.fm/baseradiode", - "NeruxFM http://stream.laut.fm/neruxfm", - "ENERGY http://185.52.127.162/de/33003/mp3_128.mp3", - "80s80s-Real80s http://streams.80s80s.de/80s80s/mp3-192/streema/", - "Magic-FM http://stream.laut.fm/magic-top100", - "iLoveRadio https://streams.ilovemusic.de", - "Chill-Radio https://streams.ilovemusic.de/iloveradio17.mp3", - "Us-Rap-Radio https://streams.ilovemusic.de/iloveradio13.mp3" - ], - "Hungary":[ - "Argentine-Tango http://streaming2.argentinetangoradio.com/2202_128.mp3", - "Szent-Istvan http://online.szentistvanradio.hu:8000/;;", - "InfoRádió http://stream.infostart.hu/lejatszo", - "Klubrádió http://stream.klubradio.hu:8080/bpstream", - "Cool-FM-Budapest http://mediagw.e-tiger.net:8000/stream/coolfm", - "Retro-Rádió http://stream.retroradio.hu/high.mp3", - "CEU-Medieval http://stream3.virtualisan.net:7020/;", - "Rádió-1-Békéscsaba http://stream3.radio1.hu/high.mp3", - "Magyar-Rádió-Zrt http://stream001.radio.hu:8080/mr3.mp3", - "90.9-Jazzy http://s04.diazol.hu:9500/live.mp3" - ], - "Ireland":[ - "Deep-House-Radio http://37.187.93.104:8589/deep/;", - "Radio-Kerry https://edge.audioxi.com/KERRY", - "Highland-Radio https://edge.audioxi.com/HIGHLAND", - "Halloween-FM http://christmasfm.cdnstream1.com/2552_128.mp3", - "Live-Ireland-Channel-1 http://192.111.140.11:8058/stream/;", - "Midwest-Irish-Radio https://edge-audio-03-gos2.sharp-stream.com/midwestfmie2.aac", - "RTÉ-Raidió-na-Gaeltachta http://icecast1.rte.ie:8000/rnag", - "Heartbeat-FM http://cast5.magicstreams.gr:8010/stream/;", - "Gem-Radio-New-Wave http://62.210.10.4:8928/stream/;", - "Primal-Radio http://199.101.51.168:8058/stream/;" - ], - "Italy":[ - "Antenna-1 http://167.114.251.212/stream/;", - "Virgin-Radio http://icy.unitedradio.it/VirginRockClassics.mp3", - "Radio-Velluto https://stream3.xdevel.com/audio1s975447-157/stream/icecast.audio", - "LolliRadio https://stream.lolliradio.net/lolli_italia.mp3?FLID=D", - "Venice-Classic-Radio http://uk2.streamingpulse.com/ssl/vcr1", - "Radio-Margherita http://onair20.xdevel.com:8011/;", - "Radio-Kiss-Kiss http://ice06.fluidstream.net/KKItalia.aac", - "Rai-Radio-1 https://icestreaming.rai.it/1.mp3", - "Radio-Sportiva https://mediahit.inmystream.it:9000/stream", - "Lazio-Style http://nr9.newradio.it:9043/stream/;" - ], - "Luxembourg":[ - "Radio-Latina http://ice.creacast.com/radio-latina-lu-mp3", - "L'essentiel-Radio http://lessentielradio.ice.infomaniak.ch/lessentielradio-128.mp3", - "Radio-100.7 http://100komma7.cast.addradio.de/100komma7/live/mp3/128/stream.mp3", - "Radio-Ara http://stream.ara.lu/stream.mp3", - "Eldoradio http://81.92.238.33/;;", - "Radio-Gutt-Laun http://rgl.selfip.net:8000/mp3/;", - "Radio-Hajer http://s3.slotex.pl:7648/;;", - "Radio-Diddeleng http://radiodudelange.ice.infomaniak.ch/radiodudelange-128.mp3", - "RTL-Radio http://81.92.238.32/;;", - "Radio-LRB http://zeus.lrb.lu:8000/lrb.live" - ], - "Romania":[ - "Prima-Radio-87.9 http://89.121.210.62:8000/", - "Radio-Vocea-Evangheliei http://38.96.148.39:6700/;", - "Radio-Romania-Resita http://89.238.227.6:8342/;", - "Radio-Gosen http://ascultaradiogosen.no-ip.org:8125/;", - "Radio-Romantik http://5.196.244.141:1966/;", - "Radio-România-Actualități http://89.238.227.6:8008/;", - "Radio-Trinitas http://live.radiotrinitas.ro:8000/;", - "Radio-Gangsta http://live.radiogangsta.ro:8800/;", - "RVE-Sibiu http://c13.radioboss.fm:8286/autodj", - "Radio-ZEN http://live-zen.distinct.ro:8000/;" - ], - "Serbia":[ - "Radio-Buca http://live.bucaradio.com:8000/;", - "Radio-Llapi http://radio.1dhe1.com:8555/stream", - "Radio-Morava http://e3.radiomorava.rs/radio/8000/radiomorava128.mp3", - "Ok-Radio http://live4.okradio.net:8052/;", - "Radio-Vizioni http://live.rcast.net:8570/stream", - "Radio-Ada http://94.130.196.243:9010/stream/;", - "Radio-Karolina http://streaming.karolina.rs:8000/karolina", - "Radio-Ritam-Srca http://51.75.146.35:8008/RadioRitamSrca", - "Radio-Antena http://antenaradio.org:4560/;", - "Radio-Duga http://46.105.43.31:8014/stream/;" - ], - "Spain":[ - "Blue-Marlin-Ibiza http://ice1.viastreaming.net:8635/live", - "Top-Radio http://19003.live.streamtheworld.com/TOPRADIOAAC_SC", - "Costa-Del-Mar-Radio https://radio4.cdm-radio.com:18020/stream-mp3-Chill", - "Ibiza-Global-Radio http://ibizaglobalradio.streaming-pro.com:8024/;", - "Ibiza-Live-Radio http://streams.radio.co/sdc9cfaf77/listen", - "Kiss-FM http://kissfm.kissfmradio.cires21.com/kissfm.mp3Máxima FM Madrid ", - "Máxima-FM-Madrid http://178.32.146.184:2088/stream/;", - "Radio-Galega http://wecast-b01-04.flumotion.com/radiogalega-musica/live.mp3", - "Los40-Classic http://playerservices.streamtheworld.com/api/livestream-redirect/LOS40_CLASSIC.mp3", - "esRadio http://libertaddigital-radio-live1.flumotion.com/libertaddigital/ld-live1-low.mp3" - ], - "Sweden":[ - "Radio-Ayeneh-http://83.251.229.97/streampath1.mp3/;", - "Retro-FM http://live-bauerse-fm.sharp-stream.com/retrofm_aacp", - "Hamsafar-Radio http://streamingv2.shoutcast.com/Hamsafarradio/;", - "Radio-Pontos-Stockholm http://213.188.154.38:8000/live.mp3/;", - "NRJ-Sverige https://live-bauerse-fm.sharp-stream.com/nrj_instreamtest_se_aacp", - "The-Voice http://194.16.21.227/voice_se_aacp?ua=WEB&type=.flv®ion=mmo&amsparams=playerid%3ASBS_RP_WEB%3Bskey%3A1440595688%3B&listenerid=b33367aa21f8f1d7789225a512c481&awparams=companionAds%3Atrue", - "Rocket-FM http://stream.thsradio.se:8000/;", - "SR-P2-Musik https://http-live.sr.se/p2musik-aac-32", - "SR-P3-Stockholm http://http-live.sr.se/p3-aac-32", - "Radio-Sydvast http://149.255.59.3:8049/stream/;" - ], - "TURKEY":[ - "fenomen http://fenomen.listenfenomen.com/fenomen/128/icecast.audio", - "kral http://46.20.3.204/", - "slowtürk https://radyo.duhnet.tv/slowturk?/;stream.mp3", - "kralpop http://46.20.3.201/;", - "halay http://37.247.98.8/stream/30/", - "fenomentürk http://fenomenturk.listenfenomen.com/fenomenturk/128/icecast.audio ", - "powertürk http://powerturkeniyiler.listenpowerapp.com/powerturkeniyiler/mpeg/icecast.audio", - "turkrapfm http://95.173.188.166:9984/stream?type=http&nocache=56100", - "trt-radyo http://radyo.trt.net.tr/ext/js/list.m3u8", - "line http://radioline.fm:8000/" - ], - "Ukraine":[ - "Радио-Шансон http://media2.brg.ua:8000/shanson_h", - "Львівська-Хвиля http://onair.lviv.fm:8000/lviv.fm", - "Наше-Радио-Киев http://cast.nashe.ua/nashe", - "Ух-Радiо http://193.169.80.7:8001/efir", - "Hit-FM-Ukraine http://online-hitfm.tavrmedia.ua/HitFM", - "Авторадіо http://cast.radiogroup.com.ua:8000/avtoradio", - "KISS-FM-Ukraine http://online-kissfm.tavrmedia.ua/KissFM", - "Радио-Обозреватель https://radio-stream-0.obozrevatel.com/rep128.mp3", - "Русское-Радио-Украина http://online-rusradio.tavrmedia.ua/RusRadio", - "Gala-radio http://185.65.245.34:8000/kiev", - "avamedia-radioca https://avamedia.radioca.st/live" - ] - }, - "AMERICA": { - "":[ - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " ", - " " - ] - }, - "OTHERS": { - "request": [ - "I-love-Radio-104 https://streams.ilovemusic.de/iloveradio104.mp3", - "Europa-2 http://stream.radioservices.sk/europa2.mp3", - "Desizone http://www.desizone.nl:8000//;?type=http&nocache=175387", - "Stream-Open-Fm-87 http://stream.open.fm/87", - "Ice-Streaming-Rai https://icestreaming.rai.it/1.mp3", - "Ice-Cast-Kiss http://icecast1.play.cz/kiss128.mp3", - "EVROPA2 https://online.evropa2.cz/", - "Ibiza https://ice1.viastreaming.net:8443/live", - "streammax_6 https://streammax6.radioca.st/streammax6.pls", - "Dutch-radio2 http://icecast.omroep.nl/radio2-bb-mp3", - "Stream-Open-Fm-64 http://stream.open.fm/64", - "Sunshine-live http://sunsl.streamabc.net/sunsl-die2000er-mp3-192-3233898?sABC=5ss2s789%230%230rr4q58s627so2445pr72sns3p674323%23fgernz.fhafuvar-yvir.qr&=&amsparams=playerid:stream.sunshine-live.de;skey:1609758601", - "RMF-Max http://217.74.72.10/rmf_maxxx", - "Top-100-Station https://s38.derstream.net/top100station.mp3", - "topmusic-agoranoar http://stm39.srvstm.com:7920/stream", - "Radio-Eska https://radio.stream.smcdn.pl/icradio-p/t042-1.mp3/playlist.m3u8", - "Europa-2 https://stream.radioservices.sk/europa2.mp3", - "Radio-Cardiff https://radiocardiff.radioca.st//stream", - "Stream-Fm-102 http://stream.open.fm/102", - "I-love-Radio-104 https://streams.ilovemusic.de/iloveradio104.mp3", - "Deutschlands-Biggest-Hits https://streams.bigfm.de/bigfm-deutschland-128-mp3?usid=0-0-H-M-M-01", - "Veronika-64 http://149.13.0.80/veronika64", - "Dechovka-128 http://icecast5.play.cz/dechovka128.mp3", - "OUI-FM https://stream.ouifm.fr/ouifm-high.mp3", - "metro http://17773.live.streamtheworld.com/METRO_FM_SC", - "radyod http://radyo.dogannet.tv/radyod", - "superfm http://17733.live.streamtheworld.com/SUPER_FM_SC", - "JoyFm https://playerservices.streamtheworld.com/api/livestream-redirect/JOY_FM.mp3", - "fenomenakustik http://fenomenakustik.listenfenomen.com/fenomenakustik/128/icecast.audio ", - "show http://46.20.3.229/;", - "taksimclup http://cast1.taksim.fm:8016", - "megafm http://46.105.35.48:9346/; ", - "fenomenpop http://fenomenoriental.listenfenomen.com/fenomenpop/128/icecast.audio ", - "showpop http://46.20.3.229/;", - "powerakustik http://powerturkakustik.listenpowerapp.com/powerturkakustik/mpeg/icecast.audio ", - "fenomenrap http://fenomenoriental.listenfenomen.com/fenomenrap/128/icecast.audio ", - "fenomentürk http://fenomenturk.listenfenomen.com/fenomenturk/128/icecast.audio ", - "barışmanço http://nmbshsource.mediatriple.net:7000/stream/22/", - "popularfm http://37.59.205.232:9344/;", - "palslow http://shoutcast.radyogrup.com:2020/stream/1;", - "radyopop http://80.radyopop.com/stream/1/", - "clubmix http://cast1.taksim.fm:8016/;", - "türkfm http://turkiyemfm.canliyayinda.com:8032/;", - "hitfm http://yayin.turkiletisim.com.tr:1094/;", - "powertürkcover http://powerturkcover.listenpowerapp.com/powerturkcover/mpeg/icecast.audio", - "showradyo http://windows.showradyo.com.tr/;" - ] - } -} diff --git a/ranking.js b/ranking.js deleted file mode 100644 index bf66e47..0000000 --- a/ranking.js +++ /dev/null @@ -1,968 +0,0 @@ -const config = require("./config.json"); -const c = require('colors'); -const canvacord = require("canvacord"); -const Discord = require("discord.js"); -const prefix = config.prefix; -const embedcolor = config.embedcolor; -const maximum_leaderboard = config.maximum_leaderboard; //maximum 50 users for the leaderboard! - -module.exports = function (client) { - const description = { - name: "ranking", - filename: "ranking.js", - version: "2.0" - } - //log that the module is loaded - console.log(c.brightGreen(` :: Module: ${description.name} | Loaded version ${description.version} from ("${description.filename}")`)) - //voice state update event to check joining/leaving channels - client.on("message", async (message) => { - - if (message.author.bot || !message.guild) return; - //get the key of the user for this guild - const key = `${message.guild.id}-${message.author.id}`; - /** - * databasing - * @info General databasing, which sets the userinto the database if he types something - */ - function databasing(rankuser) { - //if(rankuser && rankuser.bot) return console.log("GOTTA IGNORE BOT") - client.points.ensure(rankuser ? `${message.guild.id}-${rankuser.id}` : `${message.guild.id}-${message.author.id}`, { - user: rankuser ? rankuser.id : message.author.id, - usertag: rankuser ? rankuser.tag : message.author.tag, - xpcounter: 1, - guild: message.guild.id, - points: 0, - neededpoints: 400, - level: 1, - oldmessage: "", - }); - client.points.set(rankuser ? `${message.guild.id}-${rankuser.id}` : `${message.guild.id}-${message.author.id}`, rankuser ? rankuser.tag : message.author.tag, `usertag`); //set the usertag with EVERY message, if he has nitro his tag might change ;) - client.points.set(message.guild.id, 1, `setglobalxpcounter`); //set points to 0 - } - databasing(); - - /** - * ARGUMENTS - * @info General arguments for the Whole message Event - */ - const args = message.content.slice(prefix.length).trim().split(/ +/g); - const command = args.shift().toLowerCase(); - - - /** - * COMMANDS - * @info if a message starts with the prefix, then run it - */ - if (message.content.startsWith(prefix)) { - - switch (command) { - case `rank`: - rank(message.mentions.users.first()||message.author); - break; - ///////////////////////////////// - case `leaderboard`: - case `lb`: - leaderboard(); - break; - ///////////////////////////////// - case `setxpcounter`: - if (!message.member.hasPermission("ADMINISTRATOR") || !message.member.hasPermission("MANAGE_GUILD")) return message.reply("Você não tem permissão para executar este cmd!") - setxpcounter(); - break; - ///////////////////////////////// - case `setglobalxpcounter`: - if (!message.member.hasPermission("ADMINISTRATOR") || !message.member.hasPermission("MANAGE_GUILD")) return message.reply("Você não tem permissão para executar este cmd!") - setglobalxpcounter(); - break; - ///////////////////////////////// - case `addpoints`: - if (!message.member.hasPermission("ADMINISTRATOR") || !message.member.hasPermission("MANAGE_GUILD")) return message.reply("Você não tem permissão para executar este cmd!") - addpoints(); - break; - ///////////////////////////////// - case `setpoints`: - if (!message.member.hasPermission("ADMINISTRATOR") || !message.member.hasPermission("MANAGE_GUILD")) return message.reply("Você não tem permissão para executar este cmd!") - - setpoints(); - break; - ///////////////////////////////// - case `removepoints`: - if (!message.member.hasPermission("ADMINISTRATOR") || !message.member.hasPermission("MANAGE_GUILD")) return message.reply("Você não tem permissão para executar este cmd!") - - removepoints(); - break; - ///////////////////////////////// - case `addlevel`: - if (!message.member.hasPermission("ADMINISTRATOR") || !message.member.hasPermission("MANAGE_GUILD")) return message.reply("Você não tem permissão para executar este cmd!") - - addlevel(); - break; - ///////////////////////////////// - case `setlevel`: - if (!message.member.hasPermission("ADMINISTRATOR") || !message.member.hasPermission("MANAGE_GUILD")) return message.reply("Você não tem permissão para executar este cmd!") - - setlevel(); - break; - ///////////////////////////////// - case `removelevel`: - if (!message.member.hasPermission("ADMINISTRATOR") || !message.member.hasPermission("MANAGE_GUILD")) return message.reply("Você não tem permissão para executar este cmd!") - - removelevel(); - break; - ///////////////////////////////// - case `resetranking`: - if (!message.member.hasPermission("ADMINISTRATOR") || !message.member.hasPermission("MANAGE_GUILD")) return message.reply("Você não tem permissão para executar este cmd!") - - resetranking(); - break; - ///////////////////////////////// - case `registerall`: - if (!message.member.hasPermission("ADMINISTRATOR") || !message.member.hasPermission("MANAGE_GUILD")) return message.reply("Você não tem permissão para executar este cmd!") - - registerall(); - break; - ///////////////////////////////// - case `addrandomall`: - if (!message.member.hasPermission("ADMINISTRATOR") || !message.member.hasPermission("MANAGE_GUILD")) return message.reply("Você não tem permissão para executar este cmd!") - - addrandomall(); - break; - ///////////////////////////////// - case `resetrankingall`: - if (!message.member.hasPermission("ADMINISTRATOR") || !message.member.hasPermission("MANAGE_GUILD")) return message.reply("Você não tem permissão para executar este cmd!") - - resetrankingall() - break; - ///////////////////////////////// - case `levelhelp`: - case `rankinghelp`: - case `levelinghelp`: - case `rankhelp`: - levelinghelp(); - break; - ///////////////////////////////// - default: - // message.reply(`UNKNOWN COMMAND! Try: \`${prefix}levelinghelp\``) - break; - } - return; - } - - - /** - * Anti double messages - * @info if the old message is the same as the message before: SKIP - */ - function anti_double_messages() { - const oldmessage = client.points.get(key, `oldmessage`); - if (oldmessage.toLowerCase() === message.content.toLowerCase().replace(/\s+/g, '')) { - return console.log("DOUPLICATED MESSAGE, no ranking points sorry!"); - } - client.points.set(key, message.content.toLowerCase().replace(/\s+/g, ''), `oldmessage`); //setting the new old message - } - anti_double_messages(); - - - - /** - * Giving Ranking Points - * @info adding a random number rounded, between 1 and 5 - */ - function Giving_Ranking_Points(thekey, maxnumber) { - let setglobalxpcounter = client.points.get(message.guild.id, "setglobalxpcounter") - if (!maxnumber) maxnumber = 5; - var randomnum = ( Math.floor(Math.random() * Number(maxnumber)) + 1 ) * setglobalxpcounter; - randomnum *= Number(client.points.get(key, `xpcounter`)); - randomnum = Number(Math.floor(randomnum)); - - const curPoints = client.points.get(thekey ? thekey : key, `points`); - const neededPoints = client.points.get(thekey ? thekey : key, `neededpoints`); - let leftpoints = neededPoints - curPoints; - - let toaddpoints = randomnum; - addingpoints(toaddpoints, leftpoints); - - function addingpoints(toaddpoints, leftpoints) { - if (toaddpoints >= leftpoints) { - client.points.set(thekey ? thekey : key, 0, `points`); //set points to 0 - client.points.inc(thekey ? thekey : key, `level`); //add 1 to level - //get current NEW level - const newLevel = client.points.get(thekey ? thekey : key, `level`); - /** - * HARDEN UP THE NEXT LEVEL UP - * @info The neededpoints shall raise always, when the newLevel is divideable by 4, at levels: 4,8,12,16,20,24,28,32,36,40,44,... - */ - if (newLevel % 4 === 0) client.points.math(thekey ? thekey : key, `+`, 100, `neededpoints`) - - const newneededPoints = client.points.get(thekey ? thekey : key, `neededpoints`); //get NEW needed Points - const newPoints = client.points.get(thekey ? thekey : key, `points`); //get current NEW points - - addingpoints(toaddpoints - leftpoints, newneededPoints); //Ofc there is still points left to add so... lets do it! - LEVELUP() //SEND LEVEL UP EMBED MESSAGE - } else { - client.points.math(thekey ? thekey : key, `+`, Number(toaddpoints), `points`) - } - } - } - Giving_Ranking_Points(); - - /** - * CURRENT DATA - * @info getting the current data for LEVEL, POINTS and NEEDEDPOINTS - */ - const curLevel = client.points.get(key, `level`); - const curPoints = client.points.get(key, `points`); - const neededPoints = client.points.get(key, `neededpoints`); - - - /** - * LEVELUP - * @info curPoints >= neededPoints | => - * @info if the current points are equal or more then the neededpoints the points shall reset and the level shall raise! - */ - function LEVELUP() { - const newLevel = client.points.get(key, `level`); //get current NEW level - const newPoints = client.points.get(key, `points`); //get current NEW points - const newneededPoints = client.points.get(key, `neededpoints`); //get NEW needed Points - - //THE INFORMATION EMBED - const embed = new Discord.MessageEmbed() - .setAuthor(`Ranking de: ${message.author.tag}`, message.member.user.displayAvatarURL({ - dynamic: true - })) - .setDescription(`Você subiu de nível para o nível: **\`${newLevel}\`**! (Pontos: \`${newPoints}\` / \`${newneededPoints}\`) `) - .setColor(embedcolor); - //send ping and embed message - message.reply(embed); - } - - - /** - * @param { FUNCTIONS AREA } - * @info FUNCTIONS - * @info Every command leads into a single function, which may or may not be able to work together! - */ - - /** - * @info this function "BLOCK" is for the USER RANK and for LEADERBOARD - */ - function rank(the_rankuser) { - /** - * GET the Rank User - * @info you can tag him - */ - try { - let rankuser = the_rankuser ? the_rankuser : message.mentions.users.first() ? message.mentions.users.first() : args[0] ? args[0].length == 18 ? message.guild.members.cache.get(args[0]).user : message.guild.members.cache.find(u => u.user.username.toLowerCase().includes(String(args[0]).toLowerCase())).user : message.author - if (!rankuser) return message.reply("ADICIONE UM RANKUSER!"); - // if(rankuser.bot) return message.reply("NO BOTS!"); - //Call the databasing function! - const key = `${message.guild.id}-${rankuser.id}`; - databasing(rankuser); - //do some databasing - const filtered = client.points.filter(p => p.guild === message.guild.id).array(); - const sorted = filtered.sort((a, b) => b.level - a.level || b.points - a.points); - const top10 = sorted.splice(0, message.guild.memberCount); - let i = 0; - //count server rank sometimes an error comes - for (const data of top10) { - try { - i++; - if (data.user === rankuser.id) break; //if its the right one then break it ;) - } catch { - i = `Erro de contagem de classificação`; - break; - } - } - //math - let curpoints = Number(client.points.get(key, `pontos`).toFixed(2)); - //math - let curnextlevel = Number(client.points.get(key, `neededpoints`).toFixed(2)); - //if not level == no rank - if (client.points.get(key, `nivel`) === undefined) i = `Sem classificação`; - //define the ranking card - const rank = new canvacord.Rank() - .setAvatar(rankuser.displayAvatarURL({ - dynamic: false, - format: 'png' - })) - .setCurrentXP(Number(curpoints.toFixed(2)), embedcolor) - .setRequiredXP(Number(curnextlevel.toFixed(2)), embedcolor) - .setStatus("online", true, 5) - .renderEmojis(true) - .setProgressBar(embedcolor, "COLOR") - .setRankColor(embedcolor, "COLOR") - .setLevelColor(embedcolor, "COLOR") - .setUsername(rankuser.username, embedcolor) - .setRank(Number(i), "Rank", true) - .setLevel(Number(client.points.get(key, `Nivel`)), "Nivel", true) - .setDiscriminator(rankuser.discriminator, embedcolor); - rank.build() - .then(data => { - //add rankcard to attachment - const attachment = new Discord.MessageAttachment(data, "RankCard.png"); - //define embed - const embed = new Discord.MessageEmbed() - .setTitle(`Ranking de: ${rankuser.username}`) - .setColor(embedcolor) - .setImage("attachment://RankCard.png") - .attachFiles(attachment) - //send that embed - message.channel.send(embed); - return; - }); - } catch (error) { - console.log(error.stack) - message.reply("ADICIONE UM RANKUSER!"); - } - } - - function leaderboardembed() { - const filtered = client.points.filter(p => p.guild === message.guild.id).array(); - let orilent; - const sorted = filtered.sort((a, b) => b.level - a.level || b.points - a.points); - let embeds = []; - let j = 0; - let maxnum = 50; - orilent = sorted.length; - if(isNaN(maxnum)) { - console.log("maximum_leaderboard NÃO É UM NÚMERO") - maxnum = 50;} - if (maxnum > sorted.length) - maxnum = sorted.length + (10 - Number(String(sorted.length/10).slice(2))); - if(maxnum < 10) maxnum = 10; - for (let i = 10; i <= maxnum; i += 10) { - const top = sorted.splice(0, 10); - const embed = new Discord.MessageEmbed() - .setTitle(`\`${message.guild.name}\` | Entre os melhores`) - .setTimestamp() - .setDescription(`Top ${i ["⏪", "⏹", "⏩"].includes(reaction.emoji.name) && message.author.id === user.id; - const collector = lbembed.createReactionCollector(filter, { - time: 60000 - }); - - collector.on("collect", async (reaction, user) => { - try { - if (reaction.emoji.name === "⏩") { - if (currentPage < embeds.length - 1) { - currentPage++; - lbembed.edit(`**Pagina atual - ${currentPage + 1}/${embeds.length}**`, embeds[currentPage]); - } - } else if (reaction.emoji.name === "⏪") { - if (currentPage !== 0) { - --currentPage; - lbembed.edit(`**Pagina atual - ${currentPage + 1}/${embeds.length}**`, embeds[currentPage]); - } - } else { - collector.stop(); - reaction.message.reactions.removeAll(); - } - await reaction.users.remove(message.author.id); - } catch (error) { - console.error(error); - } - }); - } - - function setxpcounter(){ - try { - /** - * GET the Rank User - * @info you can tag him - */ - if (!args[0]) return message.reply("ADICIONE UM RANKUSER!"); - let rankuser = message.mentions.users.first(); - if (!rankuser) return message.reply("ADICIONE UM RANKUSER!"); - // if(rankuser.bot) return message.reply("NO BOTS!"); - //Call the databasing function! - const key = `${message.guild.id}-${rankuser.id}`; - databasing(rankuser); - if (!args[1]) return message.reply("ADICIONE PONTOS PARA ADICIONAR! Uso: `setxpcounter @USER 2`"); - client.points.set(key, Number(args[1]), `xpcounter`); //set points to 0 - const embed = new Discord.MessageEmbed() - .setColor(embedcolor) - .setDescription(`Definido com sucesso o CONTADOR de XP para \`${args[1]}x\` for: \`${rankuser.tag}\``) - message.reply(embed); - } catch (error) { - console.log(error.stack) - message.reply("ADICIONE UM RANKUSER!"); - } - } - - function setglobalxpcounter(){ - try { - if (!args[0]) return message.reply("ADICIONE PONTOS PARA ADICIONAR! Uso: `setglobalxpcounter 2`"); - client.points.set(message.guild.id, Number(args[0]), `setglobalxpcounter`); //set points to 0 - const embed = new Discord.MessageEmbed() - .setColor(embedcolor) - .setDescription(`Definido com sucesso o CONTADOR DE XP GLOBAL para \`${args[0]}x\` para: \`${message.guild.name}\``) - message.reply(embed); - } catch { - } - } - /** - * @info this function "BLOCK" is for managing the POINTS, adding, setting and removing! PER USER - */ - function addpoints(amount) { - try { - /** - * GET the Rank User - * @info you can tag him - */ - if (!args[0]) return message.reply("ADICIONE UM RANKUSER!"); - let rankuser = message.mentions.users.first(); - if (!rankuser) return message.reply("ADICIONE UM RANKUSER!"); - // if(rankuser.bot) return message.reply("NO BOTS!"); - //Call the databasing function! - const key = `${message.guild.id}-${rankuser.id}`; - databasing(rankuser); - - const curPoints = client.points.get(key, `points`); - const neededPoints = client.points.get(key, `neededpoints`); - let leftpoints = neededPoints - curPoints; - if (!args[1] && !amount) return message.reply("ADICIONE PONTOS PARA ADICIONAR! Uso: `addpoints @USER 100`"); - if (!amount) amount = Number(args[1]); - if (amount < 0) removepoints(amount); - let toaddpoints = amount; - addingpoints(toaddpoints, leftpoints); - - function addingpoints(toaddpoints, leftpoints) { - if (toaddpoints >= leftpoints) { - client.points.set(key, 0, `points`); //set points to 0 - client.points.inc(key, `level`); //add 1 to level - //HARDING UP! - const newLevel = client.points.get(key, `level`); //get current NEW level - if (newLevel % 4 === 0) client.points.math(key, `+`, 100, `neededpoints`) - - const newneededPoints = client.points.get(key, `neededpoints`); //get NEW needed Points - const newPoints = client.points.get(key, `points`); //get current NEW points - - //THE INFORMATION EMBED - const embed = new Discord.MessageEmbed() - .setAuthor(`Ranking of: ${rankuser.tag}`, rankuser.displayAvatarURL({ - dynamic: true - })) - .setDescription(`Você subiu de nível para o nível: **\`${newLevel}\`**! (Pontos: \`${newPoints + toaddpoints - leftpoints}\` / \`${newneededPoints}\`) `) - .setColor(embedcolor); - //send ping and embed message only IF the adding will be completed! - if (toaddpoints - leftpoints < newneededPoints) - message.channel.send(rankuser, embed); - - addingpoints(toaddpoints - leftpoints, newneededPoints); //Ofc there is still points left to add so... lets do it! - } else { - client.points.math(key, `+`, Number(toaddpoints), `points`) - } - } - - - const embed = new Discord.MessageEmbed() - .setColor(embedcolor) - .setDescription(`Adicionado com sucesso \`${toaddpoints} pontos\` para: \`${rankuser.tag}\``) - message.reply(embed); - rank(rankuser); //also sending the rankcard - } catch (error) { - console.log(error.stack) - message.reply("ADICIONE UM RANKUSER!"); - } - } - - function setpoints() { - try { - /** - * GET the Rank User - * @info you can tag him - */ - if (!args[0]) return message.reply("ADICIONE UM RANKUSER!"); - let rankuser = message.mentions.users.first(); - if (!rankuser) return message.reply("ADICIONE UM RANKUSER!"); - // if(rankuser.bot) return message.reply("NO BOTS!"); - //Call the databasing function! - const key = `${message.guild.id}-${rankuser.id}`; - databasing(rankuser); - - let toaddpoints = Number(args[1]); - if (!args[1]) return message.reply("ADICIONE PONTOS PARA DEFINIR! Uso: `addpoints @USER 100`"); - if (Number(args[1]) < 0) args[1] = 0; - const neededPoints = client.points.get(key, `neededpoints`); - addingpoints(toaddpoints, neededPoints); - - function addingpoints(toaddpoints, neededPoints) { - if (toaddpoints >= neededPoints) { - client.points.set(key, 0, `points`); //set points to 0 - client.points.inc(key, `level`); //add 1 to level - //HARDING UP! - const newLevel = client.points.get(key, `level`); //get current NEW level - if (newLevel % 4 === 0) client.points.math(key, `+`, 100, `neededpoints`) - - const newneededPoints = client.points.get(key, `neededpoints`); //get NEW needed Points - const newPoints = client.points.get(key, `points`); //get current NEW points - - //THE INFORMATION EMBED - const embed = new Discord.MessageEmbed() - .setAuthor(`Ranking of: ${rankuser.tag}`, rankuser.displayAvatarURL({ - dynamic: true - })) - .setDescription(`Você subiu de nível para o nível: **\`${newLevel}\`**! (Points: \`${newPoints}\` / \`${newneededPoints}\`) `) - .setColor(embedcolor); - //send ping and embed message - message.channel.send(rankuser, embed); - - addingpoints(toaddpoints - neededPoints, newneededPoints); //Ofc there is still points left to add so... lets do it! - } else { - client.points.set(key, Number(toaddpoints), `points`) - } - } - - const embed = new Discord.MessageEmbed() - .setColor(embedcolor) - .setDescription(`Definido com sucesso \`${toaddpoints} Pontos\` para: \`${rankuser.tag}\``) - message.channel.send(embed); - rank(rankuser); //also sending the rankcard - } catch (error) { - console.log(error.stack) - message.reply("ADICIONE UM RANKUSER!"); - } - } - - function removepoints(amount) { - try { - /** - * GET the Rank User - * @info you can tag him - */ - if (!args[0]) return message.reply("ADICIONE UM RANKUSER!"); - let rankuser = message.mentions.users.first(); - if (!rankuser) return message.reply("ADICIONE UM RANKUSER!"); - // if(rankuser.bot) return message.reply("NO BOTS!"); - //Call the databasing function! - const key = `${message.guild.id}-${rankuser.id}`; - databasing(rankuser); - - const curPoints = client.points.get(key, `points`); - const neededPoints = client.points.get(key, `neededpoints`); - - if (!args[1] && !amount) return message.reply("ADICIONE PONTOS PARA REMOVER! Uso: `addpoints @USER 100`"); - if (!amount) amount = Number(args[1]); - if (amount < 0) addpoints(amount); - - removingpoints(amount, curPoints); - - function removingpoints(amount, curPoints) { - if (amount > curPoints) { - let removedpoints = amount - curPoints - 1; - client.points.set(key, neededPoints - 1, `points`); //set points to 0 - if (client.points.get(key, `level`) == 1) return message.reply("JÁ EM 0 PONTOS"); - client.points.dec(key, `level`); //remove 1 from level - //HARDING UP! - const newLevel = client.points.get(key, `level`); //get current NEW level - if ((newLevel + 1) % 4 === 0) { //if old level was divideable by 4 set neededpoints && points -100 - client.points.math(key, `-`, 100, `points`) - client.points.math(key, `-`, 100, `neededpoints`) - } - - const newneededPoints = client.points.get(key, `neededpoints`); //get NEW needed Points - const newPoints = client.points.get(key, `points`); //get current NEW points - - //THE INFORMATION EMBED - const embed = new Discord.MessageEmbed() - .setAuthor(`Classificação de: ${rankuser.tag}`, rankuser.displayAvatarURL({ - dynamic: true - })) - .setDescription(`Você desceu de nível para o nível: **\`${newLevel}\`**! (Pontos: \`${newPoints - amount + removedpoints}\` / \`${newneededPoints}\`) `) - .setColor(embedcolor); - //send ping and embed message only IF the removing will be completed! - if (amount - removedpoints < neededPoints) - message.channel.send(rankuser, embed); - - removingpoints(amount - removedpoints, newneededPoints); //Ofc there is still points left to add so... lets do it! - } else { - client.points.math(key, `-`, Number(amount), `points`) - } - } - - const embed = new Discord.MessageEmbed() - .setColor(embedcolor) - .setDescription(`Removido com sucesso \`${amount} Pontos\` de: \`${rankuser.tag}\``) - message.reply(embed); - rank(rankuser); //also sending the rankcard - } catch (error) { - console.log(error.stack) - message.reply("ADICIONE UM RANKUSER!"); - } - } - - /** - * @info this function "BLOCK" is for managing the LEVELS, adding, setting and removing! PER USER - */ - function addlevel() { - try { - /** - * GET the Rank User - * @info you can tag him - */ - if (!args[0]) return message.reply("ADICIONE UM RANKUSER!"); - let rankuser = message.mentions.users.first(); - if (!rankuser) return message.reply("ADICIONE UM RANKUSER!"); - // if(rankuser.bot) return message.reply("NO BOTS!"); - - //Call the databasing function! - const key = `${message.guild.id}-${rankuser.id}`; - databasing(rankuser); - let newLevel = client.points.get(key, `level`); - if (!args[1]) return message.reply("Por favor, adicione a quantidade de níveis que você deseja adicionar! Uso: addlevel @User 4"); - if (Number(args[1]) < 0) args[1] = 0; - for (let i = 0; i < Number(args[1]); i++) { - client.points.set(key, 0, `points`); //set points to 0 - client.points.inc(key, `level`); //add 1 to level - //HARDING UP! - newLevel = client.points.get(key, `level`); //get current NEW level - if (newLevel % 4 === 0) client.points.math(key, `+`, 100, `neededpoints`) - } - const newneededPoints = client.points.get(key, `neededpoints`); //get NEW needed Points - const newPoints = client.points.get(key, `points`); //get current NEW points - - //THE INFORMATION EMBED - const embed = new Discord.MessageEmbed() - .setAuthor(`Ranking de: ${rankuser.tag}`, rankuser.displayAvatarURL({ - dynamic: true - })) - .setDescription(`Você subiu de nível para o nível: **\`${newLevel}\`**! (Pontos: \`${newPoints}\` / \`${newneededPoints}\`) `) - .setColor(embedcolor); - message.channel.send(rankuser, embed); - rank(rankuser); //also sending the rankcard - const sssembed = new Discord.MessageEmbed() - .setColor(embedcolor) - .setDescription(`Adicionado com sucesso ${args[1]} Níveis para: \`${rankuser.tag}\``) - message.reply(sssembed); - } catch (error) { - console.log(error.stack) - message.reply("ADICIONE UM RANKUSER!"); - } - } - - function setlevel() { - try { - /** - * GET the Rank User - * @info you can tag him - */ - if (!args[0]) return message.reply("ADICIONE UM RANKUSER!"); - let rankuser = message.mentions.users.first(); - if (!rankuser) return message.reply("ADICIONE UM RANKUSER!"); - // if(rankuser.bot) return message.reply("NO BOTS!"); - - //Call the databasing function! - const key = `${message.guild.id}-${rankuser.id}`; - databasing(rankuser); - - if (!args[1]) return message.reply("Por favor, adicione a quantidade de níveis que você deseja definir! Uso: setlevel @User 3"); - if (Number(args[1]) < 1) args[1] = 1; - client.points.set(key, Number(args[1]), `level`); //set level to the wanted level - client.points.set(key, 0, `points`); //set the points to 0 - - let newLevel = client.points.get(key, `level`); //set level to the wanted level - let counter = Number(newLevel) / 4; - - client.points.set(key, 400, `neededpoints`) //set neededpoints to 0 for beeing sure - //add 100 for each divideable 4 - for (let i = 0; i < Math.floor(counter); i++) { - client.points.math(key, `+`, 100, `neededpoints`) - } - const newneededPoints = client.points.get(key, `neededpoints`); //get NEW needed Points - - const newPoints = client.points.get(key, `points`); //get current NEW points - //THE INFORMATION EMBED - const embed = new Discord.MessageEmbed() - .setAuthor(`Ranking de: ${rankuser.tag}`, rankuser.displayAvatarURL({ - dynamic: true - })) - .setDescription(`Você subiu de nível para o nível: **\`${newLevel}\`**! (Points: \`${newPoints}\` / \`${newneededPoints}\`) `) - .setColor(embedcolor); - message.channel.send(rankuser, embed); - rank(rankuser); //also sending the rankcard - const sssembed = new Discord.MessageEmbed() - .setColor(embedcolor) - .setDescription(`Definido com sucesso \`${rankuser.tag}\` para o nível: ${args[1]}`) - message.reply(sssembed); - } catch (error) { - console.log(error.stack) - message.reply("ADICIONE UM RANKUSER!"); - } - } - - function removelevel() { - try { - /** - * GET the Rank User - * @info you can tag him - */ - if (!args[0]) return message.reply("ADICIONE UM RANKUSER!"); - let rankuser = message.mentions.users.first(); - if (!rankuser) return message.reply("ADICIONE UM RANKUSER!"); - // if(rankuser.bot) return message.reply("NO BOTS!"); - - //Call the databasing function! - const key = `${message.guild.id}-${rankuser.id}`; - databasing(rankuser); - let newLevel = client.points.get(key, `level`); - if (!args[1]) return message.reply("Por favor, adicione a quantidade de níveis que você deseja remover! Uso: removelevel @User 4"); - if (Number(args[1]) < 0) args[1] = 0; - for (let i = 0; i < Number(args[1]); i++) { - client.points.set(key, 0, `points`); //set points to 0 - client.points.dec(key, `level`); //add 1 to level - //HARDING UP! - newLevel = client.points.get(key, `level`); //get current NEW level - if(newLevel < 1) client.points.set(key, 1 ,`level`); //if smaller then 1 set to 1 - } - snewLevel = client.points.get(key, `level`); //get current NEW level - let counter = Number(snewLevel) / 4; - - client.points.set(key, 400, `neededpoints`) //set neededpoints to 0 for beeing sure - //add 100 for each divideable 4 - for (let i = 0; i < Math.floor(counter); i++) { - client.points.math(key, `+`, 100, `neededpoints`) - } - const newneededPoints = client.points.get(key, `neededpoints`); //get NEW needed Points - const newPoints = client.points.get(key, `points`); //get current NEW points - - //THE INFORMATION EMBED - const embed = new Discord.MessageEmbed() - .setAuthor(`Ranking de: ${rankuser.tag}`, rankuser.displayAvatarURL({ - dynamic: true - })) - .setDescription(`Você desceu de nível para o nível: **\`${newLevel}\`**! (Pontos: \`${newPoints}\` / \`${newneededPoints}\`) `) - .setColor(embedcolor); - message.channel.send(rankuser, embed); - rank(rankuser); //also sending the rankcard - const sssembed = new Discord.MessageEmbed() - .setColor(embedcolor) - .setDescription(`Removido com sucesso \`${args[0]}\` Níveis de: \`${rankuser.tag}\``) - message.reply(sssembed); - } catch (error) { - console.log(error.stack) - message.reply("ADICIONE UM RANKUSER!"); - } - } - - /** - * @info This function is for ressetting a single USER - */ - function resetranking() { - try { - /** - * GET the Rank User - * @info you can tag him - */ - if (!args[0]) return message.reply("ADICIONE UM RANKUSER!"); - let rankuser = message.mentions.users.first(); - if (!rankuser) return message.reply("ADICIONE UM RANKUSER!"); - // if(rankuser.bot) return message.reply("NO BOTS!"); - - //Call the databasing function! - const key = `${message.guild.id}-${rankuser.id}`; - databasing(rankuser); - - client.points.set(key, 1, `level`); //set level to 0 - client.points.set(key, 0, `points`); //set the points to 0 - client.points.set(key, 400, `neededpoints`) //set neededpoints to 0 for beeing sure - client.points.set(key, "", `oldmessage`); //set old message to 0 - - //THE INFORMATION EMBED - const embed = new Discord.MessageEmbed() - .setAuthor(`Ranking of: ${rankuser.tag}`, rankuser.displayAvatarURL({ - dynamic: true - })) - .setDescription(`Você foi redefinido para o nível: **\`1\`**! (Pontos: \`0\` / \`400\`) `) - .setColor(embedcolor); - message.channel.send(rankuser, embed); - rank(rankuser); //also sending the rankcard - const sssembed = new Discord.MessageEmbed() - .setColor(embedcolor) - .setDescription(`Classificação redefinida com sucesso de: \`${rankuser.tag}\``) - message.reply(sssembed); - } catch (error) { - console.log(error.stack) - message.reply("ADICIONE UM RANKUSER!"); - } - } - - - /** - * @info this function "BLOCK" is for managing the POINTS for EVERYONE, like randompoints to EVERYONE, and registering EVERYONE and resetting EVERYONE - */ - function registerall() { - let allmembers = message.guild.members.cache.keyArray(); - for (let i = 0; i < allmembers.length; i++) { - //Call the databasing function! - let rankuser = message.guild.members.cache.get(allmembers[i]).user; - databasing(rankuser); - } - const embed = new Discord.MessageEmbed() - .setColor(embedcolor) - .setDescription(`Todos registrados com sucesso -`) - message.reply(embed); - } - - function resetrankingall() { - let allmembers = message.guild.members.cache.keyArray(); - for (let i = 0; i < allmembers.length; i++) { - let rankuser = message.guild.members.cache.get(allmembers[i]).user; - const key = `${message.guild.id}-${rankuser.id}`; - client.points.set(key, 1, `level`); //set level to 0 - client.points.set(key, 0, `points`); //set the points to 0 - client.points.set(key, 400, `neededpoints`) //set neededpoints to 0 for beeing sure - client.points.set(key, "", `oldmessage`); //set old message to 0 - } - const embed = new Discord.MessageEmbed() - .setColor(embedcolor) - .setDescription(`Reiniciou todos com sucesso`) - message.reply(embed); - } - - function addrandomall() { - let maxnum = 5; - if (args[0]) maxnum = Number(args[0]); - let allmembers = message.guild.members.cache.keyArray(); - for (let i = 0; i < allmembers.length; i++) { - //Call the databasing function! - let rankuser = message.guild.members.cache.get(allmembers[i]).user; - databasing(rankuser); - if(rankuser.bot) continue; - Giving_Ranking_Points(`${message.guild.id}-${rankuser.id}`, maxnum); - Giving_Ranking_Points(`${message.guild.id}-${message.author.id}`, maxnum); - } - const embed = new Discord.MessageEmbed() - .setColor(embedcolor) - .setDescription(`Adicionados ${args[0]} pontos com sucesso para todos`) - message.reply(embed); - } - - - - function levelinghelp() { - const embed = new Discord.MessageEmbed() - .setTitle(`\`${message.guild.name}\` | Comandos de Ranking`) - .setTimestamp() - .setDescription(`> **HELP:** \`${prefix}levelinghelp\``) - .setColor(embedcolor) - .addFields([{ - name: "`rank [@User]`", - value: ">>> *Mostra a classificação de um usuário*", - inline: true - }, - { - name: "`leaderboard`", - value: ">>> *Mostra o ranking dos 10 principais*", - inline: true - }, - { - name: "`setxpcounter <@USER> `", - value: ">>> *Altera a quantidade de quanto contar, x1, x2, x3, ...*", - inline: true - }, - - { - name: "`addpoints <@User> `", - value: ">>> *Adicione uma quantidade específica de pontos a um usuário*", - inline: true - }, - { - name: "`setpoints <@User> >> *Defina uma quantidade específica de pontos para um usuário*", - inline: true - }, - { - name: "`removepoints <@User> >> *Remover uma quantidade específica de pontos para um usuário*", - inline: true - }, - - { - name: "`addlevel <@User> >> *Adicionar uma quantidade específica de níveis a um usuário*", - inline: true - }, - { - name: "`setlevel <@User> >> *Defina uma quantidade específica de níveis para um usuário*", - inline: true - }, - { - name: "`removelevel <@User> >> *Remova uma quantidade específica de níveis para um usuário*", - inline: true - }, - - { - name: "`resetranking <@User>`", - value: ">>> *Redefine a classificação de um usuário*", - inline: true - }, - { - name: "`setglobalxpcounter `", - value: ">>> *Define o contador de XP global para esta guilda, padrão 1*", - inline: true - }, - { - name: "\u200b", - value: "\u200b", - inline: true - }, - - { - name: "`registerall`", - value: ">>> *Registre todos no servidor para o banco de dados*", - inline: true - }, - { - name: "`resetrankingall`", - value: ">>> *Redefinir a classificação de todos neste servidor*", - inline: true - }, - { - name: "`addrandomall`", - value: ">>> *Adicione uma quantidade aleatória de pontos para todos*", - inline: true - } - ]) - message.channel.send(embed) - } - - }) -} - - -//Coded by Tomato#6966! \ No newline at end of file diff --git a/watch.json b/watch.json deleted file mode 100644 index d968534..0000000 --- a/watch.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "install": { - "include": [ - "^package\\.json$", - "^\\.env$" - ] - }, - "restart": { - "exclude": [ - "^public/", - "^dist/" - ], - "include": [ - "\\.js$", - "\\.json" - ] - }, - "throttle": 900002 -} \ No newline at end of file