Giter Site home page Giter Site logo

lorittabot / loritta Goto Github PK

View Code? Open in Web Editor NEW
647.0 27.0 170.0 292.41 MB

💁 A multipurpose, multilanguage, customizable, modular, and very cute bot for Discord! ~Making your server more awesome~

Home Page: https://loritta.website/

License: GNU Affero General Public License v3.0

Kotlin 93.05% Roff 0.01% SCSS 5.77% HTML 0.97% JavaScript 0.01% Dockerfile 0.01% Shell 0.01% CSS 0.20%
kotlin bot discord discord-bot i18n fun moderation moderation-bot ktor memes

loritta's Introduction

✨ Loritta Morenitta ✨

All Discord servers have the same issues. Members want entertainment, moderators want automation... and you just want to rest.

Your life is too precious to spend your time with useless junk, let me take care of the boring parts while you have fun on your server!

With features to entertain and engage your members, moderation features to keep your server always safe and enjoyable, and with an easy way to set up but with an unmatched power of customization...

And everything thanks to a 16 year old girl trying to make the world a better place!

Making your server unique and extraordinary has never been easier!

🤔 How can I add her?

Discord Bots

If you want to use Loritta on your server without messing around with hosting stuff, you can add our public instance by clicking here! We recommend using the public instance, after all, more than 1 million guilds already use, trust and love her, so why not try it out?

💁 Contributing

If you want to contribute code or translations, check out our Contributing to Loritta guide!

🚀 Self-hosting

You can also host your own Loritta instance in your own machine! This is only for experienced users and for users that want to help the project by contributing code. We won't give support for people that are trying to self-host because we don't want to spend hours trying to troubleshoot other people issues that only happens on self-hosted instances, so you should at least know how to troubleshoot issues, if you find any.

To learn more about self-hosting, please read the How to self-host Loritta tutorial!

💸 Support Us

B-but I never thought that people would be willing to support... me, with money... loritta starts sobbing

If you want to help Loritta financially, please purchase things in Loritta's website! Anything purchased in Loritta's website help with our expenses and helps us to keep Loritta's dream of making the world a better place alive!


loritta's People

Contributors

arantesxyz avatar bit-man avatar blueslimee avatar cfj99 avatar danielagc avatar dependabot-support avatar dependabot[bot] avatar devpaulosouza avatar filipodev avatar guidsribeiro avatar hechfx avatar idjinn avatar jak3z avatar joaoesteves10 avatar juniordjjr avatar kaikecarlos avatar liberatemetumortis avatar lucasmellof avatar mrgaabriel avatar mrpowergamerbr avatar nightdavisao avatar okaabe avatar peterstark000 avatar srgaabriel avatar tisawesomeness avatar toscaro avatar vitorblog avatar yxqsnz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

loritta's Issues

Adicionar sistema de locale do usuário

Atualmente a Loritta apenas suporta que servidores definem qual é a linguagem que eles usam, mas também seria interessante que usuários pudessem colocar a "linguagem de preferência" deles, caso eles coloquem uma linguagem, a Loritta irá responder na linguagem de preferência que eles colocaram, em vez de usar a linguagem padrão do servidor.

:sparkles: | Adicionar Web API

O que seria isso?
Uma mini "API", que, por exemplo, você faria um GET request no api.loritta.website/v1/get-global-xp&user=:id e o site retornaria um JSON como

{
  "code": 0, // código 0: sucesso, 1: erro
  "xp": 12308
}

Também seria interessante como obter badges, sobremim, bg, etc.

Refazer o sistema de verificação de RSS Feeds

O sistema atual é mal feito comparado com a verificação de posts do Amino, sem contar que tem um delay colossal para verificar cada feed.

Seria melhor retirar o jsoup para verificações de RSS Feed e substituir por uma library feita para parsear RSS feeds.

Corrigir bug de detecção de invites

O que é esse bug?
Se você enviar em um chat com o sistema de invite da lori um invite como https://disCoRD.GG/servidor, ela não detecta, e o Discord detecta como um servidor e exibe o embed.

Ultilizando as velhas ``

