      ###
     updateNotifyConfig: (ship_id) ->
       return unless ship_id > 0
-      server = SERVERS[(ship_id + NONCE) % SERVERS.length]
+      server = SERVERS[(ship_id + SERVER_NONCE) % SERVERS.length]
       filename = @state.shipgraph[ship_id]?.api_filename
       return unless server
       return unless filename

  displayName: [<FontAwesome name='file-audio-o' key={0} />, ' 秘书通知']
  description: '秘书舰通知语音'
  author: 'Dazzy Ding'
  link: 'https://github.com/dazzyd'
  show: true
  priority: 8
  version: '0.2.0'
  reactClass: React.createClass
    getInitialState: ->
      isLogin: false
      notifySecretary: config.get('plugin.secretary.ship', 0)
      fleetSecretary: null
      ships: []
      shipgraph: []
    componentDidMount: ->

            <p>当前秘书舰：{ if @state.fleetSecretary then window.$ships[@state.fleetSecretary]?.api_name else "未知" }</p>
          </Col>
        </Grid>

        <div className="divider">
          <h5>通知测试</h5>
          <hr />
        </div>
        <Grid>
          <Col xs=4>
            <Button bsStyle='danger' style={width: '100%'}
              onClick={@handleAudition.bind(this, 'construction')}>建造</Button>
          </Col>
          <Col xs=4>
            <Button bsStyle='warning' style={width: '100%'}
              onClick={@handleAudition.bind(this, 'repair')}>入渠</Button>
          </Col>
          <Col xs=4>
            <Button bsStyle='info' style={width: '100%'}
              onClick={@handleAudition.bind(this, 'expedition')}>远征</Button>
          </Col>
        </Grid>

        <div className="divider">
          <h5>高级选项</h5>
          <hr />
        </div>
        <Grid>
          <Col xs=6>
            <Button bsStyle='warning' style={width: '100%'} onClick={@handleRefresh}>
              重新设置通知声音
            </Button>
          </Col>
        </Grid>

      </div>
