2017-07-05 1 views
-1

私はファイルか何かから正規表現を生成し、それが@re_botcmdErrbotダイナミック正規表現

に必要がありますが、私はエラーを取得します:「定義されていません」発見されre_botcmd変数を定義しない方法はありますか?ログファイルから

from errbot import BotPlugin, re_botcmd 
from pathlib import Path 
import re 

class ModHelper(BotPlugin): 
"""Help Mods Warning User and kick/ban them""" 

def activate(self): 
    self.my_file = Path("./filter.txt") 
    if not self.my_file.is_file(): 
     return 

    self.filter = open('filter.txt', 'r') 
    for self.tmp in self.filter: 
     if not self['reg']: 
      self['reg'] = '(',self.tmp,')' 
     else: 
      self['reg'] = self['reg'],'|(',self.tmp,')' 

    return super().activate() 


@re_botcmd(pattern=self['reg'], prefixed=False, flags=re.IGNORECASE) 
def test_warn(self, msg, match): 
     """Test""" 
     return "Warn User" 

エラー:

Errbot‎: File "<frozen importlib._bootstrap_external>", line 678, in exec_module 
File "<frozen importlib._bootstrap>", line 205, in _call_with_frames_removed 
File "/home/errbot/errbot-root/plugins/err-modhelper/modhelper.py", line 5, in <module> 
class ModHelper(BotPlugin): 
File "/home/errbot/errbot-root/plugins/err-modhelper/modhelper.py", line 23, in ModHelper 
@re_botcmd(pattern=self['reg'], prefixed=False, flags=re.IGNORECASE) 
NameError: name 'self' is not defined 

感謝〜

+0

エラーが発生しました。完全なエラースタックを指定してください。 – Kishan

+0

は、より良い表示のために投稿にエラーを追加しました –

+0

この行に自分をどのように指定できますか? '@re_botcmd(pattern = self ['reg']、prefixed = False、flags = re.IGNORECASE)'できません。 PLZはクラスの__init__メソッドに登録してからself.regを使ってアクセスします – Kishan

答えて

0

このようなsomethinをお試しください:

class ModHelper(BotPlugin): 
"""Help Mods Warning User and kick/ban them""" 
def __init__(self, reg=None): 
    self.reg = reg 

def activate(self): 
    self.my_file = Path("./filter.txt") 
    if not self.my_file.is_file(): 
     return 

    self.filter = open('filter.txt', 'r') 
    for self.tmp in self.filter: 
     if not self.reg: 
      self.reg = '(',self.tmp,')' 
     else: 
      self.reg = self.reg,'|(',self.tmp,')' 

    return super().activate() 


@re_botcmd(pattern=self.reg, prefixed=False, flags=re.IGNORECASE) 
def test_warn(self, msg, match): 
     """Test""" 
     return "Warn User" 
+0

ありがとう、ちょっと遊びますが、試してみると同じエラーが出ます。私はre_botcmdが変数を創設している方法があることを願っています:) –

+0

もう一度あなたのエラーを貼り付けてみてください。 – Kishan

0

認識がチャットにJIRA課題の言及時、私は同様の問題がありました;認識者はJiraプロジェクトのリストを知る必要がありました。小さなユーティリティクラスでコンパイル時にリストを取得し、実行時に認識プログラムにリストを持ち込ませることで解決しました。

class JiraProjects(object): 

    def __init__(self): 
     jira = Jira() 
     self.list = jira.active_projects() 
     self.recognizer = r'\b(?P<issue>(?:%s)-\d+)\b' % '|'.join(self.list) 

projects = JiraProjects() 

class JiraPlugin(BotPlugin): 

    def activate(self): 
     self.jira = Jira() 
     super().activate() 

@re_botcmd(prefixed=False, pattern=projects.recognizer, flags=re.IGNORECASE, matchall=True) 
    def jira_recognize(self, msg, matches): 
     """ 
     Provides information about any jira issue that is mentioned 
     """ 
     for match in matches: 
      issue = self.jira.get_issue(match.group(0)) 
      yield self.show_issue(issue)