Como proteção para não ultilizarem everyone a Loritta tira as dos argumentos do usuario que executou o comando antes de executa-lo Então se o usuario ultilizar +serverinfo por exemplo, ou em qualquer comando que precise de um argumento para funcionar, ela vai dar um erro

Adicionar "+ban [...] | s"

Assim como o | force pune imediatamente, mas do jeito normal, o | s irá punir imediatamente, mas no modo silencioso

Refazer o website da Loritta usando kotlinx.html

Atualmente o website da Lori é feito usando o Pebble Template Engine, enquanto ele é muito bom, eu acho que o Kotlin HTML DSL é extremamente melhor, e ainda ajudaria a não depender tanto assim de códigos em JavaScript (deixando o website da Lori mais leve!)

Sistema de economia como funcionar! (Sugestão)

Sugestão:

No sistema de economia que já há uma página feita na Loritta canary ter opção ao criar um item na logia dar roles pode ser permanente ou temporário (Dica incluir opções de tempo tanto personalizado[Escrevendo "10 minutos"] ou tempos em um rótulo[Opções em um caixinha com tipo "1 Dia, 5 Dias, 1 Mês"] isso se os tempos longos forem possível na Loritta)

Corrigir bug no "+channelinfo"

Pelo visto na última atualizaçãao do JDA, se o canal não tiver um tópico, o TextChannel#getTopic() retorna um valor nulo e isto dá erro.

🌍 Feedback e novidades

  • Adicionar a opção no painel de "Anunciar minhas novidades em um canal', a Loritta iria pegar as novidades atuais + sua versão da atualização e postar em um canal determinado pela pessoa. Isso iria ser útil para demonstrar mais feedback e interesse da comunidade que usa a Lori, uma pessoa que não acompanha o servidor de suporte nunca iria saber que o sistema de loja foi lançado por exemplo.

Auto cargo por Reaction Message

Gostaria que a Loritta tivesse um sistema de auto cargo por Reaction Message, igual do BOT (Reaction Role)
ID do BOT caso queira add no servidor por ID , pra verificar o funcionamento dele: 441751906428256277
image

Sugestão: sistema de registro

Criar um sistema de registramento para servers e botar uma data-base para saber quem registrou e saber a pessoa que foi registrada, para fazer um ranking das pessoas que tem o cargo registrador

Banimentos temporários (Sugestão)

Descrição:

Sistema de banimento temporário funciona obviamente ban programando um tempo até que o punido possa entrar novamente

Como funciona:

Maneira 1:

Usando o +ban (menção do usuário ou ID do usuario) (Razão) a loritta irá aparecer as quelas opções punir silenciosamente ou mandado via DM e canal de punição porém ter mais uma opção caso a pessoa deseje punir temporariamente o emoji que recomendo e este ":clock4:" e em seguida Lori faca a mesma coisa que tem no +mute perguntar quanto tempo da Quelé mesmo jeito é em seguida perguntar novamente se e silenciosamente ou não.

Maneira 2 (Acredito que seja o melhor):

Usando o +ban Lori já adiciona uma mensagem pedindo se é permanente ou temporário o ícone para permanente sugiro este ":no_good:" escolho este porque parece que está falando "não não sem tempo!" E o temporário o mesmo da Maneira 1 ":clock4:".

Error on ytmp3 command!

Well, Loritta says "Use JsonReader.setLenient(true) to accept malformed JSON at line 1 column 7 path $"
Thanks!

Adicionar Giveaways/Sorteios

Adicionar um sistema de giveaways, customizável pela a pessoa que executou o comando.

Como irá funcionar?

Ao digitar +giveaway, a Loritta irá fazer algumas perguntas sobre o giveaway, como...

  1. Qual será o nome do giveaway?
  2. Qual será a descrição do giveaway?
  3. Qual canal irá acontecer o giveaway?
  4. O giveaway irá durar até quando?
  5. Quantos usuários irão vencer o giveaway?
  6. Qual emoji será usado nas reações do giveaway

Após acabar o giveaway, a Loritta irá anunciar quem ganhou o sorteio

Inverter a permissão de "Ignorar Comandos"

O jeito atual é complicado, já que muitas pessoas ativam as permissões o painel dela, incluindo a de "Ignorar Comandos"

Sem contar que o conceito dela está totalmente errado, se é para ignorar comandos, ela não deveria ser uma permissão.

