Avatar billede plato Juniormester
18. august 2017 - 20:54 Der er 10 kommentarer

Ny til Python, mangler hjælp til store/små bokstaver og if under if.

Hejsa alle

Jeg er fuldstændig grøn til Python og kunne godt bruge lidt hjælp. Jeg er i gang med en lille bot til min IRC kanel, og den virker indtil videre rigtig simpelt.

1. spørgsmål:
I nedenstående kode kan I se, at man f.eks kan skrive !Hej, !Botnak ircnick eller !MrMusic.
Men det skal skrives fuldstændig som angivet i koden. Hvordan gør man så, det er ligemeget om man skriver mRmUsic eller MrMusic? Altså så den er ligeglad med store og små bokstaver.

2. spørgsmål
Hvordan laver jeg en IF statement under elif:
        elif data.find(':!Botnak') !=-1:
                t = data.split(':!Botnak')
                to = t[1].strip()
                ircMessage(str(to)+ ' er en Botnak'+'!', mainchannel)

Jeg vil gerne at hvis man skriver !Botnak MITNICK - så skal den i stedet for ircMessage(str(to)+ ' er en Botnak'+'!', mainchannel) skrive ircMessage('MITNICK er ikke en botnak')

Koden (Hvis ikke det er nok, kan jeg godt poste resten ovenover dette)
while True:
    data = irc.recv(4096)
    print data
    try:
        if "PING" in data:
            rawSend("PONG")

        if "You have not registered" in data:
            Initialize()

        if "!testcmd" in data:
            ircMessage("tester", mainchannel)

        elif "PRIVMSG "+mainchannel+" :!Hej" in data:
            ircMessageMe(" siger hej til alle.", mainchannel)

        elif data.find(':!Botnak') !=-1:
                t = data.split(':!Botnak')
                to = t[1].strip()
                ircMessage(str(to)+ ' er en Botnak'+'!', mainchannel)

        elif data.find(':!MrMusic') !=-1:
                t = data.split(':!MrMusic')
                to = t[1].strip()
                ircMessageMe('MrMusic synes ' +str(to)+ ' er en cool person'+'....', mainchannel)
    except:
        continue
Avatar billede plato Juniormester
18. august 2017 - 22:54 #1
Spm 2 har jeg selv løst.
Avatar billede jakobdo Ekspert
18. august 2017 - 23:10 #2
1: Kig på lower()
Hvis du f.eks. har: BoTnAk i en var, lad os sige:

input = "BoTnAk"

Og du vil sammenligne med:

botnak = "botnak"
Så vil:

if input.lower() == botnak:
  print("Jeg er en botnak")
Avatar billede plato Juniormester
19. august 2017 - 00:41 #3
Jeg må indrømme jeg kommer til kort. Jeg har prøvet mange ting nu. Det lykkedes ikke rigtig. Kan du evt. guide mig lidt i forhold til ovenstående kode.

Er det f.eks
elif data.find(':!Botnak').lower() !=-1:
Avatar billede jakobdo Ekspert
19. august 2017 - 09:31 #4
Nu kender jeg jo desværre ikke hele din kode, men hvis data, er den data du får fra brugeren, altså når de indtaster inputs...

Så kunne du lave:

lower_data = data.lower() # Laver alt tekst til lowercase
if '!botnak' in lower_data: # Tjekker om !botnak er i teksten fra brugeren
  print "Brugeren skrev !botnak i en kommando"
Avatar billede plato Juniormester
19. august 2017 - 12:02 #5
Du får lige hele koden, er lidt i tvivl om hvor det skal indsættes. Tak for din hjælp.

#! /usr/bin/env python

import os
import ssl
import sys
import bs4
import time
import json
from time import sleep
import socket
import random
import urllib2
import requests
import threading
import subprocess


# Setup the IRC connection
irc = socket.socket()
irc = ssl.wrap_socket(irc)


# Edit these values for your server
ircServer = "****************"
ircSSLPort = 7000
ircNick = "MrMusic"
ircPassword = '************'

mainchannel = '#**************'

def rawSend(data):
        irc.send(data + "\r\n")

def ircMessage(msg, channel):
        rawSend("PRIVMSG " + channel + " :" + msg)

def ircMessageMe(msg, channel):
        rawSend("PRIVMSG " + channel + " :\x01ACTION " + msg + "\x01\r\n")

def ircJoin(channel):
        rawSend("JOIN " + channel)

