Tarefa
Faça um bot simples de IRC, que executa tarefas simples como cumprimentar usuário.
Detalhe
(Você pode ver este documento RFC .)
Escreva um programa completo que execute estes:
As entradas do programa
nicknameerealnamedo usuário.- Todo
nicknameerealnamequal formulário[A-Za-z0-9]+deve ser permitido, mas não é importante se outros são permitidos. Por exemplo, se o usuário quiser1234qwertycomonicknamee5319009comorealname, o programa deve usar esses nomes, mas não é importante se o programa pode usar^^☆Rick Astley☆^^(que inclui caracteres não alfabéticos e decimais) como (nicknameourealname) ou não, mesmo que esse nome possa ser rejeitado pelo servidor.
- Todo
As entradas
serverAddressdo programa do usuário.- A forma de
serverAddresséserverIP:serverPort, ondeserverIPé o endereço IP do servidor eserverPorté o número da porta do servidor.
- A forma de
O programa se conecta à porta
serverPortno servidor IRCserverIPe deve definir seu apelido comonicknamee nome real comorealnameenviandoUSER realname 0 * :realnameeNICK nickname.O programa insere um único
channelNameque não inclui#e se junta ao canal#channelName.Envie uma mensagem privada
Hello, world!para o#channelNamecanal assim:PRIVMSG #channelName :Hello, world!Então, o programa faz o seguinte:
R. Se alguém entrar, cumprimente-o dizendo
Hello, @!para#channelNameonde @ é o apelido dele.B. Se o programa for iniciado, tente entrar novamente.
C. Se uma pessoa for chutada ou banida, diga
POW HAHA.D. Se uma pessoa sai (
PARTouQUIT), digamosGoodbye, @!, onde @ é o apelido dela.E. Se alguém disser algum texto, incluindo
Turing testouturing test, digaI'm a human!.F. Se alguém disser algum texto incluindo
6*9, saia enviandoQUIT :42para o servidor.G. Se alguém disser algum texto, incluindo
all your base are belong to us(sem distinção entre maiúsculas e minúsculas), saia enviandoQUIT :What you say!para o servidor.H. Se alguém disser que algum texto anterior com espaço e atos acima não são executados pelo texto, diga a soma do código de todos os caracteres (exceto o primeiro espaço) no texto.
Se ocorrer um erro
Se ocorrer um erro (como erro de conexão ou inválido nickname), você poderá fazer o que deseja. Por exemplo, se ele nicknamejá estiver em uso, o programa poderá parar, obter uma novidade nicknamedo usuário ou alterar automaticamente nicknamee tentar novamente.
Restrição
O programa
- Não deve usar nenhuma função ou biblioteca interna destinada à criação de clientes / bot de IRC. ou seja, algo como bibliotecas de clientes IRC
- Deve solicitar o que será inserido, antes de receber uma entrada . Por exemplo, antes entradas
serverAddress, deve solicitarWrite the address of server:,serverIP:serverPort >,serverAddress >, ou algum texto que o usuário possa reconhecer. - Deve funcionar em vários servidores de IRC usando UTF-8. (ou seja, não para servidor único)
- As mensagens enviadas ao servidor não devem ser
NOTICE. (RFC 2812, 3.3.2. Aviso: A diferença entreNOTICEePRIVMSGé que as respostas automáticas NUNCA DEVEM ser enviadas em resposta a umaNOTICEmensagem.) - Deve enviar uma mensagem de onde a solicitação veio (
#channelNameounickname). - Deve
PONGquandoPINGed, é claro.
PS
Bem, acabei de fazer isso, porque não havia quebra-cabeças sobre o bot de IRC.
Editar
Depois de ler o comentário de @ dmckee, mudei a regra para escolher o vencedor.
Padrão
bonus= +0Se, de alguma forma, o programa puder se conectar a um canal (mesmo que não esteja
#channelName),bonus= 1Se o programa puder executar as etapas 1 a 5,
bonus* = 2.Para cada tarefa A ~ H na etapa 6, se o programa implementar,
bonus* =1.2.Para cada seis restrições, se o programa seguir isso,
bonus* =1.05.
e score = int(codelength/bonus).
Programa com pontuação mais baixa é vencedor. Se duas respostas tiverem a mesma pontuação, a resposta com mais votos vence.
Edição: Eu acho que 1.2e 1.05nas etapas 4 e 5 devem ser ajustadas um pouco maiores .. O que você acha disso?
O vencedor está decidido, no entanto, acho que houve poucas inscrições.
Qualquer pessoa ainda pode enviar o código ..: P