Sistema de playlists criadas pelo usuário

Permitir usuários criarem uma playlist própria na Loritta.

Como irá funcionar?

Ver playlists

Sua playlist: +userplaylists
Playlists de outros usuários: +userplaylists @XinXyla#0001

Irá mostrar todas as playlists criadas pelo usuário, para ver as músicas na playlist, o usuário poderá clicar na reação correspondente no +userplaylists ou usar +userplaylists @XinXyla#0001 funk

Tocar playlists

Sua playlist: +tocaruserplaylists funk
Playlists de outros usuários: +tocaruserplaylists @XinXyla#0001 funk

Seria apenas possível tocar uma playlist caso o servidor tenha a opção de tocar playlists no painel ativada!

Configurar sua playlist

Ela será configurada pelo painel da Loritta, igual como as "Playlist da DJ Loritta" são criadas.

Web Profile

As playlists criadas serão mostradas no perfil online no website da Loritta: https://loritta.website/br/profile/123170274651668480

Também seria possível que usuários clonem playlists de outros usuários e modifiquem ela.

Sistema de RPG (sugestão)

já vi vários bots que tem um sistema de rpg que pode ser customizável pelos usuários do bot.

A minha ideia basicamente é adicionar um sistema de RPG na loritta totalmente customizável (desde do nome da moeda até os monstros e lugares) na dashboard no site dela, onde poderá gerenciar tudo desde itens até as fichas de personagens criadas pelo pessoal

os usuários sem permissão de gerenciar o servidor podem:

  • criar fichas limitadas
  • trocar coisas (tais como cargos)
  • comprar e vender coisas na sua loja
  • abrir caixas
  • batalhar com pessoas ou monstros

Os usuários com permissão de gerenciar o servidor podem:

  • editar monstros, efeitos, lugares, caixas, o nome da moeda e etc
  • colocar roles na "loja oficial" do servidor
  • mudar valores de xp de personagens e usuários
  • mudar o valor do daily de moedas do server (não dos sonhos, sim da moeda do servidor)
  • gerenciar batalhas (por exemplo fazendo com que o monstro fique 2 vezes mais fraco)
    e mais coisas (eu ainda estou pensando)

AVISO:
O sistema de RPG pode ser demorado (e talvez difícil) para se fazer por causa da quantidade de coisa que devem ser feitas.

Eventos | bom dia e cia

  • Adicionar mais "eventos" ao chat, como o próprio Bom dia e cia.

• Um dos eventos poderia ser desembralhar palavras, como oque tinha no Sparkly. [Exemplo: eporw, quem digita a palavra primeiro no chat irá ganhar x alguma coisa]

• Charadas | Colocar algumas charadas da internet ou até mesmo piada, quem responder mais rápido leva.

■ Os prêmios atualmente poderiam ser sonhos, porém poderia ter uma minima chance de cair uma key da Loritta. É meio absurdo porém obviamente seria limitado e não seria uma chance tipo "wow, participei de 10 insira aqui e ganhei 2 keys" (Seria bastante legal e iria incentivar mais o uso do módulo e da participação)

Corrigir erro do +clear

O +clear tem dado alguns erros sabendo que o limite é de 2 semanas e aparentemente só está apagando mensagens de 3 dias.
image

Timers

Adicionar sistema de timers.

Como irá funcionar?

Será possível configurar mensagens automáticas no painel da Loritta, sendo possível configurar...

  1. Quais mensagens serão enviadas no timer
  • Deverá ser possível configurar se serão enviadas em ordem aleatória ou sequêncial, caso tenha mais de uma mensagem configurada
  1. Em qual canal será enviado a mensagem automática
  2. A cada quanto tempo a mensagem será enviada?
  • Será permitido configurar se a mensagem só será enviada em um dia específico, ou até dias da semana específicos.

By:@Whiten#1046 Sistema de registro

Acredito que seria uma ideia extremamente interessante se a Loritta tivese um sistema de mensagem privada (embed) para pessoas de um certo cargo, como por exemplo; Eu obtenho o cargo Gamer em meu servidor, então eu irei requisitar para que a Loritta mande uma mensagem para os demais membros dentro desse mesmo cargo, avisando que teremos um evento de Gamers, o comando poderia ser algo como [ +share @gamer (mensagem) (cor da embed) ] , eu particularmente gostei muito e adoraria se essa opção fosse adicionada.
by:@whiten#1046