def Initialize():
        rawSend("USER %s %s %s :%s" % (ircNick,ircNick,ircNick,ircNick))
        rawSend("NICK " + ircNick)
        rawSend("PRIVMSG NICKSERV IDENTIFY " + ircPassword)
        ircJoin(mainchannel)

irc.connect((ircServer, ircSSLPort))
Initialize()

while True:
    data = irc.recv(4096)
    print data
    try:
        if "PING" in data:
            rawSend("PONG")

        if "You have not registered" in data:
            Initialize()

        if "!kaff" in data:
                        list = ['ikke noget med at spilde', 'kommer med en underkop.. Ingen kaffepletter tak', 'har du gemt lidt kaffe til mig', 'skal jeg hente noget sukker eller floede']
                        randomitem = random.choice(list)
            ircMessageMe(' kigger... ' +randomitem, mainchannel) ; sleep(3)

                elif data.find(':!morn') !=-1:
                        t = data.split(':!morn')
                        to = t[1].strip()
                        ircMessageMe(' siger ogsaa godmorgen', mainchannel) ; sleep(3)

        elif "PRIVMSG "+mainchannel+" :!Hej" in data:
            ircMessageMe(" siger hej til alle.", mainchannel)

                elif data.find(':!Botnak') !=-1:
                        t = data.split(':!Botnak')
                        to = t[1].strip()
                        if str(to) == 'BASEMi':
                                ircMessageMe('mener ikke ' +str(to)+ ' er en botnakke'+'!', mainchannel)
                        else:
                                ircMessage(str(to)+ ' er en Botnak'+'!', mainchannel)

                elif data.find(':!MrMusic') !=-1:
                        t = data.split(':!MrMusic')
                        to = t[1].strip()
                        if str(to) == 'Twingo':
                                ircMessageMe(' synes ' +str(to)+ ' er saa cool'+','+' han burde vaere staff', mainchannel)
                        else:
                                ircMessageMe(' synes ' +str(to)+ ' er en cool person'+'....', mainchannel)

                elif data.find(':!Plade') !=-1:
                        t = data.split(':!Plade')
                        to = t[1].strip()
                        list = ['Hansi Hinterseer', 'hittet ' +':'+ ' Boombastic', 'Bamses venner', 'Hurdy Gurdy', 'The Raveonettes', 'Toy-Box', 'Tina Dickow', 'Sharin Foo', 'Caroline Henderson']
                        randomitem = random.choice(list)
                        ircMessageMe(' stikker ' +str(to)+ ' en plade med ' + randomitem + '...', mainchannel)
                       




    except:
        continue
Avatar billede plato Juniormester
19. august 2017 - 19:21 #6
Eller skal jeg ud i noget re.ignorecase?
Avatar billede jakobdo Ekspert
19. august 2017 - 20:39 #7
Du har jo denne:  data = irc.recv(4096)

Prøv at lav en print(type(data)) og se hvad type data er.
Mit gæt er en string, men det kan måske være bytes eller lign...
Men du kunne overveje allerede der, at lave:
data = data.lower()
Så vil data indeholde "lowercase" af alt tekst, som dit bot har modtaget.
Avatar billede plato Juniormester
19. august 2017 - 21:01 #8
Hvis jeg indsætte data = data.lower() lige under data = irc.recv(4096), betyder det at mit NICK bliver lavet om til små bokstaver, og så kan jeg ikke lave nick identify på serveren.

print(type(data)) - denne er ikke forstået? Skal det indtastes i SSH eller IRC?
Avatar billede plato Juniormester
19. august 2017 - 21:14 #9
Tak for hjælpen, det virker nu:

while True:
    data = irc.recv(4096)
    lower_data = data.lower()
    print data
    try:
        if "PING" in data:
            rawSend("PONG")

        if "You have not registered" in data:
            Initialize()

        if "!testcmd" in data:
            ircMessage("tester", mainchannel)

                if lower_data.find(':!kaff') !=-1:
                        t = lower_data.split(':!kaff')
                        to = t[1].strip()
                        nick = str(data.split(':')[1].split('!')[0])
                        ircMessageMe(' serverer en friskbrygget kop kaffe til ' + str(nick)+'.', mainchannel)
Avatar billede jakobdo Ekspert
20. august 2017 - 11:26 #10
Overvej generelt at brug in og ikke .find(), når du søger efter tekst i din streng.
Hvorfor siger du så?
Derfor: https://stackoverflow.com/questions/18437798/find-vs-in-operation-in-string-python

Performance og det er også nemmere at "læse". :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester