【问题标题】:Fix "Nickname is already in use" in my Python IRC client在我的 Python IRC 客户端中修复“昵称已在使用中”
【发布时间】:2017-08-02 08:08:06
【问题描述】:

错误:

NOTICE Auth :*** Looking up your hostname...
433 * testbot:Nickname is already in use.
NOTICE Auth :*** Could not resolve your hostname: Request timed out; using your IP address () instead.
451 837AAAABB JOIN :You have not registered

脚本运行良好,我遇到的唯一问题是另一个用户具有相同的名称,因此机器人无法加入,我该如何解决这个问题?

#IRC Info, Where the bot connects too
server="Server"
botnick="testbot"
channel="#test"

我尝试过的:

Google、YouTube、查看其他 github IRC bot 和 stackoverflow。

我的一个想法是使用随机字符串生成器,因此如果使用名称“testbot”,脚本将生成随机的东西并重试。我不确定如何添加它。

【问题讨论】:

  • 可能您连接了两次,或者您使用的是保留名称。
  • 一般情况下,您会尝试使用另一个昵称来建立联系。该机器人还应该在 NickServ 上注册(在大多数网络上都可用),以便它可以收回昵称,然后切换到它。
  • 您好,您说的都对,但是,我不想手动更改它,我希望脚本自动执行此操作。这就是为什么我在考虑使用随机字符串,这样名称总是随机的而不是问题?

标签: python irc


【解决方案1】:
irc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

def ircwrite(message): global irc irc.send(str(message).encode('utf-8'))

botnick = "ME_Number-1" # Nickname of the bot InUse_alt = "Me2" # if Nickname: "('botnick')" is already in use, A.K.A. 433, uses this alternative option instead

while 1: text = irc.recv(2048).decode('utf-8') print(text)

    if "433" in text:
        print("Bot's nick IN USE or has been regged by another; switching to: "+ (InUse_alt))
    if text.find("433") != -1:
        ircwrite("NICK "+ InUse_alt +" \r\n")
--- 类似的东西在大多数情况下都有效,但可以通过以下方式触发:有人说:“433”;试图解决这个问题。

【讨论】:

  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
【解决方案2】:

此答案假定昵称已由您注册。

收到ERR_NICKNAMEINUSE (433)时,将REGAIN发送到nickserv。我个人也注意不要在 30 秒内发送超过 3 次 REGAIN,否则我会因为其他问题而断开连接并重新连接。

REGAIN YourRegisteredNick YourPassword

偶尔会收到NOTICE 以及包含can not regain your nickname 的第二个参数。这表示REGAIN 失败。我知道处理此错误的唯一方法是断开、重新连接和重新加入频道。

【讨论】:

    【解决方案3】:

    如果没有看到您尝试过的一些代码,很难为您提供帮助。或者任何代码。

    总体思路是检测传入消息何时是433(又名ERR_NICKNAMEINUSE),然后发送带有新昵称的新NICK 命令;然后再试一次,直到找到一个免费的昵称。

    伪代码:

    MAINNICK = 'testbot'
    nick_suffix = 1
    send_msg('NICK {}'.format(MAINNICK))
    while True:
        msg = recv_msg()
        if msg.split(' ')[1] == '433':
            send_msg('NICK {}{}'.format(MAINNICK, nick_suffix))
            nick_suffix += 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      • 2013-11-30
      • 2015-11-21
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多