Sugestão - Comandos personalizados

Ter vários tipos de gatilhos para executar respostas e ações atravez de variáveis

Tipos de gatilhos:

Prefixo
Começa com
Contém
Contém exatamente
Regex

REGEX

| Separador
(abc) Qualquer palavra correspondida dentro de ()
[abc] Corresponde a qualquer unidade contida nos colchetes
{abc} Corresponde a qualquer coisa que não esteja entre as chaves

Exemplos de Regex:

(registrar|register|cadastrar)
[aeiou]{http} reposta: proibido conversar aqui, so pode postar imagens e links
{registrar|register|cadastrar} resposta: somente use as palavras chave

Variáveis

{user} | Mostra o nome do usuário que provocou a ação
{@user} | Menciona o usuário que provocou a ação
{user-created} | Mostra a data e hora que o usuário criou a conta
{user-joined} | Mostra a data e hora que o usuário entrou no servidor
{nickname} | Mostra o nome do usuário no servidor (caso ele tenha mudado o apelido dele no servidor, irá aparecer o apelido dele, em vez do nome original)
{user-discriminator} | Mostra o discriminator do usuário que provocou a ação
{user-id} | Mostra o ID do usuário que provocou a ação
{user-avatar-url} | Mostra a URL do avatar do usuário
{guild} | Mostra o nome do servidor
{guild-size} | Mostra a quantidade de membros no servidor
{guild-id} | Mostra o ID do servidor
{guild-icon} | Mostra a URL da imagem do servidor
{guild-created} | Mostra a data e hora que o servidor foi criado
{guild-region} | Mostra a região do servidor
{channel-id} | Mostra a ID do canal atual que foi executado o comando
{channel-name} | Mostra o nome do canal atual que foi executado o comando
{channel-mention} | menciona o canal atual
{time} | Hora atual em PM/AM
{time24} | Hora atual
{date} | Data atual
{hora} | Hora atual em PM/AM no formato BR
{hora24} | Hora atual no formato BR
{data} | Data atual no formato BR
{delete} | Deleta o gatilho do comando
{delete-response15} | Deleta a resposta 15 segundos depois
{delete-response30} | Deleta a resposta 30 segundos depois
{delete-response45} | Deleta a resposta 45 segundos depois
{delete-response60} | Deleta a resposta 60 segundos depois
{silent} | Deleta o relatorio do comando
$N | Retorna um argumento, exemplos: ($1) ($4+) esse retorno funciona dentro de outros comandos como por exemplo {+role $1 +<@&ID DO CARGO>}
{+comando} | Executa comandos existentes na loritta ou cria fusão entre eles
{require: <@&ID DO CARGO>} | Requer um cargo para executar o comando
{require:<#ID DO CANAL DE TEXTO>} | Requer um canal de texto especifico para executar o comando
{not:<@&ID DO CARGO>} | Faz o comando não executar para quem possui o cargo (Para evitar conflitos este comando tem prioridade)
{not:<#ID DO CANAL DE TEXTO>} | Faz o comando não executar em determinado canal de texto (Para evitar conflitos este comando tem prioridade)
{respond:<#ID DO CANAL DE TEXTO>} | Envia a resposta para um canal de texto especifico
{dm} | Envia a resposta no PV
{dm:<@ID DO USUARIO>} | Envia a resposta no PV de outro usuario também usando o retorno de argumento, exemplo: {dm:$1}
{+role {@user} +<@&ID DO CARGO>, +<@&ID DO CARGO>, ...} | Adiciona o usuario em um ou mais cargos
{+role {@user} -<@&ID DO CARGO>, -<@&ID DO CARGO>, ...} | Remove o usuario de um ou mais cargos
{+role {@user} -<@&ID DO CARGO>, +<@&ID DO CARGO>, ...}
{+rolename} | Renomeia o cargo, exemplo: {+rolename <@&ID DO CARGO>, $1+ }
{+rolecolor} | Altera a cor do cargo, exemplo {+rolecolor <@&ID DO CARGO>, $1+ }
{+delrole} | Exclui um cargo
{+addrole} | Cria um cargo
{+mentionrole} | Alterna para mencionar ou não o cargo
{vote-count} | Mostra quantos votos o usuário que votou possui
{lsl-url} | Mostra a url para votar no servidor
{reaction:} | Adiciona uma reação na mensagem de gatilho
{reaction-response:} | Adiciona uma ou mais reações na mensagem de resposta, exemplo {reaction-response:pandinha;koala;👍;👎}
{reaction-role} | Adiciona/Remove um ou mais cargos usando uma reação especifica, exemplo {reaction-role :koalinha: +<@&ID DO CARGO>, -<@&ID DO CARGO>}
{embed} | Transforma a resposta em embed - MrPowerGamerBR eu não sei como isso funcionaria então vou dar um exemplo tosco que poderia ser simples de montar, pelo menos eu acho...

{embed:
(content: conteudo)
(color: conteudo)
(name: exemplo {@user})
(title: conteudo)
(description: conteudo)
(author-name: conteudo)
(author-icon_url: exemplo {user-avatar-url})
(image-url: exemplo $1)
(thumbnail-url: exemplo {user-avatar-url}")
(footer-icon_url: conteudo)
(footer-text: exemplo {user-id} | {data} - {hora})
}

Opções de Cooldown

cooldown padrão da loritta
cooldown do usuário
cooldown do servidor

comandos personalizados

Sistema de cargos temporários

Cargos temporários já existem no comando de +mute, mas seria melhor fazer algo mais "genérico" para que outros módulos e comandos possam criar e gerenciar cargos temporários.

Como irá funcionar?

Adicionar Cargos

+cargotemp add @nomedocargo <@172782058396057602> <@!123170274651668480>

Vai adicionar 1 usuário ou mais no cargo e depois do tempo definido irá remover automaticamente o usuário do cargo, semelhante ao comando do mute, mas este você vai definir qual cargo.

Retirar Cargos

+cargotemp remover @nomedocargo <@172782058396057602> <@!123170274651668480>
Vai remover 1 usuário ou mais do cargo e depois do tempo definido vai adiciona-lós no cargo automaticamente

Formato de Cargos

@nome do cargo: O mais "user friendly", mas a maioria dos cargos não possuem as notificações de cargos ativas.
nome do cargo: O problema vai ser os espaços, já que é possível adicionar múltiplos cargos no mesmo comando.
ID do cargo: O jeito mais simples, mas o menos prático para usuários, é possível pegar o ID de um cargo utilizando +roleid

Exemplo de verificação de vários cargos de diferente tipos...

// Cargos deverão ser processados dependendo se o cara marcou o cargo ou só colocou parte do nome
val roles = mutableListOf<Role>()

run {
	val rolesSplit = rolesStr.split(", ")
	val names = mutableListOf<String>()

	for (part in rolesSplit) {
		if (part.startsWith("<@&") && part.endsWith(">")) {
			roles.add(context.guild.getRoleById(part.substring(3, part.length - 1)))
			continue
		}
		if (part.isValidSnowflake()) {
			roles.add(context.guild.getRoleById(part))
			continue
		}
		names += part
	}

	for (name in names) {
		if (name.isNotEmpty())
			roles.addAll(context.guild.getRolesByName(name, true))
	}
}

Permissão para usar comandos

As vezes é interessante que somente membros específicos utilizem certos comandos, seria interessante na configuração dela pudéssemos dizer quais cargos poderiam ou não utilizar tais comandos.

Comando de ''raking de invite'' ou seja um comando que informa quem compartilhou link do seu servidor

poderia ter um [comando de ''raking de invite'' ou seja um comando que informa quem compartilhou link do seu servidor]

(https://cdn.discordapp.com/attachments/359139508681310212/484458734471479314/codigo.png)
e quantas pessoas entrou naquele link de tal usuário, exemplo: Ao executar o comando +invitegeral informa todos os membros que compartilhou link do seu servidor: @!StarlineBR#9748 compartilhou o link do servidor, no canal de ``#games`` , data da criacao : ``DATA``, numero de acesso ``NUMERO``.... ( aii quando o DONO nao quiser que tal pessoa possua um invite do servidor ele usa o comando +inviteoff + @Usuario aii o convite sera bloqueado por tal usuario ou revogado...

Comando para ID do Emoji

Poderia ter um comando que mostra-se o ID do Emoji que coloca-se, Exemplo:
"+emoji :lul:"

Loritta: ID Do Emoji

Build Failure

[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.968 s
[INFO] Finished at: 2018-04-14T09:24:09-03:00
[INFO] Final Memory: 9M/31M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project Loritta: Could not resolve dependencies for project net.pocketdreams.loritta:Loritta:jar:0.0.1-SNAPSHOT: Failure to find com.whirvis:jraknet:jar:2.9.1 in https://dl.bintray.com/kotlin/kotlin-dev/ was cached in the local repository, resolution will not be reattempted until the update interval of kotlin-dev has elapsed or updates are forced -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException

Adicionar suporte a embeds em YAML

Em espera até #39 ser implementado.

content: "{@user}"
embed:
  color: -9270822
  title: "👋 Bem-vindo(a)!"
  description: Olá {@user}, espero que você se divirta no meu servidor! <:loritta:331179879582269451>
  author:
    name: "{user}#{user-discriminator}"
    icon_url: "{user-avatar-url}"
  thumbnail:
    url: "{user-avatar-url}"
  footer:
    text: 'ID do usuário: {user-id}'

Cachorro da Loritta 🐶

Fazer um +cachorro e nôs falavamos com o cachorro da Loritta e também poderiamos dar sugestões para frases dele.

💡 Simples porém útil!

• Adicionar +addrole [Menção/ID/Nome] [Pessoa/Bot]
• Adicionar +removerole [Menção/ID/Nome] [Pessoa/Bot]
• Adicionar +timerole [Tempo] [Cargo] [Pessoa]

Suporte a twitch

Acho que seria legal se a loritta avisa-se quanto um canal especifico esta em live.

Sitema de musica compativel com spotify igual do (MARV BOT)

Queria que a Loritta tivesse um sitema de musica compativel com spotify, se caso for muito dificil colocar nele como versao premium pra incentivar as doações

ID do BOT caso queira add por ID no seu servidor pra analisar o sistema dele: 234395307759108106

image

Alterar a API para o +mcstatus para links diretos

Depender de uma API third-party para pegar o status dos servidores de Minecraft para quê quando se pode pegar diretamente da Mojango?

emojo

Eis o nome dos servidores e os seus endpoints:

[
  {"name":"Minecraft.net","url":"https://minecraft.net/"},
  {"name":"Mojang accounts website","url":"https://account.mojang.com/"},
  {"name":"Authentication service","url":"https://authserver.mojang.com/"},
  {"name":"Multiplayer session service","url":"https://sessionserver.mojang.com/"},
  {"name":"Minecraft skins","url":"https://textures.minecraft.net/"},
  {"name":"Mojang API","url":"https://api.mojang.com/"},
  {"name":"Mojang website","url":"https://mojang.com/"}
]

Portar o sistema de comandos do DreamCore para a Loritta

https://github.com/PerfectDreams/DreamCore/tree/master/src/main/java/net/perfectdreams/dreamcore/utils/commands

Exemplo de comando feito usando a API do DreamCore

package net.perfectdreams.dreamlobbyfun.commands

import com.xxmicloxx.NoteBlockAPI.NBSDecoder
import com.xxmicloxx.NoteBlockAPI.RadioSongPlayer
import com.xxmicloxx.NoteBlockAPI.SoundCategory
import net.perfectdreams.dreamcore.utils.DreamUtils
import net.perfectdreams.dreamcore.utils.commands.AbstractCommand
import net.perfectdreams.dreamcore.utils.commands.annotation.Subcommand
import net.perfectdreams.dreamlobbyfun.DreamLobbyFun
import net.perfectdreams.dreamlobbyfun.utils.ServerCitizen
import org.bukkit.Bukkit
import org.bukkit.entity.Player
import java.io.File

class ConfigureServerCommand(val m: DreamLobbyFun) : AbstractCommand("configureserver", permission = "dreamlobby.configureserver") {
	@Subcommand(["create"])
	fun createServer(player: Player, citizenId: Int, serverName: String, fancyServerName: Array<String>) {
		val serverCitizen = ServerCitizen(citizenId.toInt(), serverName, fancyServerName.joinToString(" "))

		m.serverCitizens.add(serverCitizen)

		player.sendMessage("§aServidor §e${fancyServerName}§a (§e$serverName§a) foi configurado no NPC §e$citizenId§a com sucesso!")

		m.serverCitizensFile.writeText(DreamUtils.gson.toJson(m.serverCitizens))
	}

	@Subcommand(["delete"])
	fun deleteServer(player: Player, citizenId: Int) {
		val serverCitizen = m.serverCitizens.firstOrNull { it.citizenId == citizenId.toInt() }

		if (serverCitizen == null) {
			player.sendMessage("§cNPC §e${citizenId}§c não possui nenhum servidor associado!")
			return
		}

		serverCitizen.clickHereHologram?.despawn()
		serverCitizen.serverNameHologram?.despawn()

		m.serverCitizens.remove(serverCitizen)
		player.sendMessage("§aServidor §e${serverCitizen.fancyServerName}§a (§e$serverCitizen.serverName§a) teve NPC §e$citizenId§a removido com sucesso!")

		m.serverCitizensFile.writeText(DreamUtils.gson.toJson(m.serverCitizens))
	}

	@Subcommand(["skip"])
	fun skipSong(player: Player) {
		// Ao remover todos os players do song player atual (e se auto destroy estiver como true), a música será parada, o que irá causar um
		// SongEndEvent ser ativado!
		m.songPlayer?.playerList?.mapNotNull { Bukkit.getPlayer(it) }?.forEach {
			m.songPlayer?.removePlayer(it)
		}
		player.sendMessage("§aTodos os players do Song Player atual foram removidos!")
	}

	@Subcommand(["playsong"])
	fun playSong(player: Player, songName: String) {
		m.songPlayer?.destroy()

		val songFile = File(m.songsFolder, songName)

		if (!songFile.exists()) {
			player.sendMessage("§cMúsica não existe!")
			return
		}

		val song = NBSDecoder.parse(songFile)
		val newSongPlayer = RadioSongPlayer(song, SoundCategory.RECORDS)
		m.logger.info("Forçando nova música! ${newSongPlayer.song.path}")
		newSongPlayer.autoDestroy = true
		Bukkit.getOnlinePlayers().forEach {
			newSongPlayer.addPlayer(it)
		}
		newSongPlayer.isPlaying = true
		m.songPlayer = newSongPlayer

		player.sendMessage("§aMúsica alterada!")
	}

	@Subcommand(["reloadsongs"])
	fun reloadSongs(player: Player) {
		m.loadSongs()
		player.sendMessage("§aMúsicas recarregadas com sucesso!")
	}
}

Sistema de moderação automática

  • Anti Spam
  • Anti Flood
  • Flood são mensagens enviadas em sequência rapidamente
  • Attachment Flood também é considerado Flood
  • Anti Caps
  • Anti (Self) Embed
  • Anti Palavrões
  • Colocar uma lista padrão de palavrões
  • Detectar palavrões escritos como caralh0 e variantes
  • Anti Mass Mention
  • Anti Invite Links
  • Anti Links
  • Permitir colocar links em blacklist/whitelist

Todos os sistemas de moderação automática deverão permitir customizações extensas, já que nenhum servidor é igual, por exemplo...
image

Adicionar "+punishmentlist"

Adicionar um comando semelhante ao "+warnlist"

Como irá funcionar?

Funcionará exatamente como o "+warnlist", só que desta vez guardando as punições como mute, kick, softban, etc

Adicionar mais tokens

Adicionar mais tokens (Como {guildsize} e {@user}).

Quais tokens?
- {guild-icon-url} - Retorna o URL do ícone da guild
- {lsl-url} - Retorna a URL da página do servidor da Loritta Servers List (Se tiver vanity url, exibir ela)
- {promoted-count} - Retorna quantas vezes um usuário já promoveu a guild do contexto.

Progresso

  • {lsl-url}

  • {promoted-count}

  • {guild-icon-url}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.